SoundPool "AudioFlinger не удалось создать трек, статус: -12"

у меня есть приложение для Android с одной кнопкой. Когда кнопка нажата, приложение начинает воспроизводить (цикл) звук, загруженный SoundPool. Когда кнопка нажата снова, звук останавливается, а затем запускается снова.

но проблема в том, что звук воспроизводится только каждый раз.

  • Нажмите кнопку 1-й раз -> звук начинает играть
  • нажмите 2-й раз - > звук останавливается, но не запускается снова
  • нажать 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 (не работает). Но в моем 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);
            }
        });
    }
}

EDIT:

мне не разрешено загружать исходный звук здесь, но вот другой звук, который делает то же самое. за исключением что теперь звук играет только в первом клике; все следующие клики просто заставляют его молчать и выплевывать вышеуказанную ошибку.

звук здесь: sound01.МР3

1 ответов


Как видите,здесь, код ошибки 12 расшифровывается как Out of memory в среде Linux. По-видимому, это некоторые проблемы, касающиеся выделения памяти на устройствах Jelly Bean (я полагаю, для pre-lollipop).

я уменьшил исходный файл с 177808kbps до 32000kbps, и он начал работать, как и ожидалось, на устройствах pre-lollipop.

таким образом, вы должны downsample свой аудиофайл для устройств pre-lollipop. Лучше иметь raw-v21 для оригинального аудио файлы, и положить downsampled в raw. Таким образом, устройства, начиная с API 21, будут использовать исходную версию.

enter image description here

вот!--5--> файл уменьшено.