Какие шаги нужно предпринять, чтобы устранить ошибку отключения функции распознавания речи?

Я планирую создать небольшой голосовой ассистент для личного использования. Для распознавания речи я использую библиотеку <b>Speech_Recognition</b>, но при запуске аудиофайлов функция распознавания речи отключается без каких-либо сообщений об ошибках в консоли.

Вот команда в файле main.py:  
<pre><code class="python">elif cmd == "explorer":
        subprocess.run(['python', 'commands/explorer.py'])</code></pre>

А вот команда в отдельном файле:  
<pre><code class="python">import pyautogui
import pyglet
import os

pyautogui.hotkey('win', 'e')
song = pyglet.media.load('speak/yes.mp3')
song.play()     
pyglet.app.run()
print("[F.R.I.D.A.Y]: Запрос выполнен")</code></pre>

Распознавание речи в main.py выполняется с помощью следующего кода:  
<pre><code class="python">r.listen_in_background(microphone, callback)
while True: pass</code></pre>

Можете подсказать, в чем может быть проблема с отключением распознавания речи?
  • 18 сентября 2024 г. 13:33
Ответы на вопрос 2
Проблема с отключением функции распознавания речи может быть связана с тем, как вы обрабатываете выполнение аудиофайлов и запуск основного потока для распознавания речи. Поскольку вы используете `pyglet` для воспроизведения аудиофайла, программа может блокировать поток, в котором работает функция распознавания. Вот несколько шагов, которые помогут вам устранить эту проблему:

1. **Запуск воспроизведения в отдельном потоке**:
   Вы можете создать отдельный поток для воспроизведения аудиофайла с использованием модуля `threading`. Это позволит вашему основному потоку продолжать работу и слушать команды распознавания речи.

   Пример кода с использованием потока:
   ```python
   import threading
   import pyautogui
   import pyglet

   def play_sound(file_path):
       song = pyglet.media.load(file_path)
       song.play()
       pyglet.app.run()

   # Запуск функции в отдельном потоке
   def open_explorer():
       pyautogui.hotkey('win', 'e')
       sound_thread = threading.Thread(target=play_sound, args=('speak/yes.mp3',))
       sound_thread.start()
       print("[F.R.I.D.A.Y]: Запрос выполнен")
   ```

2. **Проверка конфликта аудио**:
   Убедитесь, что ваша система не имеет конфликтов с аудиоустройствами. Иногда может возникать проблема, если несколько приложений пытаются получить доступ к одному и тому же аудиодрайверу. Проверьте настройки звука и аудиоустройства.

3. **Проверка ошибок в библиотеке pyglet**:
   Убедитесь, что у вас установлена актуальная версия библиотеки `pyglet` и что она совместима с вашей версией Python. Если версия устарела, могут возникать неожиданные проблемы.

4. **Создание обработчика ошибок**:
   Если у вас еще нет, может быть полезно добавить обработчики ошибок, чтобы лучше понять, что происходит в вашем коде. Поймайте исключения и выведите их на консоль, чтобы выяснить, если что-то идет не так.

5. **Обновление библиотек**:
   Убедитесь, что все используемые библиотеки (`Speech_Recognition`, `pyautogui`, `pyglet`) обновлены до последних версий, так как в новых версиях могут быть исправлены ошибки.

В итоге, выделяя воспроизведение звука в отдельный поток, вы должны быть в состоянии сохранить функцию распознавания речи активной во время воспроизведения аудиофайлов.
В вашем коде pyglet блокирует основной поток программы, рекомендую запускать воспроизведение звука в фоновом потоке. 

import pyautogui
import pyglet
import os
import threading

pyautogui.hotkey('win', 'e')

def play_sound():
    song = pyglet.media.load('speak/yes.mp3')
    song.play()
    pyglet.app.run()

threading.Thread(target=play_sound).start()

print("[F.R.I.D.A.Y]: Запрос выполнен")
Похожие вопросы