2012-11-13 12 views
5

Ich spiele herum mit dem Erstellen eines Python-Skripts, die Rhythmen wie eine Drum-Machine spielen. Ich habe PyGame benutzt, um mit dem Audio umzugehen. Jedoch erfahre ich signifikante/inakzeptable Verzögerungen zwischen dem Anrufen und dem Hören des tatsächlichen Audios.PyGame hat große Verzögerung beim Abspielen von Sounds

klebte ich den folgenden Code in den interaktiven Interpreter, und dann die letzte Zeile wieder ausführen und wieder:

import pygame 
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=4096) 
s = pygame.mixer.Sound('snare.wav') 
s.play(loops=0, maxtime=0, fade_ms=0) 

Die Zeit zwischen dem Drücken eingeben und das Audio ist zu hören durch meine beste Vermutung um 400 ms, und zwar auffällig und inakzeptabel. Die Verzögerung ist ungefähr die gleiche wie wenn ich auf die Wiedergabetaste in VLC klicke und darauf warte, dass das Audio abgespielt wird.

Ich habe dies auf Windows und Ubuntu mit dem gleichen Ergebnis versucht. Mein Computer ist ein bisschen alt, ein Intel Core i3, 2.53GHz, aber ich denke, das sollte kein Problem sein.

Was kann ich dagegen tun?

In einer Schleife:

Dieser Code zeigt die gleiche Verzögerung.

for i in range(10): 
    print i 
    s.play(loops=0, maxtime=0, fade_ms=0) 
    sleep(2) 
+0

1) Vielleicht eine Verzögerung im Interpreter selbst? Probieren Sie 'raw_input(); s.play (loops = 0, maxtime = 0, fade_ms = 0)' aus und drücken Sie erneut die Eingabetaste. 2) Beginnt die Snare am Anfang der Sounddatei? Wenn Sie die Datei in Audacity öffnen, wie viel Zeit liegt zwischen dem Start und dem tatsächlichen Sound? –

+0

1) Kein Unterschied. 2) Der eigentliche Sound beginnt sofort in der Wave-Datei. Auch ich habe es mit anderen Wave-Dateien versucht. –

+0

könntest du einen link zur tondatei posten, ich möchte das mit meiner maschine testen –

Antwort

8

Eine mögliche Lösung ist die Puffergröße (zB 512) zu verringern:

import pygame 
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=512) 
s = pygame.mixer.Sound('snare.wav') 
s.play(loops=0, maxtime=0, fade_ms=0) 
1

hatte ich das gleiche Problem vor ein paar Minuten vor, und es gibt eine Lösung, die in This other thread funktioniert für mich

Es sieht aus wie ein Initialisierungsproblem, pygame bekommt die Puffer nicht gut, wenn Sie zuerst pygame (oder auch XD) initalisieren. Initialisieren Sie den Mischer init() und pre_init() erste und Experiment von dort:

pygame.mixer.pre_init(44100, -16, 2, 512) 
pygame.mixer.init() 
pygame.init() 

Das sollte funktionieren :) Viel Glück!

Verwandte Themen