2013-04-11 60 views
0

這可能很簡單,但我有一個WPF應用程序,它有一個按鈕,一個文本區域和另一個按鈕。如果我點擊按鈕1,那麼程序會創建一個名爲player的WaveOutEvent並播放音頻文件。但是,一旦開始播放,我什麼都不能做,甚至關閉表單(並且無法輸入文本區域)。是否有可能在後臺播放文件?任何想法如何我可以解決這個問題?對不起,我是C#的新手。這裏有一些代碼:程序與NAudio凍結

private void button1_Click_1(object sender, RoutedEventArgs e) 
    { 
     Program p = new Program(textBox1.Text); 
     p.Tempo = float.Parse(textBox2.Text); 
     label2.Content = p.totalTime; 
    } 
    //assuming this has been called after initialization 
    public void playAudio(string filename) 
    { 
     WaveStream rdr; 

     if (filename.EndsWith(".aiff")) 
     { 
      rdr = new AiffFileReader(filename); 
     } 
     else if (filename.EndsWith(".mp3")) 
     { 
      rdr = new Mp3FileReader(filename); 
     } 
     else if (filename.EndsWith(".wav")) 
     { 
      rdr = new WaveFileReader(filename); 
     } 
     else 
     { 
      //System.Windows.MessageBox.Show("File not supported."); 
      rdr = new Mp3FileReader(filename); 
     } 

     volumeStream = new WaveChannel32(rdr); 
     player = new WaveOutEvent(); 
     player.Init(volumeStream); 
     format = volumeStream.WaveFormat; 
     totalTime = volumeStream.TotalTime; 
     inputProvider = new AdvancedBufferedWaveProvider(format); 
     player.Init(inputProvider); 
     player.Play(); //freezes application after starting to play 
     //processAudio(); 
    } 

感謝您的幫助!

+0

AdvancedBufferedWaveProvider是做什麼的?你有沒有試過在Visual Studio中打破目前發生的事情? – 2013-04-12 07:13:17

回答

0

嘗試使用Background Worker播放音頻。

+0

WaveOutEvent已經創建了一個後臺線程來播放音頻,所以這將不起作用。 – 2013-04-12 07:13:41

+0

@MarkHeath感謝您的意見,我不知道。他的問題聽起來很像UI線程阻塞問題。 – 2013-04-12 07:18:07