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, будут использовать исходную версию.
вот!--5--> файл уменьшено.