Soundpool воспроизводит только первые 5 секунд файла. Зачем? - программирование
Подтвердить что ты не робот

Soundpool воспроизводит только первые 5 секунд файла. Зачем?

Я использую Soundpool в своем приложении, пока он работает хорошо, но у меня есть wav файл, который составляет 10 секунд. К сожалению, soundpool играет только первые 5 секунд. Как заставить soundpool играть весь трек? Я преобразовал wav в - ogg и mp3 по-прежнему та же проблема. Он воспроизводит только первые 5 секунд. Любая помощь будет высоко оценена.

//set up audio player
mSoundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
//load fx
mSoundPoolMap.put(RAW_1_1, mSoundPool.load(this, R.raw.loop1, 1));
//playing soundpool
case R.id.button1:          
mSoundPool.stop(mStream1);
mStream1= mSoundPool.play(mSoundPoolMap.get(RAW_1_1), streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);

UPD Last: Может быть, кто-то найдет его здесь и прочитает. Кажется, звук не может играть более 5 секунд. Это его максимум, поскольку более длинные звуки используют MediaPlayer. Надеюсь, вы не потратите так много времени, как я.)

4b9b3361

Ответ 1

Итак, я думаю, что вы достигли предела 1M в SoundPool.

SoundPool - это жесткий код, размер буфера которого равен 1M, для всего загруженного файла, хранить в формате pcm.

Так что это не волнует ogg или wav.

Ответ 2

Мы решили подобную проблему, уменьшив нашу частоту выборки *.ogg. Наша начальная частота дискретизации составляла 44 кГц ~ и воспроизводилось всего 10 секунд, уменьшая до 16 кГц увеличение воспроизводимости до 30 секунд.

Решение было найдено в этом обсуждении

Ответ 3

SoundPool предназначен для воспроизведения коротких звуковых эффектов. Для воспроизведения музыки (больших аудиофайлов) вам необходимо использовать MediaPlayer

// R.raw.audio_file - res/raw/audio_file.mp3

mediaPlayer = MediaPlayer.create(this, R.raw.audio_file);
mediaPlayer.start();

Ответ 4

Эта работа работает для меня

public class MainActivity extends Activity {

    private Integer soundID;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        // Load the sound
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        float actualVolume = (float) audioManager
            .getStreamVolume(AudioManager.STREAM_MUSIC);
        float maxVolume = (float) audioManager
            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        final float volume = actualVolume / maxVolume;

        SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

        soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
          @Override
          public void onLoadComplete(SoundPool soundPool, int sampleId,
              int status) {
                      @Override
      public void onLoadComplete(SoundPool soundPool, int sampleId,
          int status) {
          soundPool.play(soundID, volume, volume, 1, 0, 1f);
          try {
            Thread.sleep(5000); // play twice
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          soundPool.play(soundID, volume, volume, 1, 0, 1f);
      }
    });
          }
        });
        soundID = soundPool.load(this, R.raw.sound2, 1);
      //load fx
      //playing soundpool

    }
}

Вы должны загрузить звуковую асинхронность и проверить аудио кеш - это может быть переполнение.

Прочтите эту статью  http://www.google.by/url?http://www.vogella.com/articles/AndroidMedia/article.html

Его очень внимательный

Ответ 5

Возможно, ваш файл слишком большой. Попытайтесь перейти от стерео к моно, если вам вообще не нужна стереосистема. Или попробуйте уменьшить ваш файл.

Сокращение файлов в моем случае.