如何使用JavaScript改变音高?

6

假设你有一个名为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();

顺便说一下,我想在不改变速度的情况下改变音调。 - chipmunkpassion
这里有一个能够改变音高的答案,但我不确定它是否符合您的要求。这个答案来自SignatureSmileyFaceProductions在这个链接中的回答:https://dev59.com/r18e5IYBdhLWcg3w_-dM#49749868 - Lloyd Nicholson
2个回答

0

this answer以来,Tone的API似乎有所更改。以下是反映最新版本(截至2022年)的代码:

const url = "https://upload.wikimedia.org/wikipedia/commons/9/90/De-Wolfgang_Amadeus_Mozart.ogg"; // use any valid audio file if this disappears over time...

const btn = document.querySelector("button");
btn.addEventListener("click", async () => {
  await Tone.start();
  const player = new Tone.Player({
    url,
    loop: true,
    autostart: false,
  });
  await Tone.loaded();
  const pitchShift = new Tone
    .PitchShift({pitch: -8})
    .toDestination()
  ;
  player.connect(pitchShift);
  player.start();
});
<script src="https://unpkg.com/tone@14.7.77/build/Tone.js"></script>
<button>Play</button>


0

我认为你需要使用一个库来对你的音频信号应用音高变换。你可以使用Tone.js PitchShift。请参考GitHub用户Jexim的这个JSFiddle,其中有一个可工作的示例。我从这个fiddle中复制粘贴了最重要的部分如下:

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>

谢谢您提供的信息。有没有一种方法可以在不点击播放按钮的情况下播放它? - chipmunkpassion
1
你可以将Tone.Buffer.on('load', ...)中的代码替换为Tone.Buffer.on('load', () => { Tone.Transport.start(); });,这样即可在没有用户交互的情况下播放它。 - Marius
1
JSFiddle链接中的音频文件链接已经失效。 - Andre Ravazzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接