Transmita áudio do pyaudio com o Flask para HTML5
Quero transmitir o áudio do meu microfone (que está sendo gravado via pyaudio) via Flask para qualquer cliente que se conectar.
É daí que o áudio vem:
def getSound(self):
# Current chunk of audio data
data = self.stream.read(self.CHUNK)
self.frames.append(data)
wave = self.save(list(self.frames))
return data
Aqui está o meu código do frasco:
@app.route('/audiofeed')
def audiofeed():
def gen(microphone):
while True:
sound = microphone.getSound()
#with open('tmp.wav', 'rb') as myfile:
# yield myfile.read()
yield sound
return Response(stream_with_context(gen(Microphone())))
E este é o cliente:
<audio controls>
<source src="{{ url_for('audiofeed') }}" type="audio/x-wav;codec=pcm">
Your browser does not support the audio element.
</audio>
Às vezes funciona, mas na maioria das vezes estou recebendo "[Errno 32] Tubo quebrado"
Ao descomentar isso com open ("tmp.wav") - parte (o self.save () opcionalmente pega todos os quadros anteriores e os salva em tmp.wav), eu meio que recebo um fluxo, mas tudo o que sai dos alto-falantes é um ruído de "clique".
Estou aberto a sugestões. Como faço para obter a entrada do meu microfone transmitida ao vivo (sem pré-gravação!) Para um navegador da web?
Obrigado!