2016-02-09 62 views
1

我試圖播放背景音,只能在一個場景中播放。當這個場景被破壞時,聲音應該淡出然後停止。然後當場景重新創建時,聲音應該再次開始播放。Corona:重新創建場景後音頻不會再次播放

這裏就是我想:

local backgroundMusic 
local backgroundMusicChannel 

local function stopSound(event) 
    audio.stop(event.channel) 
    audio.dispose(event.handle) 
    backgroundMusic = nil 
end 

function scene:create(event) 
    backgroundMusic = audio.loadSound("music/intro.mp3") 
    backgroundMusicChannel = audio.play(backgroundMusic, {loops = -1, fadein = 3000, onComplete = stopSound}) 
end 

function scene:destroy(event) 
    audio.fadeOut({channel = backgroundMusicChannel, time=2000}) 
end 

最初創建時的情景播放聲音,並正確地淡出,但再次被創建時的情景不會再次啓動。

當我改變摧毀功能:

function scene:destroy(event) 
    audio.fadeOut({channel = backgroundMusicChannel, time=2000}) 
    audio.stop(backgroundMusicChannel) 
end 

聲音不淡出,因爲它會立即停止,但它並重新正確啓動創建場景下一次。

我也嘗試過使用audio.stopWithDelay,它可以正確淡出,但是類似地,當場景再次創建時不會再次開始播放。

如果有人對這裏發生的事情有任何見解,請讓我知道!

回答

0

難道問題是你不能(重新)播放聲音,如果它還沒有停止呢? 您在場景結束時也不會丟棄音頻。 裏面創建,如果它已經存在,停止以前的音頻。

您最好創建一次聲音,並在需要時重新使用聲音。 如果使用loadStream,則必須在播放後使用audio.rewind()。

關於這個文檔還指出,你應該使用loadStream: https://docs.coronalabs.com/guide/media/audioSystem/index.html

+0

感謝您的答覆,但我停止音頻和它處置。這就是「stopSound」功能發生的事情 - 它在音頻通道的onComplete中被調用。我已驗證此函數正在被調用。我也曾嘗試使用loadStream,結果沒有任何不同。 – Sarah

+0

函數在新場景加載之前還是之後調用? – EinsteinK

+0

之後,因爲它在fadeOut的末尾。 – Sarah