[英]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 的應用程序中輕松訪問和可靠地設置它
// 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.