簡體   English   中英

在 Exoplayer 中更改播放速度

[英]Changing playback speed in Exoplayer

我希望實現一個具有變速播放(1.0x、1.25x、1.5x)的音頻播放器,就像目前市場上的典型有聲讀物播放器一樣。 我想使用 Google 的 Exoplayer 庫作為我的音頻播放器庫,但它們似乎不支持變速播放。 關於如何實現這一點的任何想法,或支持這一點的任何擴展?

函數setPlaybackSpeed()已刪除,現在您可以通過以下方式設置播放速度:

    PlaybackParameters param = new PlaybackParameters(speed);
    mExoPlayer.setPlaybackParameters(param);

speed是一個浮點數。 正常速度是1f ,兩倍的速度是2f

您只需要https://github.com/waywardgeek/sonic/blob/master/Sonic.java

如果您查看MediaCodecAudioTrackRenderer.java ,您可以在方法processOutputBuffer 中從 ExoPlayer 獲取輸出緩沖區(由 MediaCodec 解碼),並在將其發送到AudioTrack之前相應地通過Sonic.java對其進行處理

以下文檔解釋了如何使用 libsonic https://github.com/waywardgeek/sonic/blob/master/doc/index.md

Kotlin 擴展解決方案

在 Kotlin 的應用程序中輕松訪問和可靠地設置它

// To set
player.playbackSpeed = 2f

var SimpleExoPlayer.playbackSpeed: Float
    get() = playbackParameters?.speed ?: 1f
    set(speed) {
        val pitch = playbackParameters?.pitch ?: 1f
        playbackParameters = PlaybackParameters(speed, pitch)
    }

嘗試這個

我遵循了所有的答案沒有任何效果,所以我嘗試了以下解決方案,它對我有用

PlaybackParams param = new PlaybackParams();
param.setSpeed(1f);// 1f is 1x, 2f is 2x 
exoPlayer.setPlaybackParams(param);

在 Exoplayer 2.14.0 版中

像這樣直接傳遞浮點值。

simpleExoPlayer?.setPlaybackSpeed(1.0f)

你應該看看這個項目,它對我很有用: https : //github.com/AmrMohammed89/exoplayer2.4.0_speedup

在 SimpleExoPlayer 中,我實現了以下方法:

 private final ExoPlayer player;
private float playbackSpeed;

float SPEED_NORMAL = 1f;
float SPEED_MEDIUM = 1.5f;
float SPEED_HIGH = 2f;


 @Override
public float getPlaybackSpeed() {
    return playbackSpeed;
}

@Override
public void setPlaybackSpeed(float speed) {
    playbackSpeed = speed;
    player.setPlaybackSpeed(speed);
}

@Override
public void changePlaybackSpeed() {
    if (playbackSpeed == SPEED_MEDIUM) {
        player.setPlaybackSpeed(SPEED_HIGH);
        playbackSpeed = SPEED_HIGH;
    } else if (playbackSpeed == SPEED_HIGH) {
        player.setPlaybackSpeed(SPEED_NORMAL);
        playbackSpeed = SPEED_NORMAL;
    } else {
        player.setPlaybackSpeed(SPEED_MEDIUM);
        playbackSpeed = SPEED_MEDIUM;
    }
}

由於在嘗試獲取上次保存的速度時出現錯誤,因此我以這種方式設置並保存了速度。 因此,遵循該機制,它將完美運行。

干杯

暫無
暫無

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

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