播放g711 a-law流时声音不稳定

时间:2018-05-04 17:01:31

标签: naudio

我有一个问题,使用naudio作为我的一个项目 - 很可能我只是忽略了一个小错误,但我没有抓住它,所以我可以请求一些帮助。

我正在开发一个项目来接收(并进一步使用)我通过网络接收的音频流。该流采用G.711 a-law编码,使用8kHz和8bit,并以20ms(或每秒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 :(得分:0)

如果在音频到达时对音频进行解码并将其作为16位音频放入BufferedWaveProvider,您将获得最佳效果。此外,您确定收到的网络数据包中没有周围的元数据吗?如果是这样,需要将其剥离或导致噪音。

NAudio演示项目包含此确切场景的示例,因此如果您需要进一步的帮助,可以将其用作参考。