При работе с pyaudio возникла ошибка помогите разобраться
При работе с pyaudio возникла следующая ошибка OSError: [Errno -9988] Stream closed, помогите разобраться. Вот весь мой код. `q = queue.Queue()
model = vosk.Model('model_small')
device = sd.default.device
samplerate = int(sd.query_devices(device[0], 'input')['default_samplerate'])
def callback(indata, frames, time, status):
q.put(bytes(indata))
def recognize(data, vectorizer, clf): # получаем вектор полученного текста # сравниваем с вариантами, получая наиболее подходящий ответ text_vector = vectorizer.transform([data]).toarray()[0] answer = clf.predict([text_vector])[0]
# получение имени функции из ответа из data_set
func_name = answer.split()[0]
# озвучка ответа из модели data_set
vois_pyttsx3.speaker(answer.replace(func_name, ''))
# запуск функции из skills
exec(func_name + '()')
def maun(): # Создание экземпляра объекта Porcupine с указанием пути к модели активационной фразы porcupine = pvporcupine.create( access_key=words.accessKey, keyword_paths=[words.KEYWORD_PATH], model_path=words.modelPath )
# Получение параметров аудиопотока
pa = pyaudio.PyAudio()
# Определение параметров аудиопотока
stream = pa.open(
rate=porcupine.sample_rate,
channels=1,
format=pyaudio.paInt16,
input=True,
frames_per_buffer=porcupine.frame_length
)
while True:
pcm = stream.read(porcupine.frame_length)
pcm = struct.unpack_from("h" * porcupine.frame_length, pcm)
# Проверка, входит ли входное аудио в активационную фразу
keyword_index = porcupine.process(pcm)
# Если активационная фраза распознана, произвести нужные действия
if keyword_index >= 0:
print("Действие, связанное с активационной фразой")
vois_pyttsx3.speaker('да сэр')
main(pa, stream)
pa.terminate()
def main(pa, stream): vectorizer = CountVectorizer()
vectors = vectorizer.fit_transform(list(words.data_set.keys()))
clf = LogisticRegression()
clf.fit(vectors, list(words.data_set.values()))
del words.data_set
recognizer = vosk.KaldiRecognizer(model, 16000)
print("Recording...")
frames = []
for i in range(0, int(16000 / 8000 * 5)): # Запись на 5 секунд
data = stream.read(8000)
frames.append(data)
print("Recording finished.")
stream.stop_stream()
stream.close()
pa.terminate()
data = b''.join(frames)
if recognizer.AcceptWaveform(data):
data = json.loads(recognizer.Result())['text']
recognize(data, vectorizer, clf)
if name == 'main': maun() ` Изначально хотел распознавать активационную фразу в функции maun, а в функции main записывать голос отрывками по пять секунд с дальнейшей обработкой. и первую команду все работает хорошо, но потом нет