【问题标题】:How to change the pitch with JavaScript?如何用 JavaScript 改变音高?
【发布时间】:2019-05-21 10:51:09
【问题描述】:

假设您有一个名为audio 的音频变量,它存储了一个声音。

我知道如何改变速度例如:

audio.playBackRate = 2; 

但我不知道如何改变音高。

是否有audio.pitch 属性或者我必须自己创建它?

我想做这样的事情:

var audio = new Audio();
audio.src = "sound_effect.wav";
audio.pitch = 2 //doubling the pitch but there is no pitch attribute
audio.play();

【问题讨论】:

  • 顺便说一句,我想在不改变速度的情况下改变音高。
  • 有这个答案可以改变音高,但我不确定它是否是你想要的。这是此链接上的 SignatureSmileyFaceProductions 答案:stackoverflow.com/a/49749868/10424104

标签: javascript html audio pitch


【解决方案1】:

我认为您需要使用库将pitch shifting 应用于您的音频信号。您可以使用Tone.js PitchShift。有关工作示例,请参阅 GitHub 用户 Jexim 的 this JSFiddle。我从下面这个小提琴中复制粘贴了最重要的部分:

Javascript:

var player = new Tone.Player("http://example.com/my-audiofile.mp3").sync().start(0);

var pitchShift = new Tone.PitchShift({
    pitch: -5
}).toMaster();

player.connect(pitchShift);

Tone.Buffer.on('load', () => {
    alert('Ready for play');
});

window.play = function() {
    Tone.Transport.start();
}

HTML

<script src="https://unpkg.com/tone@next/build/Tone.js"></script>
<button onclick="play()">Play</button>

【讨论】:

  • 感谢您提供此信息。有没有办法在不点击播放按钮的情况下播放这个?
  • 您可以将Tone.Buffer.on('load', ...)中的代码替换为Tone.Buffer.on('load', () =&gt; { Tone.Transport.start(); });,无需用户交互即可播放。
  • JSFiddle 链接中音频文件的链接已损坏
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
相关资源
最近更新 更多