Python Audio-Ausgabe beendet nicht im Thread

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Kalimac
Beiträge: 293
Registriert: 25.05.2004 13:19:48
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wetterau
Kontaktdaten:

Python Audio-Ausgabe beendet nicht im Thread

Beitrag von Kalimac » 23.04.2010 01:19:21

Hallo zusammen,

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()
Die Sounddatei ist bis zu mehreren Minuten lang. Bin für jeden Hinweis dankbar!

Gute Nacht,
Cornell
Die technische Evolution ist die Wirkung eines geistigen Fortschritts gewesen und könnte nun zu seiner Ursache werden.
- Jacques Neirynck -

Benutzeravatar
Kalimac
Beiträge: 293
Registriert: 25.05.2004 13:19:48
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wetterau
Kontaktdaten:

Re: Python Audio-Ausgabe beendet nicht im Thread

Beitrag von Kalimac » 23.04.2010 08:30:15

Habe nochmal darüber geschlafen. Könnte es sein, dass der Buffer nicht komplett leer/voll ist und das Gerät noch auf den Rest wartet, bis es alles rausschreibt und beendet?

EDIT: Daran lag es nicht, ich berechne die Zeit jetzt anders. Und schiebe im Thread immer neu nach, das läuft.
Die technische Evolution ist die Wirkung eines geistigen Fortschritts gewesen und könnte nun zu seiner Ursache werden.
- Jacques Neirynck -

Antworten