首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScriptProcessorNode的唯一立体声输入

ScriptProcessorNode的唯一立体声输入
EN

Stack Overflow用户
提问于 2014-10-16 21:25:20
回答 1查看 531关注 0票数 2

我希望在Web中实现音频效果,这需要连续访问两个或多个音频流。

我可以定义一个具有两个输入通道和两个输出通道的脚本处理器:

代码语言:javascript
复制
var mod = context.createScriptProcessor(4096,2,2);

然后,我可以将几个正弦波连接到这个处理器:

代码语言:javascript
复制
mySine.connect(mod);
mySine2.connect(mod);

有没有办法将它们连接到音频处理器的特定输入通道?

最后,当我编写onaudioprocess函数并单独听每个输入通道时,每个输入通道都包含所有的--连接到处理器的声音。在音频处理功能中,我无法单独访问每个正弦波。这是正确的吗?还是有办法将声音连接到脚本处理器的单个输入通道?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-17 09:12:22

您可以创建两个相同的单通道ScriptProcessors,也可以使用信道合并将两个正弦波分配给脚本处理器的每个通道,如下所示:

代码语言:javascript
复制
var context = new AudioContext();   

var sineA = context.createOscillator();
sineA.type = 'sine';
sineA.frequency.value = 300;

var sineB = context.createOscillator();
sineB.type = 'sine';
sineB.frequency.value = 100;

var script = context.createScriptProcessor(4096, 2, 2);

// create 2 channel merger node
var merger = context.createChannelMerger(2);

// connect sineA to channel 0
sineA.connect(merger, 0, 0);

// connect sineA to channel 1
sineB.connect(merger, 0, 1);

// connect the script to the merger
merger.connect(script);

// process the audio data of each channel
script.onaudioprocess = function(event) {
  var input = event.inputBuffer;
  var output = event.outputBuffer;
  var inputA = input.getChannelData(0);
  var inputB = input.getChannelData(1);
  var outputA = output.getChannelData(0);
  var outputB = output.getChannelData(1);
  
  for (var i = 0; i < input.length; i++) {
    outputA[i] = inputA[i];
    outputB[i] = inputB[i];
  }
}

script.connect(context.destination);

sineA.start();
sineB.start();

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26414160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档