繁体   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