2012-05-28 56 views
9

Tôi có một danh sách các tập tin âm thanh như thế này,Chơi các file âm thanh một sau khi khác

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

tôi cần phải chơi này bởi một - khi tôi gửi 100 đến phương pháp play_numbers này - tôi đang có ý định chơi chữ số khôn ngoan ..

tôi đã làm điều này - nhưng tôi không thể làm điều này một cái khác ..

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)); 

     } 

    }); 

} 

trong _function_play_file - tôi có điều này

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(); 

     } 
    } 
+0

Trước hết, công tắc của bạn thiếu các ngắt; Bạn không thể sử dụng mPlayer = MediaPlayer.create (this, music_numbers [files]) thay thế? – Urho

+0

Lỗi là gì? –

+0

Tất cả các trường hợp trong trường hợp chuyển đổi phải được kết thúc bằng 'ngắt'. Truy cập tại đây -> http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – OguzOzkeroglu

Trả lời

6

Bạn cần đặt onCompletionListener thành từng cái và bắt đầu bước tiếp theo khi hoàn thành.

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

Cách tốt nhất để đạt được điều này là tạo lớp học triển khai OnCompletionListener xử lý việc OnCompletion và nhận tệp tiếp theo để phát. Bằng cách này bạn có thể khởi tạo nó độc đáo trong mã của bạn. Tất nhiên, đừng quên nghỉ ngơi của bạn; trong các trường hợp trên.

+0

Vì vậy, nếu tôi muốn phát 20 tệp một cái khác, tôi có phải lồng tổ hợp setOnCompletionListener bên trong nhau 20 lần nữa không ? –

0
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(); 
     } 
1

Mã này làm việc cho tôi, nhưng tôi đặt các tập tin âm thanh trong thư mục nội dung:

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

Sử dụng một hàng đợi để giữ các con số để được chơi.

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); 
    } 
}); 

}

1

này được làm việc mã để chơi các bài hát trong tiếp tục vòng lặp

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(); 
0

PlayMedia sử dụng Như thế này

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

và xác định PlayMedia Lớp Như thế này

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; 
    } 
} 
Các vấn đề liên quan