Прерывистый звук при воспроизведении g711 a-law stream - PullRequest
0 голосов
/ 04 мая 2018

У меня проблема с использованием naudio для моего проекта - скорее всего, я просто пропустил крошечную ошибку, но я ее не улавливаю, поэтому могу попросить помощи.

Я работаю над проектом для получения (и дальнейшей работы с) аудиопотока, который я получаю по сети. Поток кодируется по закону G.711 с использованием 8 кГц и 8 бит и передается крошечными частями по 20 мс (или 50 пакетов в секунду).

Следующий код получает поток через UDP (в основном, когда принимается пакет UDP, он читается из сокета и добавляется в naudio BufferedWaveProvider:

Private Provider As New NAudio.Wave.BufferedWaveProvider(NAudio.Wave.WaveFormat.CreateALawFormat(8000, 1))
Private Sub FT636VOIP_U_Auslesen(ByVal ar As IAsyncResult)
    sample = FT636VOIPUSocket.EndReceive(ar, New Net.IPEndPoint("10.48.11.43", 60001))
    Provider.AddSamples(sample, 0, sample.Count)
    FT636VOIPUSocket.BeginReceive(New AsyncCallback(AddressOf FT636VOIP_U_Auslesen), FT636VOIPUSocket)
End Sub

Будучи запущенным в другом потоке (чтобы не блокировать основное приложение), WaveOutEvent связывается с BufferedWaveProvider для воспроизведения.

Private Sub Audio()
    Dim wo As New NAudio.Wave.WaveOutEvent
    wo.DesiredLatency = 1000
    wo.Init(Provider)
    wo.Play()
    Do While wo.PlaybackState = NAudio.Wave.PlaybackState.Playing
        Threading.Thread.Sleep(500)
    Loop
End Sub

Хорошо, сетевое соединение установлено и быстро заполняет буфер, и воспроизведение начинается после желаемой задержки, но создает только «прерывистый звук», хотя, по сути, должна быть только тишина ...

Нужно ли декодировать поток на каком-то этапе (хотя BufferedWaveProvider инициализируется с правильным кодом? Или я пропускаю что-то еще ...

1 Ответ

0 голосов
/ 05 мая 2018

Вы получите наилучшие результаты, если декодируете звук по мере его поступления и помещаете его в BufferedWaveProvider как 16-битный звук. Кроме того, вы уверены, что в принимаемых сетевых пакетах нет метаданных? Если это так, то это нужно удалить, иначе это приведет к шуму.

Демонстрационный проект NAudio содержит пример этого точного сценария, поэтому вы можете использовать его в качестве справочного материала, если вам нужна дополнительная помощь.

...