2013-11-10 3 views
2

Я пробовал следующий код, и 3 ноты играли одновременно. Этот метод запускается нажатием кнопки. Однако при следующем событии клика он воспроизводит только одну заметку, и приложение выходит из строя. Я хочу играть в 3 различных ноты каждый раз, когда я нажимаю на кнопку. (Я выбрал те randomaly)как играть несколько звуков одновременно в android

player = MediaPlayer.create(this, resIdFirstNote); 
    player.start(); 

    player = MediaPlayer.create(this, resIdSecondNote); 
    player.start(); 

    player = MediaPlayer.create(this, resIdThirdNote); 
    player.start(); 

    player.release(); 

это экземпляр игрока, который перегружает? и я должен отпустить его по-другому? или это что-то еще?

Thx заранее Leon

ответ

1

вам нужно создать три Media Player: mp_1, mp_2, mp_3

в методе OnCreate():

 MediaPlayer mp_1, mp_2, mp_3; 

    mp_1 = new MediaPlayer(); 
    mp_2 = new MediaPlayer(); 
    mp_3 = new MediaPlayer(); 

    mp_1 = MediaPlayer.create(this, R.raw.mp_1); 
    mp_2 = MediaPlayer.create(this, R.raw.mp_2); 
    mp_3 = MediaPlayer.create(this, R.raw.mp_3); 

      mp_1.start(); 
      mp_2.start(); 
      mp_3.start(); 
+0

Я не был чист. Я хочу каждый раз играть 3 разных заметок. Каждый раз, когда мне нужно создавать 3 разных игрока? –

1

Используйте android.media.SoundPool:

public class MyActivity extends Acticity implements SoundPool.OnLoadCompleteListener { 
    private SoundPool soundPool; 
    private final int maxPlaying = 4; 
    private final int volume = 1; 
    private final int priority = 1; 
    private final int no_loop = 0; 
    private final float normal_playback_rate = 1f; 
    private final Map<Integer, Integer> loadedSongsCache = new HashMap<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     soundPool = new SoundPool(maxPlaying, AudioManager.STREAM_MUSIC, 0); 
     soundPool.setOnLoadCompleteListener(this); 

     playSong(R.raw.somethingSound); 
     playSong(R.raw.somethingSound2); 
     playSong(R.raw.somethingSound3); 
    } 

    private void playSong(int resourceId){ 
     Integer sampleId = loadedSongsCache.get(resourceId); 
     if (sampleId != null) { 
      soundPool.play(sampleId, volume, volume, priority, no_loop, normal_playback_rate); 
     } else { 
      sampleId = soundPool.load(ColorMixActivity.this, songMix.getResourceId(), priority); 
      loadedSongsCache.put(songMix.getResourceId(), sampleId); 
     } 
    } 

    @Override 
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { 
     if (status == 0) 
      soundPool.play(sampleId, volume, volume, priority, no_loop, normal_playback_rate); 
    } 

    @Override 
    protected void onDestroy() { 
     soundPool.release(); 
     super.onDestroy(); 
    } 
} 
Смежные вопросы