2012-06-07 5 views
0

Я новичок в java. Таким образом, программа должна принимать введенный пользователем текст, и если есть «a», он будет воспроизводить звук, если есть «b», он будет воспроизводить b-звук. И он должен воспроизводить эти звуки один за другим, даже если есть несколько «a» или «b». Вот мой код:Воспроизведение аудиофайлов по одному?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button bStart = (Button) findViewById(R.id.bStart); 
    final EditText etStart = (EditText) findViewById(R.id.etStart); 
    final EditText etFinish = (EditText) findViewById(R.id.etFinish); 
    final char[] arr = etStart.getText().toString().toCharArray(); 
    final MediaPlayer as = MediaPlayer.create(R2d2Activity.this, R.raw.as); 
    final MediaPlayer bs = MediaPlayer.create(R2d2Activity.this, R.raw.bs); 
    final SoundPool sp; 
    final int a; 
    final int b; 
    final int t; 
    sp = new SoundPool(2, AudioManager.STREAM_MUSIC, 0); 
    a = sp.load(this, R.raw.as, 1); 
    b = sp.load(this, R.raw.bs, 1); 
    final String value = etStart.getText().toString(); 
    final Thread timer = new Thread(new Runnable() { 
     @Override 
     public void run() { 
     try { 
     Thread.sleep(1300); 
     // Do some stuff 
     } catch (Exception e) { 
     e.getLocalizedMessage(); 
     } 
     } 
     }); 
    bStart.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      int n = 0; 
      String value; 
      String first; 
      value = etStart.getText().toString(); 
      // TODO Auto-generated method stub 
          //actual code 
      for (int i=0; i<value.length(); i++){ 
       first = etStart.getText().toString().substring(i, i+1); 
       if(first.contentEquals("a")){ 
        as.start(); 
        as.setOnCompletionListener(new OnCompletionListener(){ 
         public void onCompletion(MediaPlayer arg0) { 
          //when finished 


          } 
        }); 

         }else{ 
          } 
       if(first.contentEquals("b")){ 
        bs.start(); 

         }else{ 
          } 

      } 



     } 
    }); 

Проблема в том, что он одновременно запускает звуковые файлы. Я попытался добавить некоторый OnCompletionListener, но я не знаю, что с ним делать. Помоги мне, пожалуйста.

+0

Используйте прослушиватель строк, и вы получите события при запуске и остановке. Затем вы должны заставить метод ждать (пример: http://stackoverflow.com/questions/289434/how-to-make-a-java-thread-wait-for-another-threads-output). – Mizuho

ответ

1

Что вы можете сделать, это

//define a variable to be used as index. 
int audioindex = 0; 
//Extract the files id into an array 
int[] audioFileIds=new int[]{R.raw.as,R.raw.bs}; 

Тогда в вашем MediaPlayeronCompletionListener поставить что-то вроде следующего.

затем в вашем OnCompletionListener.

mp.setOnCompletionListener(new OnCompletionListener(){ 
    // @Override 
    public void onCompletion(MediaPlayer player) { 
    // File has ended, play the next one. 
    FunctionPlayFile(audioFileIds[audioindex]); 
    audioindex+=1; //increment the index to get the next audiofile 
    } 
}); 
+0

Что такое "FunctionPlayFile"? – user1437450

+0

Что такое "mp"? – user1437450

Смежные вопросы