0

我正在尝试使用silverlight 5中的音效和audiosink实时播放麦克风声音,但声音在这里被切碎是我使用的代码

protected override void OnSamples(long sampleTime, long sampleDuration, byte[] sampleData)
{
  try
  {
    SoundEffect effect = new SoundEffect(sampleData, 8000, AudioChannels.Mono);
    effect.Play();
   }
   catch
   { }
 }

有什么帮助或替代方案吗?

4

1 回答 1

0

我很确定这不是 SoundEffect 类适用的场景。要播放一致的音频流,您至少需要各种帧之间的某种缓冲和一致性我过去为使这种事情起作用所做的工作是短暂地缓冲从 AudioSink 传入的音频,然后将其提供给 MediaStreamSource,然后由 MediaStreamSource 播放它。MediaStreamSource 有很多很好的基本实现可以借用(奇怪的部分是正确地获取所有 WAV 标头),但是您仍然需要自己编写缓冲代码。最简单的方法是使用队列来保存每个提交的字节数组,然后让 MediaStreamSource 在其 GetSampleAsync() 方法中提取字节数组。

从这里开始:http: //dotnet.dzone.com/news/creating-sound-using

于 2011-12-04T15:03:45.517 回答