0

我使用soundeffect從字節數組播放聲音,所有的東西都會好起來的,但是我不能停止播放聲音,因爲沒有方法在Soundeffect中調用stop(),我怎麼能阻止它呢?wp8 Soundeffect不能停止

代碼:

private void playFile(byte[] file) 
    { 
     try 
     { 

      if (file == null || file.Length == 0) return; 


      SoundEffect se = new SoundEffect(file, microphone.SampleRate, AudioChannels.Mono); 
      SoundEffect.MasterVolume = 0.7f; 
      if (stop != 1) 
      { 
       FrameworkDispatcher.Update(); 
       se.Play(); 
      } 
      else 
      { 
       //Here should stop, how ! 
      } 
     } 
     catch (Exception ee) 
     { 
      MessageBox.Show(ee.Message); 
     } 
    } 
+0

從你的代碼我不知道你試圖停止在別的什麼,因爲沒有什麼是真正開始(因爲戲劇是在相同的條件)如果 –

+0

沒有它的工作,所有的事情都會好起來的。但我不知道如何阻止它。 –

+1

我的問題是你在那裏停止了什麼,因爲在你發佈的代碼中你有「SoundEffect se」作爲局部變量,所以下一次playFile被調用時它只會創建一個新的,你將停止一個新的SoundEffect而不是原來的 –

回答

0

您是否嘗試過你的SoundEffect調用對象的.Dispose()?按照documentation

當SoundEffect中對象被銷燬,以前由SoundEffect中創建的所有SoundEffectInstance 對象將停止播放和 變得無效。

此外,Microsoft recommends改爲使用MediaElement,除非您使用XNA Game Studio 4.0進行開發。所以,如果這適用於你,你可能要考慮使用MediaElement其中確實Play, Pause, and Stop functions

+0

我使用它,聲音是繼續沒有任何改變! –

0

嘗試使用SoundEffectInstance

Sound effect instance

下面是聲音的解決方案的鏈接

Sound Effect Instance

更超過SoundEffectInstance實現IDisposeable所以它有一個dispose()方法以及stop()效應。

+0

沒有工作..! –

0

創建SoundEffectInstance變量如下圖所示

SoundEffectInstance soundEffectInstance; 

然後加載該文件後,即可製作soundEffect的實例..

soundEffectInstance = se.CreateInstance(); 

後,用下面這個soundEffectInstanceStopPlayPause你想要什麼特別的範圍。

soundEffectInstance.Play(); 

注意SoundEffect用於消防和忘記類型實例,如果你想控制SoundEffect的任何特定情況下,你將需要使用SoundEffectInstance

我同意Benoit Catherinet。如果您試圖在某些事件中停止特定聲音,那麼您必須將停止代碼放入該事件方法中,並且您的SoundEffect實例必須是全局的而不是本地的。

如果你能解釋你想要達到的目標,我們可以更好地幫助你。