Непрерывное воспроизведение звука с помощью Sounddevice - PullRequest
0 голосов
/ 06 февраля 2019

Я пишу программу для потоковой передачи аудио по сети, поэтому у меня есть поток для записи данных и один для отправки.При тестировании звука есть заметные пробелы.Я полагаю, что это связано с функцией sounddevice.play(), пример ниже имеет ту же проблему.

import sounddevice as sd

len = 5
fs = 44100
sd.default.device = [2,1]

myrec=sd.rec(int(fs*len), samplerate=fs, channels=2, blocking=True) #fill an array with some sound
while True:
    sd.play(myrec, blocking=True)
    #loop plays 5 second audio clip with slight gaps

Пробелы совпадают с продолжительностью воспроизведения, поэтому, похоже, это вызвано задержкой в ​​функции воспроизведения.,В непрерывном аудио это становится очень заметным и раздражающим.То же самое происходит и в документации прохождения аудио здесь .

Есть ли что-нибудь, чтобы воспроизведение продолжалось?

1 Ответ

0 голосов
/ 07 февраля 2019

Функция sd.play() не предназначена для многократного использования в быстрой последовательности.Внутри он каждый раз создает sd.OutputStream, воспроизводит аудиоданные и снова закрывает поток.Из-за открытия и закрытия потока будут возникать пробелы.Это ожидается.

Для непрерывного воспроизведения вы должны использовать функцию sd.OutputStream.write () или, что еще лучше, sd.OutputStream с пользовательской функцией обратного вызова (как показано в некоторыхпримеров программ).

То же самое происходит и в примере прохождения аудио документации здесь .

Это должно иметь другую причину.Это должно работать, и это прекрасно работает для меня.Можете ли вы описать проблему более подробно?Есть ли сообщения, напечатанные на терминале?

...