Ответ 1
ОСНОВНАЯ РЕДАКТИЗАЦИЯ: НАЙДЕН ПУТЬ, ЧТОБЫ ЗАПРЕЩАЕТ ВАШ ДЕНЬ! SCROLL DOWN НИЖЕ!
Я нахожусь в одной лодке с тобой. Прежде чем читать, я должен сообщить вам, что я не смог дать ответ, который может решить эту проблему.
Я видел много, много вопросов в отношении SoundPool, но я не видел много проблем SoundPool с этим в отношении кода Java из книги Android:
AudioTrack: AudioFlinger не смог создать трек, статус -12.
SoundPool: Ошибка при создании AudioTrack.
Здесь код, который вырезал из Начального исходного кода Android 4, представленного здесь (см. ниже). Вы получаете файл explosion.ogg(в багажнике, найдите папку /asset в главе 4 - Основы Android). Чтобы получить файл, вам нужно щелкнуть "Просмотр необработанного файла" справа.
Все, что я делал, это то, что я скопировал исходный код непосредственно в Eclipse и добавил файл expl.ogg из сундука в свой проект. Я выполнил Android-эмулятор, попытался воспроизвести файл, и могу сказать, что у меня все еще есть те же ошибки Logcat, которые были указаны выше.
Человек предоставил видео на Youtube, в котором говорится, что SoundPool работает нормально. Видео ссылка приведена ниже. Я сделал то, что видео проинструктировал меня кодировать, я схватил тот же самый файл взрыва .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 работает (ссылка на видео, вторая).
Это мои выводы и могут или не могут помочь другим в хорошем смысле. Короче говоря, вы не одиноки здесь.
Источник:
- 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
EDIT: я могу воспроизводить звуки из 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, если это действительно имеет значение или нет.