是否可以使用Web Audio API更改音频的速度(以加载的MP3文件的形式)而不改变音高?
我知道AudioBufferSourceNode上的playbackRate属性,但这也会改变音高。我也了解<audio>
和<video>
元素的playbackRate属性,但我需要使用Web Audio API。
我对Web Audio API非常陌生。我有什么可以做的吗?
答案 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();