Android Soundpool.play() 在发布版本中不起作用

Min*_*n91 4 debugging android release soundpool

我正在尝试构建一个记录声音然后回放的应用程序。录音部分工作完美,但当我尝试重放声音时,它什么也没做。当我在调试器中运行它并逐步执行播放音频的步骤时,它可以工作。当我删除所有断点并在调试中运行程序时,它不会。

该问题可能是由在后台完成的一些事情引起的,并且在我尝试运行音频之前尚未完成,但我不完全确定。

任何帮助将不胜感激。

以下是源代码的相关部分。

创建声音池

mSoundPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 0);
Run Code Online (Sandbox Code Playgroud)

从音池播放

int soundId = mSoundPool.load(mAudioRecorder.stop(), 0);
if(soundId > 0){
    mSoundPool.play(soundId, 0.99f, 0.99f, 0, -1, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)

Audiorecorder.java 输出文件是.mp4

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);


public String stop() throws IOException {
    mRecorder.stop();
    return mPath;
}
Run Code Online (Sandbox Code Playgroud)

Prz*_*emo 5

我昨天遇到了同样的问题 - 在 RELEASE 模式下无法正常工作的原因是你必须等待SoundPool.load(...)函数执行。

我通过在执行活动/片段之前在菜单活动中加载声音来解决这个问题,我将在其中播放一些音乐SoundPool.play(...)功能的音乐。

在调试模式下,应用程序有很多时间来执行SoundPool.load(...)功能,因此它可以正常工作。