我有一个存储音频标题的集合
songs = new ArrayList<>();
songs.add("song_1.ogg");
songs.add("song_2.ogg");
songs.add("song_3.ogg");
songs.add("song_4.ogg");
songs.add("song_5.ogg");
songs.add("song_6.ogg");
有一种方法可以根据传递的值播放音频。
private void playSong(int i) {
String mSong = songs.get(i);
try {
AssetFileDescriptor afd = this.getAssets().openFd("sounds/songs/" + mSong);
mp = new MediaPlayer();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.setLooping(false);
mp.prepare();
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
}
});
} catch (IOException ex) {
ex.printStackTrace();
}
}
有一个按钮,单击它您需要像这样播放音频:按下一次开始播放 song_1.ogg 集合中的音频,第二次按下第一个停止播放音频 song_2.ogg,等等。到音频 song_6.ogg。如果再次单击,则再次播放音频 song_1.ogg 等。
如何实施?简单说一下逻辑。然后我这样做了,如果我多次按下按钮,就会开始为我播放几个音频
柜台
private int counter = 0;
案例块
case R.id.btnMusic:
if (counter == 0) {
play(0);
} else if (counter == 1) {
mp.release();
play(1);
} else if (counter == 2) {
mp.release();
play(2);
} else if (counter == 3) {
mp.release();
play(3);
} else if (counter == 4) {
mp.release();
play(4);
} else if (counter == 5) {
mp.release();
play(5);
}
break;
方法本身
private void play(int i) {
counter = i;
String mSong = songs.get(counter);
try {
AssetFileDescriptor afd = this.getAssets().openFd("sounds/songs/" + mSong);
mp = new MediaPlayer();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.setLooping(false);
mp.prepare();
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
}
});
} catch (IOException ex) {
ex.printStackTrace();
}
}