es ist schon spät, aber später habe ich keine Zeit mehr.
Ich habe ein Programm, bei dem ich parallel zur Bedienung (hauptsächlich tippen) eine Datei mit roher Audio ausgeben will und die Dauer der Ausgabe messen will. Deshalb habe ich das ganze nachdem es seriell funktionierte mit threading erweitert. Im Interpreter habe ich alles getestet und es war kein Problem. Nur im Skript selbst beendet sich die Audio-Ausgabe nicht, nachdem die Datei komplett abgespielt worden ist. Die Abspielzeit wird nie berechnet, erst wenn ich das Programm beende.
Woran kann das liegen? Baue ich ein .join() direkt hinter .start() dann beendet die Audio-Ausgabe und die Berechnung direkt, wie es soll. Nur dann brauche ich auch kein Threading. Hier ein paar Schnippsel (Python 2.5):
Code: Alles auswählen
class SoundThread(threading.Thread):
def __init__(self, snd_dev, snd):
threading.Thread.__init__(self)
self.snd_dev = snd_dev
self.snd = snd
self.duration = -1
def run(self):
t1 = time.time()
print t1
self.snd_dev.write(self.snd)
t2 = time.time()
print t2
self.duration = t2-t1
print self.duration
def get_duration(self):
return self.duration
snd_dev = alsaaudio.PCM(alsaaudio.PCM_PLAYBACK)
snd_dev.setformat(alsaaudio.PCM_FORMAT_U8)
snd_dev.setrate(rate)
snd_dev.setperiodsize(rate)
snd_dev.setchannels(1)
snd_file = open(snd_path)
snd = snd_file.read()
snd_file.close()
self.t_snd = SoundThread(snd_dev, snd)
self.t_snd.start()
Gute Nacht,
Cornell