СПРОСИ ПРОФИ
👍
0
👎 00

При работе с pyaudio возникла следующая ошибка OSError: [Errno -9988] Stream closed

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

программисты IT     #1   23 мар 2024 18:54   Увидели: 6 клиентов, 1 специалист   Ответить

Задайте свой вопрос программистам –
профессионалам

Сейчас онлайн 75 программистов
Получите ответ профи быстро и бесплатно
ASK.PROFI.RU © 2020-2024