如何在Web Audio API

时间:2018-02-08 04:14:52

标签: typescript audio web web-audio web-audio-api

我对Web Audio API很陌生,我试图改变声音的播放速率而不必停止/暂停它。目前,这段代码工作(TypeScript): 我加载声音如下:

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);
        },
        () => { },
        () => { });

}

然后我改变playbackRate的每一帧都是这样的:

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

但它没有我想要的那么流动,因为它每帧都不断剪裁样本。

我希望在改变播放速率时连续播放声音,例如this engine sound

2 个答案:

答案 0 :(得分:0)

您可以使用SoundTouchJS。文档有点杂乱无章,因此您必须查看源,但是您可以调整“ rate”属性,以减慢/加快音频源节点的播放速度。在用户界面中提供滑块或其他内容,并将其值附加到onChange事件中的'rate'属性。

答案 1 :(得分:0)

ThreeJS文档包含:Audio.setPlaybackRate(),它完全可以满足您的需求!

(它非常平滑,我刚刚测试过的声音没有剪裁)