Подтвердить что ты не робот

AudioTrack, SoundPool или MediaPlayer, которым я должен пользоваться?

Мне нужно воспроизвести несколько аудиофайлов с разной продолжительностью, например, от 5 до 30 секунд. И я хочу установить громкость независимо для правого/левого канала, а также применять эффекты, такие как реверберация или искажение. Итак, какой API я должен использовать?

Кроме того, я не могу найти слишком много документов в AudioTrack API. Вы знаете, где я могу найти примеры? спасибо.

4b9b3361

Ответ 1

Звуковой пул - фактически аудиомикшер. Он может воспроизводить короткие клипы только независимо от того, закодированы ли они как ogg или mp3 или они несжаты. Звуковой пул всегда хранит их в памяти несжатыми, и вы должны знать, что ограничение составляет 1 МБ. Если ваш клип слишком большой в памяти, звуковой пул будет молчать, и вы найдете следующую ошибку: "AudioFlinger не смог создать трек. Status: -12" Медиаплеер воспроизводит поток и декодирует его в режиме реального времени. Таким образом, он может воспроизводить гораздо более длинные клипы, но для этого требуется мощность процессора.

Итак, медиаплеер лучше подходит для фоновой музыки, в то время как звуковой пул лучше форсирует короткие звуковые эффекты (клики, взрывы, звуковые петли). Кроме того, звуковой пул может одновременно воспроизводить больше клипов, а также регулировать громкость и скорость. Также он может воспроизводить циклы.

Одна нота: вы не можете воспроизводить музыку из звукового пула, если клип не полностью загружен и декодирован. Поэтому вы должны использовать OnLoadCompleteListener (Android 10 или выше), чтобы проверить его. Если вы попытаетесь воспроизвести звук до его декодирования, звуковой пул будет отключен.

Медиаплеер не страдает от этих проблем.

Ответ 3

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

Однако SoundPool не имеет такой проблемы, и я также заметил, что SoundPool воспроизводит звук только тогда, когда он вызывается (иногда я заметил небольшую задержку, когда использовал MediaPlayer).

Я думаю, что это (часть) причина, почему люди говорят, что SoundPool лучше подходит для коротких звуков, например, в играх. Надеюсь, это поможет:)