最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

html - How to change audio pitch with JavaScript? - Stack Overflow

programmeradmin2浏览0评论

Let’s say you have an audio variable called audio and it stores a sound.

I know how to change the speed for example:

audio.playBackRate = 2; 

But I don't know how to change the pitch, without changing the speed.

Is there an audio.pitch attribute or do I have to create it myself?

I want to do something like this:

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

Let’s say you have an audio variable called audio and it stores a sound.

I know how to change the speed for example:

audio.playBackRate = 2; 

But I don't know how to change the pitch, without changing the speed.

Is there an audio.pitch attribute or do I have to create it myself?

I want to do something like this:

var audio = new Audio();
audio.src = "sound_effect.wav";
audio.pitch = 2 //doubling the pitch but there is no pitch attribute
audio.play();
Share Improve this question edited Mar 28 at 14:36 ggorlen 57.9k8 gold badges114 silver badges157 bronze badges asked Dec 20, 2018 at 22:12 chipmunkpassionchipmunkpassion 911 silver badge2 bronze badges 1
  • There is this answer that changes the pitch but I’m not sure if it’s what you want. It is SignatureSmileyFaceProductions answer on this link: stackoverflow./a/49749868/10424104 – Lloyd Nicholson Commented Dec 21, 2018 at 9:45
Add a ment  | 

2 Answers 2

Reset to default 3

Tone's API appears to have changed somewhat since this answer. Here's code that reflects the latest version (as of 2024):

const url = "https://upload.wikimedia/wikipedia/mons/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./[email protected]/build/Tone.js"></script>
<button>Play</button>

I think you need to use a library to apply pitch shifting to your audio signal. You could use the Tone.js PitchShift. See this JSFiddle of GitHub user Jexim for a working example. I copy-pasted the most importand parts from this fiddle below:

Javascript:

var player = new Tone.Player("http://example./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./tone@next/build/Tone.js"></script>
<button onclick="play()">Play</button>
发布评论

评论列表(0)

  1. 暂无评论