Also es handelt sich um einen Raspi, welchen ich mit einem USB-Stick für Audio-Ausgang ausgestattet habe. Das ganze wäre dann Klinken-Anschluss. Zum Abspielen nutze ich ALSA (bzw. PyAlsaAudio), bzw. pyAudio. Das Projekt ist ein Sprachassistent, bei dem es sich um ein Server-Client-Prinzip handelt. Wenn eine Audiodatei, in welcher die Antwort des Sprachassistenten enthalten ist, abspiele, schickt der Server einen String an den Client, was er sagen soll. Der Client konvertiert diesen mithilfe von google tts zu einer Wave-datei.
Nun möchte ich aber, dass der Server eine Wav-Datei dem Client schicken kann und dieser diese dann einfach stumpf abspielt.
Zum versenden nutze ich Sockets. Die Datei kommt eigentlich auch soweit an. Ich verschicke sie in Chunks der Größe 16384. Ich speicher die Chunks dann in einem array. In einem weiteren Thread wird geschaut, ob etwas in diesem Array ist und wenn dies der Fall ist, wird der Inhalt abgespielt. wenn was "wichtigeres" dazwischen kommt, wird das Feld mit der jeweiligen Chunk-größe noch fertig abgespielt, dann kommt die wichtige nachricht und dann geht es mit den Chunks weiter. Die Wave-Dateien stelle ich vor dem Abspielen wie folgt ein:
Code: Alles auswählen
chunk = 16384
frame_rate = audiofile.getframerate()*2
format = {'format': 8,
'channels':1,
'rate':frame_rate,
'chunk':chunk}
wav_data = audiofile.readframes(chunk)
audio_buffer = []
while wav_data:
audio_buffer.append(wav_data)
wav_data = audiofile.readframes(chunk)
Die Funktion, die den Ton ausgibt sieht wie folgt aus (Die Einrückung ist wegen copy-paste falsch):
Code: Alles auswählen
def __init__(self, serverconnection, local_storage, Audio_Input):
self.Serverconnection = serverconnection
self.playback_audio_buffer = []
self.playback_audio_format = {}
self.notification_audio_format = {}
self.audio = pyaudio.PyAudio()
stream = self.audio.open(format=self.playback_audio_format['format'],
channels=self.playback_audio_format['channels'],
rate=self.playback_audio_format['rate'],
output=True,
frames_per_buffer=self.playback_audio_format['chunk'])
for data in self.playback_audio_buffer:
if not data == 'Endederdurchsage':
stream.write(data)
Das sind erst einmal die wichtigsten informationen glaube ich.
Hoffe Ihr könnt damit was anafngen