2014-11-02 86 views
1

我是windows phone sdk中的新手。 我找不到在Windows Phone应用程序中从生成的缓冲区播放声音的示例。 帮助请帮助。在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(); 

但它的崩溃,错误 “System.InvalidOperationException”类型的第一次机会异常出现在Microsoft.Xna.Framework.ni.dll 类型的异常“ System.InvalidOperationException'发生在Microsoft.Xna.Framework.ni.dll中,但未在用户代码中处理

+0

http://msdn.microsoft.com/en-us/library/bb195053.aspx – phnmnn 2014-11-02 10:13:53

+0

需要使用SoundEffect类。但我需要启动示例 – phnmnn 2014-11-02 10:14:32

回答

0

您需要致电FrameworkDispatcher.Update

(见的例外:。 FrameworkDispatcher.Update没有被调用定期FrameworkDispatcher.Update调用是必要的消防和忘记的声音效果和框架事件才能正常工作,详见http://go.microsoft.com/fwlink/?LinkId=193853

建立一个计时器在构造函数:

 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(); 
    } 
+0

谢谢。现在我有另一个问题。如果我尝试播放18000hz的高频音调(440 - > 18000),则播放低频,我听到他们的声音。什么可能是一个问题? simpleRate 44100。 – phnmnn 2014-11-04 09:46:00

相关问题