我对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。
答案 0 :(得分:0)
您可以使用SoundTouchJS。文档有点杂乱无章,因此您必须查看源,但是您可以调整“ rate”属性,以减慢/加快音频源节点的播放速度。在用户界面中提供滑块或其他内容,并将其值附加到onChange事件中的'rate'属性。
答案 1 :(得分:0)
ThreeJS文档包含:Audio.setPlaybackRate(),它完全可以满足您的需求!
(它非常平滑,我刚刚测试过的声音没有剪裁)