8

このようなオーディオファイルのリストがあります。

int music_numbers[] = { R.raw.one, R.raw.two, R.raw.three, R.raw.four,
            R.raw.five, R.raw.six, R.raw.seven, R.raw.eight, R.raw.nine };

これを 1 つずつ再生する必要があります。この play_numbers メソッドに 100 を送信するときは、数字で再生するつもりです。

私はこれをしました-しかし、私はこれを次々に行うことができません..

private void _play_numbers(final String i) {
    // TODO Auto-generated method stub

    mPlayer = MediaPlayer.create(PlayFileActivity.this, R.raw.payment);
    mPlayer.start();

    mPlayer.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mPlayer.stop();
            myDigit = i.charAt(1) + "";

            _function_play_file(Integer.parseInt(myDigit));

        }

    });

}

in _function_play_file - 私はこれを持っています

void _function_play_file(int files) {

        switch (files) {
        case 0:
            mPlayer = MediaPlayer.create(this, music_numbers[0]);
            mPlayer.start();
        case 1:
            mPlayer = MediaPlayer.create(this, music_numbers[1]);
            mPlayer.start();
        case 2:
            mPlayer = MediaPlayer.create(this, music_numbers[2]);
            mPlayer.start();
        case 3:
            mPlayer = MediaPlayer.create(this, music_numbers[3]);
            mPlayer.start();
        case 4:
            mPlayer = MediaPlayer.create(this, music_numbers[4]);
            mPlayer.start();
        case 5:
            mPlayer = MediaPlayer.create(this, music_numbers[5]);
            mPlayer.start();
        case 6:
            mPlayer = MediaPlayer.create(this, music_numbers[6]);
            mPlayer.start();
        case 7:
            mPlayer = MediaPlayer.create(this, music_numbers[7]);
            mPlayer.start();
        case 8:
            mPlayer = MediaPlayer.create(this, music_numbers[8]);
            mPlayer.start();
        case 9:
            mPlayer = MediaPlayer.create(this, music_numbers[9]);
            mPlayer.start();
        case 10:
            mPlayer = MediaPlayer.create(this, music_numbers[10]);
            mPlayer.start();

        }
    }
4

7 に答える 7

6

それぞれに onCompletionListener を設定し、完了時に次のものを開始する必要があります。

mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
{
    @Override
    public void onCompletion(MediaPlayer mp) 
    {
         // Code to start the next audio in the sequence
    }
});

これを実現する最善の方法は、onCompletion を処理し、再生する次のファイルを受け取る OnCompletionListener を実装するクラスを作成することです。このようにして、コードでうまくインスタンス化できます。もちろん、休憩を忘れないでください。上記の場合。

于 2012-05-28T08:44:59.017 に答える
5

再生する番号を保持するためにキューを使用します。

private void _play_numbers(final String i) {
    // e.g '100': put '1', '0', '0' in a Queue after converting to digits
    Queue queue = new LinkedList();
    //Use the add method to add items.

    myDigit = // remove next digit from queue..

    _function_play_file(myDigit);
}

void _function_play_file(int files) {
     switch(files) {
       case 0:
        mPlayer = MediaPlayer.create(PlayFileActivity.this, R.raw.payment);
        mPlayer.setOnCompletionListener(completeListener );
        mPlayer.start();
        break;
 .....
 }

OnCompletionListener completeListener = new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        mp.release();
        myDigit = // remove next digit from queue..
        if (myDigit != -1)  // if queue is not empty..
            _function_play_file(myDigit);
    }
});

}

于 2012-05-28T09:05:50.727 に答える
1

これは、継続ループで曲を再生するための作業コードです

public class MainActivity extends Activity 
{
    private int[] tracks = {R.raw.explosion,R.raw.pianothingy_one,R.raw.car_horn_x};
    int mCompleted = 0;

 public void onCreate(Bundle savedInstanceState) 
 {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 MediaPlayer mp = MediaPlayer.create(this, tracks[0]);
 mp.setOnCompletionListener(new OnCompletionListener() 
 {
     @Override
     public void onCompletion(MediaPlayer mp)
     {
         mCompleted++;
         mp.reset();
         if (mCompleted < tracks.length) 
         {
             try
             {
                 AssetFileDescriptor afd = getResources().openRawResourceFd(tracks[mCompleted]);
                 if (afd != null) 
                 {
                     mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                     afd.close();
                     mp.prepare();
                     mp.start();
                 }
             }
             catch (Exception ex) 
             {
                ex.printStackTrace();
             }

         } 
         else if (mCompleted>=tracks.length) 
         {
             mCompleted =0;
             try
             {
                 AssetFileDescriptor afd = getResources().openRawResourceFd(tracks[mCompleted]);
                 if (afd != null) 
                 {
                     mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                     afd.close();
                     mp.prepare();
                     mp.start();
                 }
             }
             catch (Exception ex) 
             {
                ex.printStackTrace();
             }
         }
         else
         {
             mCompleted=0;
              mp.release();
              mp = null;
         }

     }
 });

 mp.start(); 
于 2013-06-13T07:11:44.710 に答える
1

このコードは私にとってはうまくいきますが、オーディオファイルをアセットフォルダーに配置します:

//define a variable to be used as index.
int audioindex = 0;
//Extract the files into an array
String[] files = null;
files = assetManager.list("audiofiles");
mp.setOnCompletionListener(new OnCompletionListener(){
    // @Override
    public void onCompletion(MediaPlayer arg0) {
    // File has ended, play the next one.
   FunctionPlayFile(files[audioindex]);
   audioindex+=1; //increment the index to get the next audiofile
     }
});
于 2012-05-28T08:54:41.903 に答える
0

PlayMedia を使う

int[] soundIDs = {R.raw.yes, R.raw.eat};
PlayMedia playAudio = new PlayMedia(context,soundIDs);
playAudio.execute();

このようにPlayMediaクラスを定義します

import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.AsyncTask;
import android.util.Log;

public class PlayMedia extends AsyncTask<Void, Void, Void> {

    private static final String LOG_TAG = PlayMedia.class.getSimpleName();

    Context context;
    private MediaPlayer mediaPlayer;
    int[] soundIDs;
    int idx =1;

    public PlayMedia(MediaPlayer mediaPlayer) {
        this.mediaPlayer = mediaPlayer;
    }
    public PlayMedia(final Context context, final int[] soundIDs) {
        this.context = context;
        this.soundIDs=soundIDs;
        mediaPlayer = MediaPlayer.create(context,soundIDs[0]);
        setNextMediaForMediaPlayer(mediaPlayer);
    }

    public void setNextMediaForMediaPlayer(MediaPlayer player){
        player.setOnCompletionListener(new OnCompletionListener() {         
            public void onCompletion(MediaPlayer mp) {
                if(soundIDs.length>idx){
                    mp.release();
                    mp = MediaPlayer.create(context,soundIDs[idx]);
                    setNextMediaForMediaPlayer(mp);
                    mp.start();
                    idx+=1;
                }               
            }
        });
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            mediaPlayer.start();
        } catch (IllegalArgumentException e) {
            Log.e(LOG_TAG, "", e);
        } catch (SecurityException e) {
            Log.e(LOG_TAG, "", e);
        } catch (IllegalStateException e) {
            Log.e(LOG_TAG, "", e);
        }

        return null;
    }
}
于 2014-06-02T20:57:44.330 に答える
-1
 MediaPlayer mediaplayer = new MediaPlayer();                                
    setSound(file );    
    try {
    if(mediaplayer != null)
        {
            mediaplayer.stop();
            mediaplayer.release();
            }
            mediaplayer.setDataSource(getResources().openRawResourceFd(file)
                                             .getFileDescriptor());
            mediaplayer.prepare();  
            mediaplayer = MediaPlayer.create(getBaseContext(), now); 
            mediaplayer.start();                     
            mediaplayer.setLooping(false);
            mediaplayer.setLooping(true); //sequence playing                    

            }   catch (NullPointerException e) {                         
                    e.printStackTrace();
       }
于 2012-05-28T08:54:03.637 に答える