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

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

Но проблема в том, что звук воспроизводится только в другое время.

  • Нажмите первый раз -> начнется воспроизведение звука
  • Нажмите второй раз -> звук остановится, но не начнется снова
  • Нажмите третий раз -> начнется воспроизведение звука
  • Нажмите 4-е время -> звук остановится, но не начнет играть
  • и так далее…

Когда звук не воспроизводится, эта ошибка появляется в логарифме:

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); } }); } } 

РЕДАКТИРОВАТЬ:

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

Звук здесь: sound01.mp3

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

Я уменьшил ваш исходный файл с 177808 кбит / с до 32000 кбит / с, и он начал работать, как ожидалось, на устройствах с предварительным леоптипом.

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

Введите описание изображения здесь

Вот файл с понижающей дискретизацией.

Intereting Posts
Аутентификация учетных данных, полученных из facebook в моем собственном REST API Измерение «реального» уровня сигнала телефона на мобильном телефоне Документация для annotation_processors (buck) Перезапустите полное приложение для Android после завершения AsyncTask Представление сетки получает элементы, которые видны пользователю Android Studio – невозможно открыть файл PNG Создание приложения для Android Facebook Хеш для выпуска в Play Маркете ScrollView не играет хорошо с RelativeLayout Есть ли эквивалентное решение, такое как локальная поддержка iOS на платформе Android? Вызов члена класса JAVA из Native C / C ++ кода Воспроизведение аудио из музыкального видео с использованием Youtube API в Android, когда мое приложение сведено к минимуму Как связать статические библиотеки (файлы .a) с APK с помощью графического плагина gradle 0.2.0 в Android Studio Андроид снимает скриншот и делится им Конвертировать DOM в String в android?