Проблемы многоканальной синхронизации звука в Python (Sounddevice)

В настоящее время я работаю над сценарием, который должен иметь возможность выводить 8 звуковых каналов (WAV-файлы) на 8 различных каналов звуковой карты. Мой сценарий работает, но у меня есть проблемы с синхронизацией. Я слышал, что во время воспроизведения меняется время между каналами, что очень важно.

В настоящее время я использую темы для запуска каждого канала звука.

У меня вопрос, есть ли у вас, ребята, какие-либо предложения о том, как мне добиться лучшей синхронизации между каналами / потоками? Я все еще хотел бы использовать звуковое устройство, поскольку оно хорошо работает при отображении (левого или правого канала) моих выходных каналов.

Спасибо всем заранее.

1 ответ

Решение

Очень сложно (скорее всего, невозможно) синхронизировать разные потоки. Вы должны использовать только один Stream (или же OutputStream) объект за один раз. Обработка 8 каналов в одном потоке не должна быть проблемой.

Вы можете использовать функцию play() с 8 каналами или создать пользовательскую функцию обратного вызова, которая обрабатывает ваши 8 каналов, и использовать ее в Stream или OutputStream.

ОБНОВИТЬ:

Невозможно использовать несколько устройств в потоке, см. Также выпуск 29 на Github. Вы можете попробовать использовать другой API хоста. У вас есть драйвер ASIO для вашей звуковой карты? С ASIO вы обычно получаете одно устройство с несколькими каналами. Если это не сработает, вы можете попробовать задать вопрос в списке рассылки PortAudio.

Входные данные должны быть двумерным массивом NumPy с одним столбцом на канал. Посмотрите на документацию callback параметр класса Stream.

Другие вопросы по тегам