2016-02-09 38 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