2013-01-15 89 views
11

我需要一種在聲音仍在播放時啓動/停止循環的方式。我發現一起播放多種聲音的最佳方式是使用XNA。所以我從包含音頻片段的SoundEffect對象開始創建了一個SoundEffectInstance。 現在的問題是,我有一個按鈕,應該將此剪輯的狀態從「循環」更改爲「非循環」,反之亦然。當聲音仍在播放時,在Windows Phone 8上使用XNA進行音頻循環播放

問題出在這裏: 它引發一個異常,說明必須在第一次播放之前設置循環。 所以我認爲,從「非循環」切換到「循環」時,我可以等待聲音停止,然後重新創建SoundEngineInstance,設置IsLooped = true並使其重新開始。 這一個工程,但有一些延遲,這會讓你失去你的時間,所以它是無用的。

我在尋找的是一種在播放聲音時設置或取消設置循環的方式,無需任何延遲。

編輯:

我試圖使用兩個SoundEngineInstance,一個環和一個不和使用該體積在它們之間簡單地切換。 問題在於第一次播放後非循環播放停止,所以如果我循環播放兩次然後我將它放到非循環播放狀態,就沒有聲音播放,因爲非循環播放片段已經結束了!

對此提出建議?

+0

既然你想讓聲音循環,你會說它更像是一首歌,而不是'SoundEffect'嗎? – ChiefTwoPencils

+0

我有一些簡短的樣本,我希望它們成圈。我正在討論'SoundEffect',因爲這是我用於播放的XNA類。 – StepTNT

回答

2

我有同樣的proplem,我用兩個相同的音頻剪輯來解決它,一個循環和一個沒有它。我在兩者之間切換。這可能不是最好的解決方案,但它對我有用。

+0

這是一個不錯的主意,但我無法使用它! 我需要循環來啓動/停止每次我想要的。這意味着如果剪輯正在播放一個循環,並且我決定停止循環,剪輯必須結束,而不是停止。用你的解決方案,我需要一些東西來看看我在環狀剪輯中的位置,停止環狀剪輯,並在另一個停止時啓動另一個。 (對不起,不太清楚!) – StepTNT

0

http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.31).aspx:播放聲音:

  1. 使用如何所示的方法聲明SoundEffect中。

  2. 聲明一個SoundEffectInstance,並將其設置爲SoundEffect.CreateInstance的返回值。

  3. 將SoundEffectInstance.IsLooped設置爲true。

  4. 調用SoundEffectInstance.Play播放循環聲音。

當你不想讓它循環時,你可以設置IsLooped爲false,但只能播放到最後。

+0

問題不在於循環播放聲音,而是在播放時改變其狀態。這意味着在調用'SoundClip.Stop()'之前或在剪輯結束之前使其循環/不循環。 – StepTNT