我有多个按钮,点击它们我想要一个声音。我的代码就像这样
button.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
if(mSound != null && mSound.isPlaying()){
mSound.stop();
mSound.reset();
mSound.release();
mSound = null;
}
mSound = new MediaPlayer();
mSound = MediaPlayer.create(getApplicationContext(), R.raw.button);
mSound.start();
}
});
在OnCreate中,我已经像这样注册了mSound,
mSound = new MediaPlayer();
mSound = MediaPlayer.create(this, R.raw.button);
我收到错误(1,-19)以及(0,38)。
注意:这不是重复的问题。我尝试了之前提出的所有问题的每个答案,但没有任何效果。
答案 0 :(得分:1)
根据docs故障由于几个原因发生,主要是
未能调用release()
建议您抓住错误并恢复。
某些播放控制操作可能由于各种原因而失败,例如 作为不支持的音频/视频格式,交错的音频/视频, 分辨率太高,流超时等。因此,错误 报告和恢复是这些问题下的一个重要问题 情况。
尝试使用此answer或其他更好的方法来捕获错误。或者尝试以下代码,在内存中释放对象。
mSound = MediaPlayer.create(getApplicationContext(), R.raw.button);
mSound.start();
mSound.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.release();
};
});
答案 1 :(得分:0)
我反复播放一些音频文件时遇到相同的错误。 我正在制作一本简单的英语到法语短语书,有8个按钮用于8个常用短语,音频文件很小。 在密切监视日志时,我发现代码缓存的增量存在一些限制。 在一段时间后反复播放音频后,我得到了以下提示:
2019-12-10 12:37:32.561 29888-29893/com.example.gridlayout I/zygote: Do partial code cache collection, code=22KB, data=30KB
2019-12-10 12:37:32.567 29888-29893/com.example.gridlayout I/zygote: After code cache collection, code=22KB, data=30KB
2019-12-10 12:37:32.567 29888-29893/com.example.gridlayout I/zygote: Increasing code cache capacity to 128KB
再重复一遍,我得到了:
2019-12-10 12:37:46.008 29888-29893/com.example.gridlayout I/zygote: Do partial code cache collection, code=53KB, data=57KB
2019-12-10 12:37:46.009 29888-29893/com.example.gridlayout I/zygote: After code cache collection, code=53KB, data=57KB
2019-12-10 12:37:46.009 29888-29893/com.example.gridlayout I/zygote: Increasing code cache capacity to 256KB
在做更多的事情上,我得到了:
2019-12-10 12:38:23.596 29888-29905/com.example.gridlayout E/MediaPlayerNative: error (1, -19)
2019-12-10 12:38:23.596 29888-29888/com.example.gridlayout E/MediaPlayer: Error (1,-19)
我通过耐心等待短音频完成然后再次播放来重复此操作,以确保不会由于同时反复播放而增加缓存。
我的推断是,要运行巨大的音频文件,需要增加代码缓存,它会在一定程度上自动执行并在超出限制后发出错误(在我的情况下为256KB)。十分确定可以以某种方式增加缓存...
我在手机上进行了鲁棒性测试,效果很好,我猜在手机中,它们在完成后会自动清除缓存。 尝试在移动设备而不是模拟器上运行您的应用程序。
我的结论:代码缓存限制了声音播放的性能。要么增加代码缓存的限制(我尝试了浅表搜索,找不到了,但是搜索正确,我想您会在某个地方找到它),或者尝试直接在您的移动设备上运行它。 >