我有多个声音,我想加载
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);
等等。
我在点击监听器中有声音启动
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mp.start();
}};
它必须是最终的mp.start();不会在听众中看到有没有办法在不同的声音之间切换,因为mediaplayer会使应用程序崩溃如果我不止一次使用这个
如果可能的话,是否可以使用设置标签/获取标签进行切换?
请帮忙!
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
}
}
}
替换包和类名,以及推断多个MediaPlayer的想法应该是微不足道的。除非声音可以同时播放,否则在任何给定的时间你都可能只需要一个。此外,完成后不要忘记调用release()。
如果声音很简短,您可能还需要考虑使用SoundPool。
我不明白你为什么要这样做,你能发布更多的代码吗?但如果你需要从你的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;
}
}