Почему MediaPlayer задерживается при воспроизведении аудио в формате mp3? - PullRequest
0 голосов
/ 02 ноября 2018

Я сделал небольшое приложение для тренировки воспроизведения звука в Android с помощью MediaPlayer, приложение прекрасно работает, но после нажатия кнопки воспроизведения есть небольшая задержка в 1 секунду, и это заметно, я заметил, что это происходит только при запуске аудио файла, когда пауза возобновляется немедленно без задержки, я гуглюсь и вижу, что люди предлагают использовать SoundPool вместо MediaPlayer, но SoundPool рекомендуется для коротких аудиоклипов, когда мое приложение воспроизводит полную песню, в чем причина этой задержки? Есть ли исправление или решение этой проблемы?

Вот мой код:

приватный MediaPlayer mMediaPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mMediaPlayer = MediaPlayer.create(this,R.raw.this_is_america);

    Button btnPlay = findViewById(R.id.btnPlay);
    Button btnPause = findViewById(R.id.btnPause);
    Button btnStop = findViewById(R.id.btnStop);
    btnPlay.setOnClickListener(this);
    btnPause.setOnClickListener(this);
    btnStop.setOnClickListener(this);
}

@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.btnPlay:

            Toast.makeText(getApplicationContext(), "Playing song",
                    Toast.LENGTH_SHORT).show();


           mMediaPlayer.start();

            break;

        case R.id.btnPause:

            Toast.makeText(getApplicationContext(), "Pausing song",
                    Toast.LENGTH_SHORT).show();

            mMediaPlayer.pause();
            break;

        case R.id.btnStop:

            Toast.makeText(getApplicationContext(), "Song stopped",
                    Toast.LENGTH_SHORT).show();

          mMediaPlayer.reset();
          mMediaPlayer = MediaPlayer.create(this,R.raw.this_is_america);
            break;
    }

}

Обновление: оказалось, что аудиофайл mp3 вначале имел тихую паузу, попробовал другую песню, и она работает нормально, без заметных задержек, спасибо greeble31 за предложение проверить это.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

У вашей песни в начале тихая пауза;)

Как упомянул @Lucefer, платформа Android имеет некоторую небольшую неизбежную задержку благодаря реализации стека аудио. Или, по крайней мере, несколько лет назад, не уверен, каково текущее положение дел. В любом случае, эта задержка обычно слишком мала (~ 10 мс), чтобы ее можно было заметить в начале аудиофайла; это больше связано с временем отклика для приложений, которые имитируют музыкальные инструменты и тому подобное.

0 голосов
/ 03 ноября 2018

Существует проблема задержки звука в операционной системе Android. При записи аудио и воспроизведении аудио происходит задержка в несколько миллисекунд. Вы можете узнать больше об этом, перейдя по ссылкам ниже. И эта задержка связана с типами устройств.

https://developer.android.com/ndk/guides/audio/audio-latency https://source.android.com/devices/audio/latency/measurements

Вы можете использовать собственный набор инструментов или собственную программу (C, C ++ ndk base), чтобы минимизировать эту задержку. Но вы не можете уменьшить его до 0 секунд. только минимизировать задержку.

Есть https://superpowered.com/superpowered-android-media-server. Вы можете получить поддержку от этого, но, как я знаю, вам нужно заплатить за это. Я не пробовал это. Поэтому я не знаю, насколько это уменьшило время ожидания.


Если вы хотите удалить тихую часть из вашего mp3. Вы можете использовать ffmpeg обертку для этого. Перейдите по ссылке https://github.com/WritingMinds/ffmpeg-android-java там есть работающая обёртка ffmpeg для Android. Вы можете легко использовать его.

с использованием FFMPEG с функцией silencedetect для удаления звука тишины вы можете найти соответствующую команду FFmpeg для него, перейдя к этому.

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

...