播放 g711 a-law 流时声音断断续续
Choppy sound on playing g711 a-law stream
我在我的一个项目中使用 naudio 时遇到问题 - 很可能我只是忽略了一个小错误,但我没有发现它,所以我可以请求一些帮助。
我正在开展一个项目来接收(并进一步处理)我通过网络接收的音频流。该流使用 8kHz 和 8 位使用 G.711 a-law 编码,并以 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
好吧,网络连接已启动并快速填充缓冲区,并且在所需的延迟后开始播放,但只创建了一个 'choppy sound',但实际上应该只有静音...
我是否必须在某个阶段对流进行解码(尽管 BufferedWaveProvider 已使用正确的编码进行了初始化?还是我错过了其他内容...
如果您在音频到达时解码并将其作为 16 位音频放入 BufferedWaveProvider
,您将获得最佳效果。另外,您确定接收到的网络数据包中没有周围的元数据吗?如果是这样,则需要将其剥离,否则会产生噪音。
NAudio 演示项目包含此场景的示例,因此如果您需要进一步的帮助,可以将其用作参考。
我在我的一个项目中使用 naudio 时遇到问题 - 很可能我只是忽略了一个小错误,但我没有发现它,所以我可以请求一些帮助。
我正在开展一个项目来接收(并进一步处理)我通过网络接收的音频流。该流使用 8kHz 和 8 位使用 G.711 a-law 编码,并以 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
好吧,网络连接已启动并快速填充缓冲区,并且在所需的延迟后开始播放,但只创建了一个 'choppy sound',但实际上应该只有静音...
我是否必须在某个阶段对流进行解码(尽管 BufferedWaveProvider 已使用正确的编码进行了初始化?还是我错过了其他内容...
如果您在音频到达时解码并将其作为 16 位音频放入 BufferedWaveProvider
,您将获得最佳效果。另外,您确定接收到的网络数据包中没有周围的元数据吗?如果是这样,则需要将其剥离,否则会产生噪音。
NAudio 演示项目包含此场景的示例,因此如果您需要进一步的帮助,可以将其用作参考。