Образец 1 не готов - Soundpool в Android 2.1 - PullRequest
4 голосов
/ 02 марта 2012

ребята, у меня есть аудиофайл, который я читаю с sdcard it.Нажимая кнопку, я проигрываю аудиофайл с sdcard. Он успешно воспроизводит аудиофайл от 6 до 7 раз, но после этого показывает unable to load (null) sample 1 not ready

Я работаю в Android 2.1, т.е. API 7.

String path="/sdcard/var/audio.mp3"

sound1 = mSoundPool.load(path,1);
mSoundPool.play(sound1, 1, 1, 1, time - 1, 1);

Что такое Soundpool указывает на то, что я не могу загрузить (нулевой) семпл 1 не готов? Как я могу это исправить, пожалуйста, помогите мне, я борюсь за долгое время.

Ответы [ 4 ]

8 голосов
/ 30 мая 2012

У меня была похожая проблема с файлом WAV.Давайте начнем отбрасывать некоторые вещи:

Это не проблема ожидания, хотя это может быть в других случаях.Обратите внимание, что вы опубликовали два РАЗНЫХ сообщения об ошибке, вроде одного:

  1. невозможно загрузить (ноль)
  2. образец 1 не готов

Первая ошибка возникает при попытке загрузить семпл в SoundPool, вторая - при попытке его воспроизвести.Но в этом случае вторая ошибка явно является следствием первой: образец не может быть готов, если он не был загружен.

Поэтому вам следует сосредоточиться раньше на первой ошибке.

Это не относится и к MediaPlayer, так как вы используете SoundPool, который отличается от AFAIK.

Таким образом, источником проблемы может быть, и ее следует исключить по порядку:

  1. Файл не существует.
  2. Файл существует, но по какой-то причине он не доступен для чтения.
  3. Файл существует и доступен для чтения, но он поврежден илине аудиофайл.
  4. Файл существует, и его можно прочитать, и это не поврежденный аудиофайл, но SoundPool его не любит.

Это последний случай, который был у меня.По какой-то причине SoundPool не смог загрузить wav-сэмпл, который на самом деле работает в любом другом плеере, который я использовал.Поэтому я просто прекратил использовать другой файл с другим форматом.Вот формат файла-нарушителя, как говорит mplayer на моем компьютере GNU / LiNUX:

Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 96000 Hz, 1 ch, s16le, 1536.0 kbit/100.00% (ratio: 192000->192000)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)

А вот этот файл для другого файла работает:

Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 22050 Hz, 2 ch, s16le, 705.6 kbit/100.00% (ratio: 88200->88200)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)

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

Почему это не сработало в первом случае?Кто знает, но если я могу решить это так просто ... кого это волнует?

С уважением,

1 голос
/ 08 февраля 2013

Вам необходимо проверить, успешно ли загружен файл, прежде чем воспроизводить его, используя SoundPool.setOnLoadCompleteListener

public void loadSound (String strSound, int stream) {
     boolean loaded = false;
     mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId,
                    int status) {
                mSoundPool.play(stream, streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);
            }
        });
    try {
          stream= mSoundPool.load(aMan.openFd(strSound), 1);
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
0 голосов
/ 02 марта 2012

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

0 голосов
/ 02 марта 2012

Вы пытались вызвать mediaplayer.release () и выполнить повторную инициализацию?также http://developer.android.com/reference/android/media/MediaPlayer.html

...