使用 Tone.js 向现有音频流添加过滤器
Using Tone.js to add filters to an existing audio stream
我能够使用双二阶滤波器向现有音频流添加滤波器,但我有兴趣尝试使用 Tone.js。但是我在将所有内容连接在一起时遇到了问题。尝试将过滤器连接到 audioContext 时,我不断收到 DomException。
function addFilter(fq) {
var audioCtx = new (window.AudioContext || window.webkitAudioContext);
var mediaElem = document.getElementById('myAudioElement');
//Tone.context = audioCtx;
Tone.context.createMediaElementSource(mediaElem)
const bqfilter = new Tone.Filter(fq, 'lowpass').toDestination();
Tone.connect(bqfilter, audioCtx.destination);
//bqfilter.chain(audioCtx.destination)
});
当我尝试将过滤器连接或链接到 audioCtx.destination 时,错误消息只是 DomException。这似乎遵循了我在网上找到的大多数其他示例,所以我不确定为什么会抛出异常。
*编辑:包括来自开发控制台的堆栈跟踪
Uncaught DOMException Tone.js:formatted:2181
connect @ Tone.js:formatted:2181
To @ Tone.js:formatted:8710
(anonymous) @ audiocontrols:983
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
您不需要创建自己的 AudioContext
。您可以只使用 Tone.js 中的那个。事实上,这甚至是必需的。否则您自己的 AudioNode
无法连接到 Tone.js.
创建的
以下应该有效:
function addFilter(fq) {
const audioElement = document.getElementById('myAudioElement');
const mediaElementSource = Tone.context.createMediaElementSource(audioElement);
const filter = new Tone.Filter(fq, 'lowpass').toDestination();
Tone.connect(mediaElementSource, filter);
});
请注意 AudioContext
可能会被浏览器的自动播放策略阻止,如下所述:https://github.com/Tonejs/Tone.js#starting-audio。
我能够使用双二阶滤波器向现有音频流添加滤波器,但我有兴趣尝试使用 Tone.js。但是我在将所有内容连接在一起时遇到了问题。尝试将过滤器连接到 audioContext 时,我不断收到 DomException。
function addFilter(fq) {
var audioCtx = new (window.AudioContext || window.webkitAudioContext);
var mediaElem = document.getElementById('myAudioElement');
//Tone.context = audioCtx;
Tone.context.createMediaElementSource(mediaElem)
const bqfilter = new Tone.Filter(fq, 'lowpass').toDestination();
Tone.connect(bqfilter, audioCtx.destination);
//bqfilter.chain(audioCtx.destination)
});
当我尝试将过滤器连接或链接到 audioCtx.destination 时,错误消息只是 DomException。这似乎遵循了我在网上找到的大多数其他示例,所以我不确定为什么会抛出异常。
*编辑:包括来自开发控制台的堆栈跟踪
Uncaught DOMException Tone.js:formatted:2181
connect @ Tone.js:formatted:2181
To @ Tone.js:formatted:8710
(anonymous) @ audiocontrols:983
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
您不需要创建自己的 AudioContext
。您可以只使用 Tone.js 中的那个。事实上,这甚至是必需的。否则您自己的 AudioNode
无法连接到 Tone.js.
以下应该有效:
function addFilter(fq) {
const audioElement = document.getElementById('myAudioElement');
const mediaElementSource = Tone.context.createMediaElementSource(audioElement);
const filter = new Tone.Filter(fq, 'lowpass').toDestination();
Tone.connect(mediaElementSource, filter);
});
请注意 AudioContext
可能会被浏览器的自动播放策略阻止,如下所述:https://github.com/Tonejs/Tone.js#starting-audio。