В соответствии с официальной документацией , метод listen()
ожидает, пока звуковая энергия не превысит определенный уровень (указывая, что кто-то говорит), и записывает, пока не будет обнаружено молчание.Если ваш микрофон воспринимает слишком много окружающего шума, то listen()
никогда не возвращается, потому что он продолжает ждать тишины.
Чтобы исправить это, вы можете использовать r.adjust_for_ambient_noise(source)
:
with sr.Microphone() as source:
r.adjust_for_ambient_noise(source)
print('speak say anything')
audio = r.listen(source)
print("done listening")
Вы также можете указать параметры timeout
и phrase_time_limit
в listen()
, чтобы он останавливался и возвращался через определенное количество секунд, даже если речь или молчание не были обнаружены.
with sr.Microphone() as source:
r.adjust_for_ambient_noise(source)
print('speak say anything')
try:
# wait for speech for a maximum of 3 seconds
# listen to speech for a maximum of 3 seconds
audio = r.listen(source, timeout=3, phrase_time_limit=3)
except Exception as e:
# a timeouterror exception will be thrown if the timeout is reached
print(e)
print("done listening")
При инициализации также может быть хорошей идеей проверить работающие микрофоны и явно установить device_index:
for device_index in Microphone.list_working_microphones():
m = Microphone(device_index=device_index)
break
else:
print("No working microphones found!")