ОСНОВНОЕ РЕДАКТИРОВАНИЕ: НАЙДЕН СПОСОБ УСТАНОВИТЬ ДЕНЬ !! ПРОКРУТКА ВНИЗ НИЖЕ !!
Я в одной лодке с тобой. Прежде чем читать, я должен сообщить вам, что я не смог дать ответ, который может решить эту проблему.
Я видел много-много тем о переполнении стека, касающихся SoundPool, но я не видел много проблем с SoundPool в связи с кодом Java из книги Android:
AudioTrack: AudioFlinger не может создать трек, статус -12.
SoundPool: ошибка при создании AudioTrack.
Вот код, взятый из исходного кода Beginning для Android 4, разработанного здесь (см. Ниже). Там вы получаете файл explosion.ogg (в стволе найдите папку / asset главы 4 - Основы Android). Вы должны нажать «Просмотр необработанного файла» справа от вас, чтобы получить файл.
Все, что я сделал, я скопировал исходный код прямо в Eclipse и добавил в свой проект файл explosion.ogg, предоставленный из транка. Я запустил эмулятор Android, попытался воспроизвести файл и могу сказать, что у меня все те же ошибки Logcat, приведенные выше.
Человек предоставил видео на Youtube, в котором говорится, что SoundPool работает нормально. Ссылка на видео приведена ниже. Я сделал то, что видео указало мне, чтобы кодировать, я взял тот же файл Explosion.ogg, который я получил по второй ссылке, приведенной выше. Я все еще получаю эти ошибки:
03-13 05: 17: 10.143: E / AudioTrack (3370): AudioFlinger не может создать трек, статус: -12
03-13 05: 17: 10.143: E / SoundPool (3370): Ошибка при создании AudioTrack
Я знаю, что SoundPool существует начиная с Android 1.0, на уровне API 1. Не должно быть никаких причин, чтобы SoundPool не работал, даже когда у меня есть доказательства того, что SoundPool работает (ссылка на видео, 2-я).
Это мои выводы, которые могут или не могут помочь другим хорошим способом. Короче, ты здесь не один.
Источник:
- http://code.google.com/p/beginning-android-games/source/browse/trunk/ch04-android-basics/src/com/badlogic/androidgames/SoundPoolTest.java
- http://www.youtube.com/watch?v=ioGWpu8Ud7A
РЕДАКТИРОВАТЬ: я могу воспроизводить звуки из SoundPool.
Вот мой код:
package nttu.edu.test;
import nttu.edu.R;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class SoundPoolTest extends Activity implements OnClickListener {
SoundPool soundPool = null;
int explosionId = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView v = new TextView(this);
v.setOnClickListener(this);
setContentView(v);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
v.setText("Click anywhere to play the sound.");
}
protected void onResume() {
super.onResume();
if (soundPool == null) {
soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
explosionId = soundPool.load(this, R.raw.explosion, 1);
}
}
protected void onPause() {
super.onPause();
if (soundPool != null) {
soundPool.release();
soundPool = null;
}
}
public void onClick(View v) {
if (explosionId != 0)
soundPool.play(explosionId, 1, 1, 0, 0, 1);
}
}
То, что я сделал, было рефакторингом моего кода. Я узнал этот совет из одного из комментариев в видео-ссылке на Youtube, где автор комментария называется «ErichLancaster». Все кредиты идут к нему. Я надеялся, что это помогло тебе.
Я также установил размер разрешения эмулятора Android на QVGA, если это действительно имеет значение.