gpt4 book ai didi

java - 同步发出声音

转载 作者:行者123 更新时间:2023-12-03 02:08:35 26 4
gpt4 key购买 nike

在我的应用程序中,我对图像进行动画处理,每次到达某个点时,我都想使用MediaPlayer播放声音。声音由sound=MediaPlayer.create创建,并从sound.start()开始。我的问题是声音并不总是播放:通常正常播放时,有时会丢失或缩短声音。使用Android 4.4而不是4.3会出现此问题。

首先,我的声音是从UI线程发出的。然后,我尝试在第二个线程中对其进行管理,但没有任何改进。我能做什么?

这是在我专用线程中编写的代码:

private class EmitSound extends Thread implements OnCompletionListener,OnInfoListener,OnErrorListener{
private MediaPlayer sound;
private boolean killProcess=false;
private Boolean emitSound=false;

public EmitSound (){
sound=MediaPlayer.create(myActivity,R.raw.sound);
sound.setOnCompletionListener(this);
sound.setOnInfoListener(this);
sound.setOnErrorListener(this);
}

public void run(){
while(!killProcess){
synchronized(emitSound){
if(emitSound){
Logger.getLogger("MyApp").log(Level.Info,"Sound started");

sound.start();

emitSound=false;
}
}
}
}

public void EmitSound(){
synchronized(emitSound){
emitSound=true;
Logger.getLogger("MyApp").log(Level.Info,"Demand");
}
}

public void KillProcess(){
sound.release();

killProcess=true;
}

@Override
public void onCompletion(MediaPlayer mp) {
Logger.getLogger("MyApp").log(Level.INFO,"Sound finished");
}

@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {

Logger.getLogger("MyApp").log(Level.INFO,"Info "+Integer.toString(what)+" / "+Integer.toString(extra));

return false;
}

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {

Logger.getLogger("MyApp").log(Level.INFO,"Error "+Integer.toString(what)+" / "+Integer.toString(extra));

return false;
}
}

当我想发出声音时,我从负责绘制到 myProcess.EmitSound()Canvas的线程中调用 SurfaceView

我在线程中添加了 OnCompletionListenerOnInfoListenerOnErrorListener以及日志,用于发出需求和声音的开始,一切似乎还不错:发出了需求,声音开始了,声音完成了,循环重新开始。我从来没有接到过我的 onInfoonError函数的电话,但声音有时仍然没有发出。看来 MediaPlayer确实是 buggy ...

最佳答案

使用SounPool而不是MediaPlayer解决了我的问题!

关于java - 同步发出声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26086326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com