如何将网络音频 API 连接到 Tone.js?
How to connect Web Audio API to Tone.js?
我正在做一个在线音频播放器,所以我想在我的应用程序中集成Pitch Shifter,可以在Tone js 但不在 Web Audio API...
所以我的想法是将 Tonejs Pitch Shifter 连接到 Web Audio API 的 audioContext 。
有什么办法吗?
这是我的代码供参考
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);
我猜你想实现这样的信号流:
mediaElement > gainNode > pitchShift > destination
要确保 Tone.js 使用相同的 AudioContext,您可以通过在 Tone 对象上使用 setter 来分配它。这需要在使用 Tone.js.
做任何其他事情之前完成
Tone.context = context;
Tone.js 还导出一个助手,可用于将本机 AudioNode 连接到 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);
我正在做一个在线音频播放器,所以我想在我的应用程序中集成Pitch Shifter,可以在Tone js 但不在 Web Audio API...
所以我的想法是将 Tonejs Pitch Shifter 连接到 Web Audio API 的 audioContext 。
有什么办法吗?
这是我的代码供参考
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);
我猜你想实现这样的信号流:
mediaElement > gainNode > pitchShift > destination
要确保 Tone.js 使用相同的 AudioContext,您可以通过在 Tone 对象上使用 setter 来分配它。这需要在使用 Tone.js.
做任何其他事情之前完成Tone.context = context;
Tone.js 还导出一个助手,可用于将本机 AudioNode 连接到 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);