如何在Web音频API中动态更改播放率



我是Web音频API的新手,我正在尝试更改声音的播放率,而不必停止/暂停。当前,此代码作品(打字稿(:我加载了这样的声音:

private init(): void {
    const tmpLoop: Audio = this.engineLoop = new Audio(this.cameraManager.listener);
    const idleLoader: AudioLoader = new AudioLoader();
    idleLoader.load("../../assets/sounds/engine.ogg",
        (buffer: AudioBuffer) => {
            tmpLoop.setBuffer(buffer);
            tmpLoop.setLoop(true);
            tmpLoop.setVolume(0.5);
        },
        () => { },
        () => { });
}

然后我更改这样的播放架:

public modifyPlayBackSpeed(rpm: number): void {
    if(rpm > 800)
    {
        this.engineLoop.pause();
        this.engineLoop.playbackRate = (2/4700)*(rpm-800)+1;
        this.engineLoop.play();
    }

,但它远不及我想要的流畅,因为它会一直在每个框架上剪裁样品。

我希望声音在更改播放速度时连续播放,例如此引擎声音。

您可以为此使用SoundTouchj。文档有点少,因此您必须查看源,但是您可以调整一个"速率"属性,可以减慢/加速音频源节点的播放率。在UI中提供滑块或其他内容,并将其值附加到Onchange事件中的"费率"属性。

threethjs doc包含:audio.setplaybackrate((,它正是您需要的!

(而且很光滑,我没有从我刚刚测试的内容中删除(

最新更新