更改媒体播放器的音频源(Android Studio)
Changing audio source for media player (Android Studio)
我正在尝试创建一个按钮,该按钮可在单击时从声音列表中随机播放声音。我的代码将第一个声音随机化,但随后的点击不会触发任何声音。声音播放后是否必须释放编解码器?
meow.setOnClickListener((view) ->{
Random random = new Random();
int r = random.nextInt(6-1) + 1;
Toast.makeText(MainActivity.this,Integer.valueOf(r).toString(),Toast.LENGTH_SHORT).show();
try{
if(r==1)
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat1);
else if (r==2)
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat2);
else if (r==3)
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat3);
else if (r==4)
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat4);
else
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat5);
mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());
mp.prepare();
mp.start();
}catch(Exception e){e.printStackTrace();}
});
你应该检查播放器的状态,pause/stop 如果播放器处于活动状态并在将下一首歌曲加载到
之前调用 mp.release();
第二次和更多点击后,您可能会看到 e.printStackTrace();
生成的一些 Exception
日志,检查一下,会告诉您哪里出了问题
还可以使用 create 方法,它将加载您的 R.raw
文件和 return new MediaPlayer
的实例.在执行该操作之前释放先前的播放器实例(如果存在)
if (mp!=null) mp.release(); // maybe needs also a check if playing and stop before?
mp = MediaPlayer.create(view.getContext(), R.raw.meowcat100);
mp.start(); // dont have to call prepare in this case
在设置新数据源之前调用mp.reset()
我正在尝试创建一个按钮,该按钮可在单击时从声音列表中随机播放声音。我的代码将第一个声音随机化,但随后的点击不会触发任何声音。声音播放后是否必须释放编解码器?
meow.setOnClickListener((view) ->{
Random random = new Random();
int r = random.nextInt(6-1) + 1;
Toast.makeText(MainActivity.this,Integer.valueOf(r).toString(),Toast.LENGTH_SHORT).show();
try{
if(r==1)
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat1);
else if (r==2)
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat2);
else if (r==3)
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat3);
else if (r==4)
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat4);
else
fileDescriptor = MainActivity.this.getResources().openRawResourceFd(R.raw.meowcat5);
mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());
mp.prepare();
mp.start();
}catch(Exception e){e.printStackTrace();}
});
你应该检查播放器的状态,pause/stop 如果播放器处于活动状态并在将下一首歌曲加载到
之前调用mp.release();
第二次和更多点击后,您可能会看到 e.printStackTrace();
生成的一些 Exception
日志,检查一下,会告诉您哪里出了问题
还可以使用 create 方法,它将加载您的 R.raw
文件和 return new MediaPlayer
的实例.在执行该操作之前释放先前的播放器实例(如果存在)
if (mp!=null) mp.release(); // maybe needs also a check if playing and stop before?
mp = MediaPlayer.create(view.getContext(), R.raw.meowcat100);
mp.start(); // dont have to call prepare in this case
在设置新数据源之前调用mp.reset()