LIBGDX:我如何知道声音何时播放完毕?

18

Sound API似乎缺少一种指示声音播放完成的函数。是否有其他方法可以找出声音是否完成?

3个回答

8
据我所知,如果没有向libgdx提交补丁,那么基于OpenAL和Android的底层声音后端甚至不会在内部跟踪信息,尽管Music API根据文档具有isPlaying()函数和getPosition()函数。

2
这也在最新的libGDX聚会上提出了(确认目前没有API):http://www.youtube.com/watch?v=Ppr7QPeMlMo。我相信视频中提到的解决方法是知道您的音频运行时间... - P.T.
1
我决定两件事,使声音在重叠播放时更易接受,并保存上次播放时间和播放长度。尽管如此,我仍然喜欢 libgdx。 - leech
@P.T. 这不是能够“告诉何时声音结束”的解决方法,而是相反的。如果您根本没有这个功能,那么这就是您唯一能做的事情,而这正是此处的情况。 - Hasen

0

只需设置这个

sound.setLooping(false);

这样它就不会一遍又一遍地运行。

要检查声音是否正在播放,可以这样做。

创建一个布尔变量。

boolean soundplaying;

在渲染方法中执行此操作。
if(sound.isPlaying()){
soundplaying =true
}

并记录日志

gdx.app.log("","sound"+soundplaying);

我认为这个答案是正确的。只需使用Music类代替Sound类,它就拥有了你想要的一切 - 使用isPlaying()setOnCompletionListener(..)OnCompletionListener即可。 - monnef

-1

您可以通过存储例如play()loop()返回的声音实例ID来跟踪此操作。示例代码:

private Sound sound;
private Long soundId;

...

public void startSound()  {
    if (soundId != null) {
        return;
    }
    soundId = sound.loop();   // or sound.play()
}

public void stopSound() {
    sound.stop(soundId);
    soundId = null;
}

如果你不想在客户端代码中调用 stopSound(),你可以直接从 startSound() 中调用它而不是使用 return,确保任何先前的声音都被停止。

这个程序如何检测声音是否播放完毕?比如我播放一个持续2秒钟的狗叫声,它会播放2秒钟然后停止 - 你的代码是如何指示狗已经叫完了的? - Hasen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接