Как подключить Web Audio API к Tone.js? - PullRequest
0 голосов
/ 03 ноября 2019

Я использую Online Audio Player , поэтому я хочу интегрировать Pitch Shifter в мое приложение, которое доступно на Tone JS , но не в API Web Audio ...

Поэтому моя идея заключается в подключении Tonejs Pitch Shifter к audioContext API Web Audio API,

Есть ли какие-либо возможные способы?

Вот мой код для справки

var audioCtx = new (window.AudioContext || window.webkitAudioContext);

var mediaElem = document.querySelector('audio');

var stream = audioCtx.createMediaElementSource(mediaElem);

var gainNode = audioCtx.createGain();

stream.connect(gainNode);

// tone js

var context = new Tone.Context(audioCtx); // Which is Mentioned in Tonejs Docs!

var pitchShift = new Tone.PitchShift().toMaster();

pitchShift.connect(gainNode);

// Gives Error!
gainNode.connect(audioCtx.destination);

1 Ответ

1 голос
/ 03 ноября 2019

Полагаю, вы хотите получить поток сигналов, подобный следующему:

mediaElement > gainNode > pitchShift > destination

Чтобы убедиться, что Tone.js использует тот же AudioContext, вы можете назначить его с помощью установщика объекта Tone. Это необходимо сделать, прежде чем делать что-либо еще с Tone.js.

Tone.context = context;

Tone.js также экспортирует помощник, который можно использовать для подключения собственных AudioNodes к узлам, предоставленным Tone.js.

Tone.connect(gainNode, pitchShift);

Я немного изменил ваш пример кода, чтобы включить изменения.

var audioCtx = new (window.AudioContext || window.webkitAudioContext);
var mediaElem = document.querySelector('audio');
var stream = audioCtx.createMediaElementSource(mediaElem);
var gainNode = audioCtx.createGain();

// This a normal connection between to native AudioNodes.
stream.connect(gainNode);

// Set the context used by Tone.js
Tone.context = audioCtx;

var pitchShift = new Tone.PitchShift();

// Use the Tone.connect() helper to connect native AudioNodes with the nodes provided by Tone.js
Tone.connect(gainNode, pitchShift);
Tone.connect(pitchShift, audioCtx.destination);
...