При работе с 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 записывать голос отрывками по пять секунд с дальнейшей обработкой. и первую команду все работает хорошо, но потом нет


Ответы (0 шт):