在Windows Phone应用程序中从生成的缓冲区播放声音

我新的Windows手机SDK。 我找不到在Windows Phone应用程序中从生成的缓冲区播放声音的示例。 请帮助。

我发现这个例子:

byte] buffer = new byte[44100 * 2 * 5]; float t = 0; for (int i = 0; i < 44100 * 2 * 5; i += 2) { short val = (short)(Math.Sin(t * 2 * Math.PI * 440) * short.MaxValue); buffer[i] = (byte)(val & 0xFF); buffer[i + 1] = (byte)(val >> 8); t += 1 / 44100.0f; } sf = new SoundEffect(buffer, 44100, AudioChannels.Mono); // Play. sf.Play(); 

但它与错误崩溃在Microsoft.Xna.Framework.ni.dll中发生types“System.InvalidOperationException”的第一次机会exceptionMicrosoft.Xna.Framework.ni.dll中发生types“System.InvalidOperationException”的exception,但不是在用户代码中处理

Solutions Collecting From Web of "在Windows Phone应用程序中从生成的缓冲区播放声音"

您需要调用FrameworkDispatcher.Update

(请参阅异常:FrameworkDispatcher.Update尚未被调用.FrameworkDispatcher.Update调用是必需的,并且忘记声音效果和框架事件才能正常工作。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=193853细节。&#xFF09;

在您的构造函数中设置一个计时器:

  var dt = new DispatcherTimer(); dt.Interval = TimeSpan.FromMilliseconds(33); dt.Tick += new EventHandler(Tick); dt.Start(); 

和一个Tick事件处理程序:

  void Tick(object sender, EventArgs e) { try { FrameworkDispatcher.Update(); } catch (Exception ex) { if (Debugger.IsAttached) { Debugger.Break(); } } } 

应该在你的应用中使用例如播放按钮。 我还添加了一行代码: var soundInstance = sf.CreateInstance();

  private void appBarPlayButton_Click(object sender, EventArgs e) { byte[] buffer = new byte[44100 * 2 * 5]; float t = 0; for (int i = 0; i < 44100 * 2 * 5; i += 2) { short val = (short)(Math.Sin(t * 2 * Math.PI * 440) * short.MaxValue); buffer[i] = (byte)(val & 0xFF); buffer[i + 1] = (byte)(val >> 8); t += 1 / 44100.0f; } var sf = new SoundEffect(buffer, 44100, AudioChannels.Mono); var soundInstance = sf.CreateInstance(); // Play. sf.Play(); }