Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

AudioAPI WaveShaper节点

  AudioAPI中提供了WaveShaper节点,它用于对音频波形做一些非线性的变换。在它的属性中可以设置一条曲线,以一个Float32Array类型的强类型数组作为一组曲线的表数据来设置。普通情况下这条线是一条直线,这条线上拥有和数据块大小一样多的点。
  下面这个代码就是普通情况,它几乎不影响音乐的播放效果。
<script>
var AudioContext=AudioContext||webkitAudioContext;
var context=new AudioContext;
//加载媒体
var audio=new Audio("SuperMario.mp3");
//创建节点
var shaper=context.createWaveShaper();
var source=context.createMediaElementSource(audio);
//初始化shaper
var s=[],l=2048,i;
for(i=0;i<=l;i++)s.push(i/l*2-1);
shaper.curve=new Float32Array(s);
shaper.connect(context.destination);
//连接:source → shaper → denstination
source.connect(shaper);
shaper.connect(context.destination);
//播放
audio.play();
</script>
  普通情况下,线是从左下角连接到右上角的。就上面的代码,如果把线做成从左上角连到右下角(输入的数组倒置)也无妨,结果无非是把整个波形垂直翻转了而已,同样不会影响音效。
  当我们输入的点较少时可能会得到不平滑的波,这会影响到音质,所以点的数量越多音质就越高。通常就使用采样块大小的点数。
  这个曲线的微调是专业人员的工作了,我对这些不熟也没法用它做出什么效果,这里就不做其它演示了。总之AudioAPI居然能支持到这么复杂的操作太高端了。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^