以下是一些成功调用约两秒的代码。声音文件大约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);
}
答案 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();