Как изменить высоту и скорость воспроизведения с помощью JavaScript / Tone. js? - PullRequest
1 голос
/ 06 января 2020

Я хотел бы выполнить sh две вещи одновременно:

1) изменить скорость воспроизведения звукового файла на 1/2 скорости

2) понизить высоту на пятую

Наконец, вместо использования отдельной кнопки для воспроизведения результата, я хотел бы подключить это к аудиотэгу и использовать кнопка воспроизведения там.

Ниже приведен самый близкий к этому момент, когда я использовал Tone. js. Я действительно борюсь с документацией, но я понимаю, что Tone.Transport.bpm.value = 60; изменяет удары в минуту со 120 на 60 и Tone.PitchShift транспонирует песню. Я просто не вижу, как объединить эти два, чтобы «сложить» эффекты.

Вот несколько ссылок, по которым я следовал:

Как изменить высоту звука с помощью JavaScript?

https://tonejs.github.io/docs/r12/PitchShift

https://tonejs.github.io/docs/13.8.25/Transport

Заранее спасибо за помощь!

<audio id="myAudio" controls preload="none">
      <source src="my_tune.m4a" type="audio/mp4" >
</audio>

<script src="https://unpkg.com/tone@next/build/Tone.js"></script>

<script>

Tone.Transport.bpm.value = 60;  // setting the bpm like this is not working. where to put this?


var player = new Tone.Player("my_tune.m4a").sync().start(0);
// is it possible to use audio tag instead of creating this player?

var pitchShift = new Tone.PitchShift({
    pitch: -5 // this is working and lowers pitch by a fifth
}).toMaster();

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

<script>

<button onclick="setPlaySpeed()" type="button">separate button</button><br>

1 Ответ

0 голосов
/ 05 мая 2020

ОБНОВЛЕНИЕ: РАБОЧЕЕ РЕШЕНИЕ

Я нашел способ, который работает: сначала установите скорость воспроизведения. Затем, при настройке высоты тона, необходимо рассчитать, сколько сдвига тона нужно сложить / вычесть, чтобы компенсировать скорость воспроизведения. В моем примере мне пришлось компенсировать сдвиг +12 высоты тона для скорости воспроизведения 0,5.

player = new Tone.Player("url/to/audio.mp3");
playback_rate = 0.5 // or 1 (I only implemented these two options)
transpose_by = 7 // up 7 half steps, -7 would be down 7 half steps

// set playback rate
player.playbackRate = playback_rate
player.toDestination();


// set pitch shift
if (playback_rate == 1){
    pitch_shift = new Tone.PitchShift({
    pitch: transpose_by.toString()
    }).toDestination();
} else { //if playbackrate == 0.5 add +12 to pitch to correct
    trans = transpose_by + 12
    trans = trans.toString()
    pitch_shift = new Tone.PitchShift({
    pitch: trans
  }).toDestination();
}
player.disconnect(); // disconnect old player (get overlay of two players otherwise if you repeat this)
player.connect(pitch_shift);

player.start()

Смотрите это в действии на моем сайте: https://www.lickstack.com

Я все еще Я не знаю, как подключить плеер Tone. js к аудио элементу. Любая помощь будет оценена. Смотрите мой пост здесь: создать html элемент из Tone. js object

...