我想加载多个声音
final MediaPlayer mp = MediaPlayer.create(this, R.raw.testsnd);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.testsnd2);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.testsnd3);
等。
我在clicklisteners中有声音启动
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mp.start();
}};
必须是最终的mp.start();将不会在听众中看到 有没有办法在不同的声音之间切换,因为媒体播放器会使应用程序崩溃 如果我不止一次使用
如果可能,可以设置tag / get标签来进行切换吗?
请帮忙!
答案 0 :(得分:1)
MediaPlayer有一台我相信你忽略的状态机。静态创建方法是一次性交易的快捷方式。如果您希望多次使用MediaPlayer,请执行以下操作:
final MediaPlayer mp1 = new MediaPlayer();
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick() {
try {
mp1.reset();
mp1.setDataSource(YourClass.this,
Uri.parse("android.resource://com.your.package/" + R.raw.testsnd);
mp1.prepare();
mp1.start();
}
catch (Exception ex) {
// handle error
}
}
}
替换您的包和类名称,以及推断多个MediaPlayers的想法应该是微不足道的。除非可以同时播放声音,否则您在任何给定时间只需要一个。另外,完成后不要忘记调用release()。
如果声音很简短,您可能还需要考虑使用SoundPool。
答案 1 :(得分:0)
我不明白为什么你这样做,你能发布更多的代码吗?但是如果您需要从MediaPlayer实例播放三种声音,可以试试这个:
private final MediaPlayer mpSound1;
private final MediaPlayer mpSound2;
private final MediaPlayer mpSound3;
private void playSound1(){
try{
if(mpSound1==null)
mpSound1 = MediaPlayer.create(this, R.raw.testsnd);
mpSound1.start();
}catch(Exception ex){
mpSound1 = null;
}
}
private void playSound2(){
try{
if(mpSound2==null)
mpSound2 = MediaPlayer.create(this, R.raw.testsnd2);
mpSound2.start();
}catch(Exception ex){
mpSound2 = null;
}
}
private void playSound3(){
try{
if(mpSound3==null)
mpSound3 = MediaPlayer.create(this, R.raw.testsnd3);
mpSound3.start();
}catch(Exception ex){
mpSound3 = null;
}
}