Несколько входов на звуковом устройстве
У меня есть 2 звуковые карты, с которых я должен принимать входные данные, обрабатывать их и подавать на выход третьей карты. Я предполагаю что sounddevice
lib - лучший вариант для этой цели, потому что он напрямую работает с numpy
массивы, с которыми чрезвычайно удобно работать. Но есть две проблемы, с которыми я столкнулся:
1. Я не могу понять, как подключить к 2 (и более) входам от разных карт в одном потоке (или может быть возможно открыть несколько потоков)
2. При попытке запустить поток вывода с предопределенным устройством я получаю сообщение об ошибке:
def callback(indata, outdata, frames, time, status):
outdata[:, 1] = data
with sd.Stream(device = 1, channels=2, callback=callback):
print(' ')
sounddevice.PortAudioError: Error opening Stream: Invalid number of channels [PaErrorCode -9998]
Я полагаю, что это связано с отображением каналов Core Audio на моем MacBook, который имеет следующие настройки аудио:
0 Built-in Input, Core Audio (2 in, 0 out)
1 Built-in Output, Core Audio (0 in, 2 out)
Но я не могу решить эту проблему сам.
заранее спасибо
1 ответ
Невозможно иметь один поток с несколькими устройствами ввода или вывода, см. Также /questions/43319864/problemyi-mnogokanalnoj-sinhronizatsii-zvuka-v-python-sounddevice/43319868#43319868.
Однако вы можете объединить два устройства в настройках звука MacOS (ищите "агрегатное устройство").
Ошибка, которую вы показываете, происходит потому, что вы используете sd.Stream
, который имеет как вход, так и выход. Определение channels=2
означает, что количество входных и выходных каналов равно 2. Но вы просто предоставляете одно устройство с device=1
, который не имеет входных каналов, что приводит к заданному сообщению об ошибке.
С CoreAudio вы обычно можете просто использовать устройства по умолчанию, но если вы хотите явно указать номера устройств, вы должны указать правильные устройства ввода и вывода, например:
device=[0, 1]