繁体   English   中英

如何在Android中多次播放多个音频文件?

[英]How do I play multiple audio files multiple times in android?

我有5个音频文件a,b,c,d,e

当用户单击播放按钮时,它应该一个接一个地播放音频文件。

 public class MainActivity extends AppCompatActivity { Button play,stop; MediaPlayer mp; MediaPlayer mp2; MediaPlayer mp3; MediaPlayer mp4; MediaPlayer mp5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); play = findViewById(R.id.play); stop = findViewById(R.id.stop); } public void Play(View view){ StopPlaying(); mp= MediaPlayer.create(MainActivity.this,R.raw.a); mp2= MediaPlayer.create(MainActivity.this,R.raw.b); mp3= MediaPlayer.create(MainActivity.this,R.raw.c); mp4= MediaPlayer.create(MainActivity.this,R.raw.d); mp5= MediaPlayer.create(MainActivity.this,R.raw.e); int i = 0; while (i<10){ i++; mp.start(); mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp2.start(); mp2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp3.start(); mp3.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp4.start(); mp4.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp5.start(); mp5.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { } }); } }); } }); } }); } }); } } private void StopPlaying(){ if (mp != null) { mp.stop(); mp.release(); mp = null; } if (mp2 != null) { mp2.stop(); mp2.release(); mp2 = null; } if (mp3 != null) { mp3.stop(); mp3.release(); mp3 = null; } if (mp4 != null) { mp4.stop(); mp4.release(); mp4 = null; } if (mp5 != null) { mp5.stop(); mp5.release(); mp5 = null; } } public void Stop(View viw){ mp.stop(); mp2.stop(); mp3.stop(); mp4.stop(); mp5.stop(); } } 
 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#afc3d7" xmlns:android="http://schemas.android.com/apk/res/android"> <EditText android:id="@+id/from" android:layout_width="wrap_content" android:layout_height="50dp" android:textStyle="bold" android:ems="10" android:inputType="number" /> <EditText android:id="@+id/to" android:layout_width="wrap_content" android:layout_height="50dp" android:textStyle="bold" android:ems="10" android:inputType="number" /> <EditText android:id="@+id/times" android:layout_width="wrap_content" android:layout_height="50dp" android:ems="10" android:textStyle="bold" android:inputType="number" /> <Button android:id="@+id/play" android:layout_width="175dp" android:layout_height="50dp" android:onClick="Play" android:text="Play" /> <Button android:id="@+id/stop" android:layout_width="175dp" android:onClick="Stop" android:layout_height="50dp" android:text="Stop" /> </LinearLayout> 

但是我想要的是应该播放10次

(播放e后,应该再次从脚趾开始)

像是从脚趾开始,然后又是从脚趾开始,然后又是.....重复此10次

这就像在音乐播放器中重复播放一首歌曲后,唯一的区别是我要按顺序重复多个音频文件。

我尝试过使用for循环和while循环,但是它们似乎都不起作用...

这是我的代码

使用以下格式的媒体播放器

Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();

这样,您就不必创建5个不同的媒体播放器。 当您的第一个音频文件结束时,然后在onCompleteListener ,只需更改媒体播放器的DataSource并重新启动即可

创建一个像这样的数组:

private final int[] resID = { R.raw.chimes, R.raw.chord, R.raw.ding,
R.raw.notify, R.raw.recycle, R.raw.ringin, R.raw.ringout,
R.raw.tada };  
int from,to,times,songPosition,timesPosition=0;

然后点击

    songPosition = from;

    play.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                            playSong(songPosition);

                }
            });  


     private void playSong(int position) {
    if (mediaPlayer != null) {
                    if (mediaPlayer.isPlaying()) {
                        mediaPlayer.stop();
                        mediaPlayer.reset();
                        mediaPlayer.release();
                    }
                }
                mediaPlayer = new MediaPlayer();
                mediaPlayer = MediaPlayer.create(getApplicationContext(), resID[position]);
                mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {

                if(timesPosition<times){
                     if(songsPosition<=to){
                          songsPosition = songsPosition + 1;
                          playSong(songsPosition)
                     }else{
                          songPosition = from;
                          timesPosition + timesPosition+1;
                          playSong(songsPosition)
                     }
              }
              }
            });
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM