当前位置: 首页 > 编程笔记 >

web-audio 实时更改两个音频源

长孙景焕
2023-03-14
本文向大家介绍web-audio 实时更改两个音频源,包括了web-audio 实时更改两个音频源的使用技巧和注意事项,需要的朋友参考一下

例子

本示例说明了如何使用两个音频源,以及如何基于另一个来更改它们。在这种情况下,我们将创建一个音频Ducker,如果次要轨道产生声音,它将降低主要轨道的音量。

ScriptProcessorNode将常规事件发送到其audioprocess处理程序。在链接到辅助音频源的此处理程序中,我们计算音频的“响度”,并使用它来更改主要音频源上的动态压缩器。然后将两者都发送到用户的扬声器/耳机。当在辅助音频轨道中检测到声音时,结果是主要音频轨道中的音量非常突然变化。我们可以通过使用平均值,并使用延迟线在检测到次要音频之前更改音量来使此过程更加平滑,但是在此示例中,该过程应该很清楚。

//当次要来源产生声音时,DuckingNode将严重压缩主要来源
class DuckingNode {
  constructor(context) {
    let blocksize = 2048;
    let normalThreshold = -50;
    let duckThreshold = 0.15;
  
    //创建节点
   this.compressor= context.createDynamicsCompressor();
   this.processor= context.createScriptProcessor(blocksize, 2, 2);
    
    //配置节点
    this.compressor.threshold.value = normalThreshold;
    this.compressor.knee.value = 0;
    this.compressor.ratio.value = 12;
    this.compressor.reduction.value = -20;
    this.compressor.attack.value = 0;
    this.compressor.release.value = 1.5;
    
    let self = this;
    this.processor.onaudioprocess = function(audioProcessingEvent) {
      let inputBuffer = audioProcessingEvent.inputBuffer;
      let outputBuffer = audioProcessingEvent.outputBuffer;
      let rms;
      let total = 0.0;
      let len = blocksize * outputBuffer.numberOfChannels;

      for (let channel = 0; channel < outputBuffer.numberOfChannels; channel++) {
        let inputData = inputBuffer.getChannelData(channel);
        let outputData = outputBuffer.getChannelData(channel);

        for (let sample = 0; sample < inputBuffer.length; sample++) {
          // 使输出等于输入
          outputData[sample] = inputData[sample];
          total += Math.abs(inputData[sample]);
        }
      }
      
      //均方根
      rms = Math.sqrt( total / len );

      //我们将阈值至少设置为“ normalThreshold”
      self.compressor.threshold.value = normalThreshold + Math.min(rms - duckThreshold, 0) * 5 * normalThreshold;
    }
  }
  
  get primaryInput () {
    return this.compressor;
  }
  
  get secondaryInput () {
    return this.processor;
  }
  
  connectPrimary(node) {
    this.compressor.connect(node);
  }
  
  connectSecondary(node) {
    this.processor.connect(node);
  }
};
let audioContext = new (window.AudioContext || window.webkitAudioContext)();

//Select two <audio> elements on the page. Ideally they have the autoplay attribute
let musicElement = document.getElementById("music");
let voiceoverElement = document.getElementById("voiceover");

//我们从它们创建源节点
let musicSourceNode = audioContext.createMediaElementSource(musicElement);
let voiceoverSourceNode = audioContext.createMediaElementSource(voiceoverElement);

let duckingNode = new DuckingNode(audioContext);

//连接一切
musicSourceNode.connect(duckingNode.primaryInput);
voiceoverSourceNode.connect(duckingNode.secondaryInput);
duckingNode.connectPrimary(audioContext.destination);
duckingNode.connectSecondary(audioContext.destination);

该示例的一部分来自Kevin Ennis的回答以及mdn上的代码。

 类似资料:
  • 本文向大家介绍web-audio 播放音频,包括了web-audio 播放音频的使用技巧和注意事项,需要的朋友参考一下 示例 要使用Web Audio API播放音频,我们需要获取音频数据的ArrayBuffer并将其传递给BufferSource进行播放。 要获得播放声音的音频缓冲区,您需要使用如下AudioContext.decodeAudioData方法: 最终承诺解决后,系统会以的形式为您

  • 本文向大家介绍web-audio 合成音频,包括了web-audio 合成音频的使用技巧和注意事项,需要的朋友参考一下 示例 在此示例中,我们展示了如何生成一个简单的正弦波,并将其输出到用户的扬声器/耳机上。 上面的变量的start和stop方法sourceNode都有一个可选参数when,用于指定启动或停止之前要等待的秒数。 因此,停止声音的另一种方法是: type可以将振荡器节点的参数设置为以

  • 主要内容:问题以及解决方法,使用插件,使用 <embed> 元素,实例,使用 <object> 元素,实例,使用 HTML5 <audio> 元素,实例,最好的 HTML 解决方法,实例,使用超链接,实例,内联的声音说明,HTML 多媒体标签声音在HTML中可以以不同的方式播放. 问题以及解决方法 在 HTML 中播放音频并不容易! 您需要谙熟大量技巧,以确保您的音频文件在所有浏览器中(Internet Explorer, Chrome, Firefox, Safari, Opera)和所有硬件

  • 主要内容:互联网上的音频,浏览器支持,HTML5 Audio - 如何工作,实例,音频格式及浏览器支持,音频格式的MIME类型,HTML5 Audio 标签HTML5 提供了播放音频文件的标准。 互联网上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准。 今天,大多数音频是通过插件(比如 Flash)来播放的。然而,并非所有浏览器都拥有同样的插件。 HTML5 规定了在网页上嵌入音频元素的标准,即使用 <audio> 元素。 浏览器支持 Internet Explorer 9+, Fir

  • 声音在HTML中可以以不同的方式播放. 问题以及解决方法 在 HTML 中播放音频并不容易! 您需要谙熟大量技巧,以确保您的音频文件在所有浏览器中(Internet Explorer, Chrome, Firefox, Safari, Opera)和所有硬件上(PC, Mac , iPad, iPhone)都能够播放。 在本章,本站为您总结了问题和解决方法。 使用插件 浏览器插件是一种扩展浏览器标

  • HTML5 提供了播放音频文件的标准。 互联网上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准。 今天,大多数音频是通过插件(比如 Flash)来播放的。然而,并非所有浏览器都拥有同样的插件。 HTML5 规定了在网页上嵌入音频元素的标准,即使用 <audio> 元素。 浏览器支持 Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safar