如何定期播放声音?

时间:2014-02-05 16:44:11

标签: java audio codenameone

以下是一些成功调用约两秒的代码。声音文件大约100毫秒。它只播放一次,但我希望它继续播放:后续调用会跳过play调用而不会抛出异常,但也没有声音。

有没有一种有效的方法让它发挥作用?

        InputStream knockAudio = fetchResourceFile().getData("mysound.wav");
        try {
            final Media m = MediaManager.createMedia(knockAudio, "audio/wav");

            onClickTask = new TimerTask() {
                @Override
                public void run() {
                    m.cleanup(); // Here's something I tried, but had no effect
                    m.prepare(); // I also tried this without cleanup
                    m.play(); // But to start with just had this (no cleanup or prepare)
                }
            };

        } catch (IOException ex) {
            Log.e(ex);
        }

3 个答案:

答案 0 :(得分:1)

Codename One上的声音在第一次播放后自动清除/删除。你必须重新创建它并不像它听起来那么昂贵。

其原因与媒体播放中最常见的错误有关,即缺乏正确的清理,因此我们隐式这样做是为了避免此类内存泄漏。由于您正在获取的输入流是在RAM中创建的,因此开销应该相对较低。

答案 1 :(得分:0)

您还必须使用Timer

安排任务
        onClickTask = new TimerTask() {
            @Override
            public void run() {
                m.play(); // But to start with just had this (no cleanup or prepare)
            }
        };

        Timer time = new Timer();
        time.schedule(onClickTask, 0, 2000);

答案 2 :(得分:0)

感谢@Shai Almog提供的信息。这导致我实现它:

像这样初始化:

InputStream myAudio = fetchResourceFile().getData("mysound.wav");

重复播放我这样做:

myAudio.reset(); // The input stream needs to go back to the beginning
myClip = MediaManager.createMedia(myAudio, "audio/wav");
myClip.play();