ConvolverNode 混响简单实现

web-audio api ConvolverNode 使用心得

现在网上有很多关于web-audio的资料
MDN有很多介绍MDN Web Docs如果有需要请前往查看api,这篇是关于ConvolverNode的。
ConvolverNode 接口是一个对给定 AudioBuffer 上执行线性卷积的 AudioNode,一般用来做音频混响效果。这是MDN对它的介绍。

简单介绍一下它,毕竟我也并不是很懂。

它实现的是audioNoded 接口,一输入一输出,存在两个特性

  • buffer 是一个aduioBuffer,简单来说就是创建混响效果的脉冲文件。这里需要注意的是格式要为无损音质的,例如wav、ir。有损的行不行?也不是不行,就是耳朵受不了,有专门的混响脉冲文件。
  • normalize 是一个Boolean,简单来说就是混响要不要平滑一点。

这样链接就行了

someOtherAudioNode
ConvolverNode
someOtherAudioNode

那我们怎么去实现混响呢?

首先来说,它是对于给定的AudioBuffer上执行线性卷积。
ConvolverNode.buffer它并不是我们要执行线性卷积的源,而是我们的处理卷积。当一个audioNode 接入 ConvolverNode后,输出后就是已经处理后的音频。

AudioBuffer
ConvolverNode 执行线性卷积
AudioBuffer

demo代码

// 创建源
const url = '' // 你的音频地址
const AudioCtx = new AudioContext()
const source = AudioCtx.createBufferSource()
const request = new XMLHttpRequest()
request.open('GET', url, true)
request.setRequestHeader("Accept", "*/*") 
request.responseType = 'arraybuffer'
request.onload = function () {
	   var audioData = request.response
	   AudioCtx.decodeAudioData(audioData, function (buffer) {
	      	source.buffer = buffer
	      	initConvolver()
	   },
	      	function (e) { "Error with decoding audio data" + e.err })
	  }
request.send()
// 初始化混响
function initConvolver() {
		const url = '/files/ir1.wav'
		var request = new XMLHttpRequest()
	  	request.open('GET', url, true)
	  	request.setRequestHeader("Accept", "*/*") 
	  	request.responseType = 'arraybuffer'
	  	request.onload = function () {
	    	var audioData = request.response
	    	AudioCtx.decodeAudioData(audioData, function (buffer) {
	      		convolver.buffer = buffer
	      		source.connect(convolver)
				convolver.connect(AudioCtx.destination)
	      		source.start(0)
	    	},
	      	function (e) { "Error with decoding audio data" + e.err })
	  	}
	  	request.send()
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值