簡體   English   中英

為何MediaPlayer延遲播放mp3音頻?

[英]android - Why MediaPlayer delayes in playing mp3 audio?

我制作了一個小應用程序,使用MediaPlayer在android中練習音頻播放,該應用程序很好用,但單擊播放按鈕后有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建議檢查一下。

Android操作系統中存在音頻延遲問題。 錄音和播放音頻時會延遲幾毫秒。 您可以通過以下URL來了解更多信息。 而此延遲與設備類型有關。

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

您可以使用本機工具箱或本機程序(基於C,C ++ ndk)來最小化此延遲。 但是您不能將其減少到0秒。 僅最大程度地減少延遲。

https://superpowered.com/superpowered-android-media-server 您可以從中獲得支持,但據我所知您需要為此付費。 我沒有嘗試。 因此,我不知道它減少了多少延遲。


如果要從mp3中刪除無聲部分。 您可以使用ffmpeg包裝器。 轉到https://github.com/WritingMinds/ffmpeg-android-java鏈接,那里有適用於Android的ffmpeg包裝器。 您可以輕松使用它。

將FFMPEG與silencedetect一起使用以消除音頻靜默 ,可以通過導航到它找到相關的FFmpeg命令。

在包裝中,您不需要ffmpeg部分。 您需要從-y替換它。 導航到該包裝器時可以獲得這些詳細信息

您的歌曲在開始時有一個靜默的暫停;)

如@Lucefer所述,由於音頻堆棧的實現,Android平台具有一些不可避免的小延遲 或者,至少在幾年前,還不確定當前的狀況。 無論如何,該延遲通常太小(〜10ms),無法在音頻文件的開頭注意到。 它與模擬樂器等的應用程序的響應時間有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM