SoundPool“AudioFlinger无法创建曲目,状态:-12”

我有一个单按钮的Android应用程序。 单击该按钮时,应用程序开始播放(循环)SoundPool加载的声音。 再次单击该按钮时,声音停止,然后再次启动。

但问题是声音只在每隔一段时间播放。

  • 点击第1次 – >声音开始播放
  • 单击第二次 – >声音停止但不再开始
  • 单击第3次 – >声音开始播放
  • 单击第4次 – >声音停止但不开始播放
  • 等等…

当声音没有播放时,logcat中会出现此错误:

E/AudioTrack: AudioFlinger could not create track, status: -12 E/SoundPool: Error creating AudioTrack 

当我删除循环(将-​​1更改为0)时,一切正常!

我正在播放的声音是MP3文件,大小为71.6 KiB。

我在Sony Xperia U上测试了这个,运行Android 4.1.2(不工作)。 但在我的华为Honor 6(Android 6.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

正如您在此处看到的,错误代码12代表Linux环境中Out of memory 。 显然它们是关于Jelly Bean上的内存分配的一些问题(我想是用于预棒棒糖)设备。

我已经将您的原始文件从177808kbps下采样到32000kbps,并且它开始在预棒棒糖设备上按预期工作。

因此,您必须为前棒棒糖设备下采样音频文件。 最好有原始音频文件的raw-v21 ,并将rawampled放入raw 。 因此,从API 21开始的设备将使用原始版本。

在此处输入图像描述

这是下采样文件。