java - 声音池 "AudioFlinger could not create track, status: -12"

标签 java android soundpool audiotrack audioflinger

我有一个只有一个按钮的 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。

我已经在运行 Android 4.1.2 的 Sony Xperia U 上对此进行了测试(不工作)。但是在我的 Huawei 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

最佳答案

如你所见here ,错误代码12代表Linux环境下的Out of memory。显然,它们是关于 Jelly Bean(我想是 Lollipop 之前的设备)设备上的内存分配的一些问题。

我已将您的原始文件从 177808kbps 降采样到 32000kbps,它开始在 Lollipop 之前的设备上按预期工作。

因此,对于 Lollipop 之前的设备,您必须对音频文件进行下采样。最好有一个用于原始音频文件的 raw-v21,并将下采样放入 raw。因此,从 API 21 开始的设备将使用原始版本。

enter image description here

Here's下采样文件。

关于java - 声音池 "AudioFlinger could not create track, status: -12",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43017762/

相关文章:

java - 在 Java 中使用 XML - DOM

java - 如何等待具有相同类名的所有元素?

android - 打开 Google Plus 应用程序的二维码

android - Soundboard App 强制关闭,我不明白为什么

java - 通过 NoClassDefFoundError 示例分析堆栈跟踪的提示

java - 是否有更好的方法来分区列表和批量处理以更改源列表

android - Firebase 身份验证 : Verify email before sign up

android - 删除android默认操作栏

android - Android声音池无法正常工作

android - Android:同步两个mediaPlayers(一个又一个播放)-消除差距