Как я могу записывать с двух устройств одновременно, используя звуковое устройство? - PullRequest
0 голосов
/ 07 марта 2020

В настоящее время у меня есть 2 аудиокодека, подходящих для ввода, и я хочу записывать с них одновременно, а не последовательно.

Вот как я вижу свои устройства:

import sounddevice as sd
sd.querydevices()

вывод:

< 0 DisplayPort, Core Audio (0 in, 2 out)
  1 USB AUDIO  CODEC, Core Audio (0 in, 2 out)
  2 USB AUDIO  CODEC, Core Audio (2 in, 0 out)
  3 USB AUDIO  CODEC, Core Audio (0 in, 2 out)
> 4 USB AUDIO  CODEC, Core Audio (2 in, 0 out)
  5 USB Advanced Audio Device, Core Audio (0 in, 2 out)
  6 USB Advanced Audio Device, Core Audio (1 in, 0 out)
  7 MacBook Pro Microphone, Core Audio (1 in, 0 out)
  8 MacBook Pro Speakers, Core Audio (0 in, 2 out)

В настоящее время я могу записывать только с одного устройства одновременно. Приведенные выше входные аудиоустройства - это 2 и 4, при этом по умолчанию выбрано значение 4 и отмечено каратой '>'.

Теперь я знаю, как записывать на канале по умолчанию в течение 4 секунд:

recording = sd.rec(int(4 * 44100), samplerate=44100, channels=1)

Я также знаю, как изменить канал по умолчанию, например, установить его на 2:

sd.default.device = [2,0]   

Что я хотел бы сделать, это одновременно выполнять запись с каналов [4,0] и [2,0] одновременно.

1 Ответ

0 голосов
/ 07 марта 2020
sounddevice.rec(frames=None, samplerate=None, channels=None, dtype=None, out=None, mapping=None, blocking=False, **kwargs)
#Record audio data into a NumPy array.

Это удобная функция для интерактивного использования и для небольших сценариев. Эта функция внутренне выполняет следующие шаги:

  • Вызовите stop (), чтобы прекратить любой текущий запущенный вызов play (), re c () и playre c ().
  • Создание функции InputStream и callback для обеспечения фактической записи.
  • Запуск потока.
  • При блокировке = Истина была дана, подождите пока запись не будет завершена. Если нет, немедленно вернитесь.

Если вам нужен больший контроль (например, безблочная запись, перекрывающиеся записи,…), вы должны явно создать InputStream самостоятельно

Так что, возможно, решение - создать еще один InputSream

...