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

Список устройств, я выбрал правильно 1 и 3.
я понимаю, что динамики не являются устройством ввода, но по гайду делаю и у человека все работают, устройства в таком же порядке.
Использую Python 3.9.12
вот код
я пробовал в device = sd.default.device = 1, 3 убрать = 1, 3. Значит должно выбрать устройство по умолчанию, не помогло.
import sounddevice as sd
import vosk
from vosk import Model, KaldiRecognizer
q = queue.Queue()
model = vosk.Model('model_small')
device = sd.default.device = 1, 3 # sd.default.device = 1, 3 /////input, output # Устройства, которые использую 1 = Миколфон, 3 Динамики. Выбор по умолчанию
samplerate = int(sd.query_devices(device[1], 'input')['default_samplerate'])
#48000
def callback(indata, frames, time, status):
q.put(bytes(indata))
with sd.RawInputStream(samplerate=samplerate, blocksize = 48000, device=device[1],
dtype="int16", channels=1, callback=callback):
# после того, как микро прослушает 48000 сэмплов, их необходмо куда-то передать - 'callback'
rec = vosk.KaldiRecognizer(model, samplerate)
while True:
data = q.get()
if rec.AcceptWaveform(data):
print(rec.Result())
else:
print(rec.PartialResult())
Ответы (2 шт):
device у вас кортеж (1, 3). Значит device[1] - это 3. А устройство 3 - это динамики, так что оно правильно ругается. Попробуйте поменять на device[0]:
samplerate = int(sd.query_devices(device[0], 'input')['default_samplerate'])
Или в явном виде указать 1 в аргументах:
samplerate = int(sd.query_devices(1, 'input')['default_samplerate'])
Поменяй это:
samplerate = int(sd.query_devices(device[1], 'input')['default_samplerate'])
на это:
samplerate = int(sd.query_devices(device[*0*], 'input')['default_samplerate'])
где, 0 означает, что будет использоваться первое значение в device.
A так же замени это:
with sd.RawInputStream(samplerate=samplerate, blocksize = 48000, device=device[1],
на это:
with sd.RawInputStream(samplerate=samplerate, blocksize = 48000, device=device[*0*]