2017-01-20 2 views
0

У меня есть игра, и я использую отдельный MediaPlayer для каждого звуковогоMediaPlayer перестает играть что-нибудь

Вот он:

public class SoundSample { 
    public final static String CORRECT="sounds/correct.wav"; 
    public final static String PASS="sounds/pass.wav"; 
    public final static String CLOCK_OUT="sounds/clock_out.mp3"; 
    public final static String ALARM="sounds/alarm.mp3"; 
    public final static String COUNTDOWN_TO_START="sounds/countdown_to_start.mp3"; 
    public final static String GO="sounds/go.mp3"; 
    private String assetFile; 

    private MediaPlayer mediaPlayer; 

    public SoundSample(String sound){ 
     assetFile = sound; 
     try { 
     AssetFileDescriptor afd = MainActivity.activity.getAssets().openFd(sound); 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 

      mediaPlayer.prepare(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void play(){ 
     if (mediaPlayer.isPlaying()){ 
      mediaPlayer.stop(); 
     } 
     mediaPlayer.start(); 
    } 

    public void release(){ 
     mediaPlayer.release(); 
     mediaPlayer.reset(); 
     mediaPlayer = null; 
    } 

} 

так, я использую

correctSound = new SoundSample(SoundSample.CORRECT); 

, а затем correctSound.play();

Итак, при втором использовании он перестает играть на многих телефонах и неве r снова воспроизвести. Я имею в виду, что отладчик показывает, что исполняется mediaPlayer.start();, но звуки больше не воспроизводятся. это работает хорошо, однако, на каждом Android 6 телефона я тестировал, так что это, вероятно, только андроид 6- или 5- вопрос

Есть ли способ, что я могу это исправить? Я знаю, что могу использовать Soundpool, но он также имеет некоторые проблемы

ответ

1

Вы должны воссоздать медиа-плеер, попробуйте, как показано ниже

if (mediaPlayer.isPlaying()) { 
      mediaPlayer.reset(); 
      mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.yourAudio); 
     } 

    mediaPlayer.start(); 
+0

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

+0

Это правильно. Я просто хочу добавить к этому ответу. @ user2976267 вам действительно нужен MediaPlayer? Наличие нескольких отдельных «MediaPlayers» будет тяжелым для системы. Если ваш звук невелик, вы можете использовать SoundPool для обработки многих небольших звуковых файлов. – Ekalips

+0

@ user2976267 прочитайте это http://stackoverflow.com/questions/13527134/audiotrack-soundpool-or-mediaplayer-which-should-i-use (anvers) Элвиса Поповича) – Ekalips

0

Попробуйте добавить код mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

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