ich bastelte aktuell an einer Kleinigkeit und sammle mit jedem Schritt auch mehr Erfahrung im Umgang mit Python.
Dafür hab ich mich online informiert und auch genau das richtige für mein kleines Projekt zusammen gesucht.
Mit meinem Programm will ich in pyqt5 über einen Button das zuhören über ein Mikrophone einleiten.
Das Programm soll solange laufen und lauschen, bis der gewünschte Key von DeepSpeech übergeben wird. Darauf hin soll der Audiostream unterbrochen werden und die mit dem Key verbundene Aktion ausgeführt werden.
Im Anschluss soll der Audiostream jungfräulich neu aufgesetzt werden und genauso auch immer weiter laufen.
Mein Problem ist.
Den von PyAudio einmal eingeleiteten Audiostream bekomme ich wie gewünscht ohne Fehler angehalten, aber leider mach das erneute Starten Probleme und lässt das Programm ohne einen Fehlercode abstürzen.
Code: Alles auswählen
import PyQt5.QtWidgets as widgets
import PyQt5.uic as uic
import sys
import deepspeech
import numpy as np
import pyaudio
model = deepspeech.Model("deepspeech-0.9.3-models.pbmm")
model.enableExternalScorer("deepspeech-0.9.3-models.scorer")
model.setScorerAlphaBeta(0.75, 1.85)
model.setBeamWidth(500)
text_so_far = ''
start_stop = 1
ds_stream = model.createStream()
app = widgets.QApplication(sys.argv)
ds = uic.loadUi("DeepSpeech.ui")
def process_audio(in_data, frame_count, time_info, status):
global text_so_far
global start_stop
data16 = np.frombuffer(in_data, dtype=np.int16)
ds_stream.feedAudioContent(data16)
text = ds_stream.intermediateDecode()
if text != text_so_far:
print('Interim text = {}'.format(text))
if "stop" in text:
start_stop = 0
print("stop")
elif "start" in text:
start_stop = 0
print("start")
#und immer so weiter
text_so_far = text
return (in_data, pyaudio.paContinue)
def start_zuhoeren():
global start_stop
audio = pyaudio.PyAudio()
stream = audio.open(
format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=1024,
stream_callback=process_audio
)
print('Please start speaking')
stream.start_stream()
while stream.is_active():
if start_stop == 0:
start_stop = 1
stream.stop_stream()
stream.close()
audio.terminate()
print('Finished recording.')
ds.pushButton.clicked.connect(start_zuhoeren)
ds.show()
sys.exit(app.exec_())