2010-07-20 5 views
3

내 응용 프로그램의 assets 디렉토리에 오디오 파일이 여러 개 있습니다. 사용자가 버튼을 클릭하면 특정 순서대로 파일을 차례로 재생하려고합니다. 오디오 파일간에 눈에 띄는 지연이 없어야합니다. 이것을 달성하기위한 최선의 방법은 무엇입니까?오디오 파일을 차례로 재생하는 방법

MediaPlayer 개체와 OnCompletionListener을 사용하려고 생각 중입니다. 하지만 오디오 파일이 다음에있을 때마다 알 필요가 있기 때문에 많은 수의 오디오 파일을 만들어야한다는 것을 의미합니다. 나는 뭔가를 놓치고 있습니까? 아니면 더 나은 접근법이 있습니까?

답변

3

올바른 방법으로 OnCompletionListener를 많이 사용하지 않아도됩니다. 당신의 OnCompletionListener에서 다음

//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 
    } 
}); 
+0

좋은 대답처럼 PlayMedia 클래스를 정의 .... – vnshetty

1

확인이 이러한 클래스는 ........ 내가 대략 어떤 시점에서 그들을 생성 및 자산에서 재생하기 위해 불통 될 수있다, MP3의 URL을 또 다른 후 하나를 재생할 수 있습니다

https://github.com/vivdub/AndroidMediaplayer

0

은 고해상도 디렉토리에 원시 폴더를 만들고이

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; 
    } 
} 
+0

나는 그것을 시도했지만 오디오가 갑자기 이유가 일어나고 알고 ... 4-5 초 후에 중지? –

관련 문제