我有两台可以测试我的游戏的设备:一台 US 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);
更新
我注意到当一个应该播放(但没有)的声音出现这个错误时:
AudioPolicyManager: stopOutput() oldDevice 2
AudioPolicyManager: [getDeviceForStrategy] strategy : 0,forceUse(0)