2014-11-02 69 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

相關問題