VOIP SIP - 帮助从PCM编码到U-law

时间:2012-05-04 10:51:05

标签: windows-phone-7 sip voip downsampling

我正在使用VOIP Windows Phone项目(Windows Phone的软电话应用程序)。目前,我(Windows手机软电话)可以接收和听到另一部软电话的声音,只有一种方式。我可以将我的语音(RTP数据包)发送到另一部软电话,但它包含完整的噪音。我按照http://www.codeproject.com/Articles/14237/Using-the-G711-standard?msg=2573223#xx2573223xx对U-law和PCM之间的RTP数据包进行编码和解码。解码功能对我很好,但编码没有。

我解码了RTP数据包,并且采样率为8000Khz(它是U-law格式的采样率)。这是我的代码:

SoundEffect soundEffect = new SoundEffect(buffer, 8000, AudioChannels.Mono);
SoundEffectInstance soundInstance = soundEffect.CreateInstance();
soundInstance.Play();

关于编码,我使用Windows Phone的麦克风录制语音=>编码到U-Law格式=>放入RTP数据包=>发送。但这些数据包包含完整的噪音,而另一部软电话(目的地呼叫)仅接收噪音和噪音。

麦克风录制数据的格式为:PCM 16位 - 16KHz。你有什么解决方案可以帮我解决吗?

关心并非常感谢你。

1 个答案:

答案 0 :(得分:0)

@Rowland: 我使用WP的麦克风来捕获数据

public Microphone microphone = Microphone.Default;     
private byte[] buffer; 
Queue<byte[]> recordedVoice = new Queue<byte[]>(); 

每次都会获得320byte

microphone.GetData(buffer);    

我把它保存到队列

recordedVoice.Enqueue(buffer);

然后我将recordVoice的每个项目编码为U-Law格式(从http://www.codeproject.com/Articles/14237/Using-the-G711-standard?msg=2573223#xx2573223xx引用的编码函数):

byte[] encoded = G711MuLaw.G711MuLawEncode(recordedVoice.Dequeue());

但它没有正确编码。

@sipwiz:我瘦了NAudio不支持WP7,因为它是一个C#项目,而不是Silverlight。

@Rowland&amp; sipwiz:收到你的回复后我很高兴,非常感谢你。