2012-05-28 6 views
9

मैं इस तरह ऑडियो फाइलों की एक सूची है के बाद ऑडियो फ़ाइलें बजाना एक,एक और

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

मैं एक के बाद इस एक खेलने के लिए की जरूरत है - जब मैं इस play_numbers विधि के लिए 100 पर भेजें - मैं अंकों खेलने का इरादा कर रहा हूँ _function_play_file में, लेकिन मैं एक के बाद यह एक ऐसा करने में असमर्थ ..

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

     } 

    }); 

} 

- - बुद्धिमान ..

मैंने यह किया है मैं इस

0 है
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

सबसे पहले, आपके स्विच में ब्रेक गायब है; क्या आप mPlayer = MediaPlayer.create (यह, music_numbers [फ़ाइलें]) का उपयोग नहीं कर सकते? – Urho

+0

त्रुटि क्या है? –

+0

स्विच-केस में सभी मामले 'ब्रेक' के साथ समाप्त हो जाना चाहिए। यहां जाएं -> http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – OguzOzkeroglu

उत्तर

6

आपको प्रत्येक पर एक कॉम्प्लिशन लिस्टर सेट करने और अगले को पूरा होने पर शुरू करने की आवश्यकता है।

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

इस लक्ष्य को हासिल करने के लिए सबसे अच्छा तरीका है एक वर्ग है कि OnCompletionListener जो onCompletion संभालती है और खेलने के लिए अगले फ़ाइल प्राप्त करता है लागू करता है बनाने के लिए है। इस तरह आप इसे अपने कोड में अच्छी तरह से चालू कर सकते हैं। बेशक, अपना ब्रेक मत भूलना; उपरोक्त मामलों में।

+0

तो अगर मैं एक के बाद 20 फाइलें खेलना चाहता हूं, तो क्या मुझे setOnCompletionListener को एक और 20 बार अंदर घोंसला करना होगा ? –

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

इस कोड मेरे लिए काम करता है, लेकिन मैं संपत्ति फ़ोल्डर में ऑडियो फाइलों को जगह:

//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

संख्या खेले जाने वाले आयोजन के लिए एक कतार का प्रयोग करें।

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

इस में गाने खेलने के लिए कोड काम कर रहा है पाश

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 जारी रखने के लिए इस

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; 
    } 
} 
की तरह