звуки не воспроизводятся с медиаплеером после воспроизведения некоторых звуков

Я разрабатываю приложение для Android, которое представляет собой сборник из 100 звуковых эффектов. После того, как я воспроизведу, например, 25 звуков, я больше не могу играть, и мне нужно закрыть приложение и подождать несколько минут, затем открыть приложение, и теперь я могу воспроизводить другие звуки.

final MediaPlayer mp81 = MediaPlayer.create(MainActivity.this, R.raw.a81);

Я проигрываю звук, используя следующий код:

mp81.start();

Я останавливаю воспроизведение звука, используя следующий код:

mp81.seekTo(0);

Я также использовал метод stop(), но проблема все еще существовала. есть ли какой-нибудь другой метод, который я должен добавить?


person Amin Sajedi    schedule 08.03.2013    source источник
comment
убедитесь, что вы очищаете память при воспроизведении одного звука   -  person DjHacktorReborn    schedule 08.03.2013
comment
просто предложение, для такого рода задач класс SoundPool может быть полезен   -  person lelloman    schedule 08.03.2013


Ответы (1)


Обратите внимание: подумайте об использовании SoundPool для воспроизведения коротких звуков.

Что касается вашего варианта использования: вы инициализируете свой экземпляр MediaPlayer с помощью статического метода create(), что означает, что вы создаете новый объект MediaPlayer для каждого звука вместо повторного использования существующего экземпляра и простого изменения источника данных. Это может негативно повлиять на производительность вашего приложения. Я предлагаю вам создать массив путей к своим звукам, а затем создать экземпляр MediaPlayer следующим образом:

MediaPlayer mp = new MediaPlayer();
try {
     mp.setDataSource(yourArray[x]);
     mp.prepare();
     mp.start();
  } catch(Exception e){
    e.printStackTrace();
  }

Дополнительную информацию см. В документе MediaPlayer.

person Droidman    schedule 08.03.2013
comment
Я следил за тем, что вы сказали, но, к сожалению, проблема все еще не устранена, и приложение также скоро закрывается - person Amin Sajedi; 08.03.2013
comment
пожалуйста, опубликуйте обновленный код и сообщения LogCat, которые появляются при сбое вашего приложения - person Droidman; 08.03.2013
comment
это код, который я написал на основе того, что вы упомянули выше. проблема в том, что при запуске приложения звук не воспроизводится, а logcat сообщает: setDataSource, вызванный в состоянии 8, посмотрите мой код в разделе ответов ниже .... - person Amin Sajedi; 09.03.2013
comment
public void onClick (View v) {mp = MediaPlayer.create (Main.this, R.raw.a1); if (i [0] == false) {try {mp.setDataSource (source [0] .toString ()); mp.start ();} catch (Exception e) {e.printStackTrace ();} b1.setBackgroundResource (R.drawable.stop_button); я [0] = истина;} еще {mp.stop (); b1.setBackgroundResource (R.drawable.horn); я [0] = ложь;}}}); - person Amin Sajedi; 09.03.2013
comment
попробуйте инициализировать MediaPlayer, используя new, а затем вызовите prepare () или prepareAsync (). И я настоятельно рекомендую вам ознакомиться с документацией по API, на которую я ссылался, MediaPlayer сложнее, чем может показаться - person Droidman; 09.03.2013