我有一个带有单一按钮的Android应用程序。当点击按钮时,应用程序开始播放(循环)带有SoundPool的声音。当再次单击按钮时,声音将停止,然后重新启动。
但问题是声音每隔一次播放一次。
当声音不播放时,这个错误出现在logcat中:
E/AudioTrack: AudioFlinger could not create track, status: -12
E/SoundPool: Error creating AudioTrack当我删除循环(更改-1到0)时,一切都完全正确!
我正在播放的声音是一个MP3文件,大小为71.6 KiB。
我已经在运行Android4.1.2的索尼Xperia上测试了这一点(不起作用)。但在我的华为荣誉6(Android6.0)一切工作,包括循环!
我做错了什么?
这是我的代码:
import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private int lastStreamId = 0;
private int soundID;
private SoundPool soundPool;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
soundID = soundPool.load(this, R.raw.sound01, 1);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
soundPool.stop(lastStreamId);
lastStreamId = soundPool.play(soundID, 1, 1, 1, -1, 1);
}
});
}
}编辑:
我不允许上传原始声音在这里,但这里有另一个声音,做同样的事情。,除了,现在声音只在第一个单击中播放;下面的所有单击只会使其保持沉默,并指出上面的错误。
声音在这里:sound01.mp3
发布于 2017-03-28 15:05:27
如您所见,这里环境中的错误代码12表示Out of memory。显然,它们是一些有关Jelly (我想是用于预棒棒糖)设备上的内存分配的问题。
我把你的原始文件从177808 file降到了32000 file,它开始像预期的那样在前棒棒糖设备上工作。
所以,你必须降低你的音频文件前棒棒糖设备。最好有一个raw-v21的原始音频文件,并将下采样到raw。因此,从API 21开始的设备将使用原始版本。

下面是下采样文件。
发布于 2019-03-16 11:09:21
我也有过同样的问题。做以下工作:
(1)确保文件小于1MB
(2)更重要的是,在使用SoundPool实例释放内存空间之后,释放它们
soundPool.release();https://stackoverflow.com/questions/43017762
复制相似问题