Полагаю, вы хотите получить поток сигналов, подобный следующему:
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);