У меня есть два устройства, на которых я могу протестировать свою игру: телефон США Celluar (SCH-R880) и Kindle Fire, Kindle Fire намного мощнее, чем телефон.
У меня есть несколько коротких (менее или около 1 секунды) звуковых эффектов. Для сохранения в памяти я загружаю, воспроизвожу и отпускаю некоторые из этих звуковых эффектов. По телефону они играют (в основном), как и ожидалось. Однако на Kindle Fire они прерваны. Очень короткие звуки отрезаны так быстро, что я ничего не слышу. Тем не менее, те, которые загружены при настройке и остаются, отлично выглядят.
Кто-нибудь знает, что здесь происходит? Я как-то рано высвобождаю свои СМИ? Ниже приведен один пример этого. По телефону слышу "Второй уровень!" но на Kindle я слышу что-то вроде "Lev tw."
mpNum = null;
try
{
switch (level)
{
case 2:
mpNum = MediaPlayer.create(contxt, R.raw.l2); break;
case 3:
mpNum = MediaPlayer.create(contxt, R.raw.l3); break;
case 4:
mpNum = MediaPlayer.create(contxt, R.raw.l4); break;
case 5:
mpNum = MediaPlayer.create(contxt, R.raw.l5); break;
case 6:
mpNum = MediaPlayer.create(contxt, R.raw.l6); break;
case 7:
mpNum = MediaPlayer.create(contxt, R.raw.l7); break;
case 8:
mpNum = MediaPlayer.create(contxt, R.raw.l8); break;
default:
return;
}
MediaPlayer vLevel = MediaPlayer.create(contxt, R.raw.level);
vLevel.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
{
public void onPrepared(MediaPlayer mp)
{
mp.start();
}
});
vLevel.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer mpl)
{
mpNum.start();
mpl.release();
}
});
mpNum.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer mp)
{
mp.release();
}
});
}
catch (Exception e) {}
В попытке исправить это, я попробовал SoundPool, но он не работает; Я ничего не слышу. Ниже я попытался воспроизвести музыку с помощью SoundPool:
SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
soundPool.load(contxt, R.raw.song2, 1);
AudioManager mgr = (AudioManager)contxt.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeMax;
soundPool.play(1, volume, volume, 1, 5, 2);
UPDATE
Я заметил, когда звук, который должен воспроизводиться (но не имеет), имеет эту ошибку:
AudioPolicyManager: stopOutput() oldDevice 2
AudioPolicyManager: [getDeviceForStrategy] strategy : 0,forceUse(0)