Как я могу воспроизвести несколько аудио файлов несколько раз в Android? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть 5 аудиофайлов a, b, c, d, e

Когда пользователь нажимает кнопку воспроизведения, он должен воспроизводить аудиофайлы от a до 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, но ни один из них, похоже, не работает ...

Вот мой код

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

создайте массив, подобный этому:

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)
                     }
              }
              }
            });
    }
0 голосов
/ 05 декабря 2018

Используйте медиаплеер в следующем формате

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

Для этого вам не нужно создавать 5 разных медиаплееров.Когда ваш первый аудиофайл заканчивается, затем в onCompleteListener просто измените источник данных медиаплеера и запустите его снова

...