【发布时间】:2012-05-29 02:47:29
【问题描述】:
我可以在两种设备上测试我的游戏:美国 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)
【问题讨论】:
-
我在 Nexus 5 设备上注意到了这个问题。基本上我的应用程序流式传输音频和 MediaPlayer 正在削减大约。 1-5 秒太早了。还有人注意到这一点吗?
-
我正在开发的应用程序也有这个问题,这让我发疯,因为我无法用我现有的手机重现它,但它似乎在 Galaxy S4 上失败了。似乎这个 bug 是在 kitkat 中引入的,只有在非常特殊的情况下才会弹出。
标签: android android-mediaplayer