【问题标题】:How to parallel process with Web Audio API如何使用 Web Audio API 进行并行处理
【发布时间】:2015-08-01 21:32:19
【问题描述】:

所以我一直在尝试通过不同的来源对同一个文件创建并行处理效果。声音工程中的并行处理本质上是当您复制信号两次并对每个信号应用不同的效果时(例如,如果我希望延迟仅在低端起作用,那么我将复制信号并添加一个较低的 biQuad boost + 然后只回显该信号,而不是原始信号)。

现在我通过不同的音频变量识别了同一个文件

var mainVerse = document.getElementById('audio1');
var mainVerseParallel = document.getElementById('audio2');

audio1 和 audio2 指向同一个源。每个文件我也有两个来源

var source = audioCtx.createMediaElementSource(mainVerse);
var source2 = audioCtx.createMediaElementSource(mainVerseParallel); 

然后我将过滤器应用到每个节点

var s = source;
var s2 = source2;

 source.disconnect(audioCtx.destination);
source2.disconnect(audioCtx.destination);

for (var i in filters1) {
 s.connect(filters1[i]);
 s = filters1[i];
}


for (var i in filters2) {
 s2.connect(filters2[i]);
 s2 = filters2[i];
}

s.connect(audioCtx.destination);
s2.connect(audioCtx.destination);

但是当我播放音频文件时:

mainVerseParallel.play();
mainVerse.play();

他们没有正确同步,我试过了;

audio.addEventListener("canplaythrough", function, false)

但每次我重新启动曲目时它都会发出不同的声音。有没有办法解决这个同步问题,或者有没有办法可以在不需要创建两个音频变量和两个源的情况下实现并行处理效果?

【问题讨论】:

    标签: javascript api audio html5-audio web-audio-api


    【解决方案1】:

    您不需要两个单独的源来拆分信号路径。

    var s = source;
    var s2 = source;
    //       ^^^^^^ NOTE: not using source2
    
    for (var i in filters1) {
        s.connect(filters1[i]);
        s = filters1[i];
    }
    
    for (var i in filters2) {
        s2.connect(filters2[i]);
        s2 = filters2[i];
    }
    
    s.connect(audioCtx.destination);
    s2.connect(audioCtx.destination);
    

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 2015-07-18
      • 2012-06-29
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多