У меня проблема с использованием 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 инициализируется с правильным кодом? Или я пропускаю что-то еще ...