在不改变音高的情况下使用Web Audio API更改音频速度

时间:2015-07-07 16:57:44

标签: javascript audio playback web-audio

是否可以使用Web Audio API更改音频的速度(以加载的MP3文件的形式)而不改变音高?

我知道AudioBufferSourceNode上的playbackRate属性,但这也会改变音高。我也了解<audio><video>元素的playbackRate属性,但我需要使用Web Audio API。

我对Web Audio API非常陌生。我有什么可以做的吗?

2 个答案:

答案 0 :(得分:8)

有一种方法可以做到这一点 - 它被称为granular synthesis(链接指向pd理论链接,但理论是普遍的)。粒度合成的想法是以原始速度采样声音,但是它以与每个采样点不同的速度播放,但是具有不改变音高的优点。

这些Github Web Audio Granular Synthesizer链接可以帮助您(第一个更好):1。Web-Audio-Granular-synthesis 2。 Another link on Github 2

WebAudio没有取得任何成功,有另一种选择;将mp3带入Audacity并以此方式更改速度,然后使用新文件! ;)

相信我,我理解你的痛苦,我花了几个星期在uni试图用pd扩展做同样的事情。走近我的头发。我的教授向我介绍了粒度合成的概念 - 节省了一天!

祝你好运!

答案 1 :(得分:0)

当前版本的WebAudio本身并没有(轻松)支持,但是可以使用Tone.js

let semitones = 3;
let source = new Tone.Player(AudioBuffer);
let shift = new Tone.PitchShift(semitones);
source.connect(shift);
shift.toMaster();
source.start();
相关问题