Web 技术研究所

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

AudioAPI 自定义Oscillator节点的波形

  对Oscillator节点设置frequency.value会得到一个固定频率的声音。声音并不是一个时间点,是由于一个采样块中的所有数据组成的。固定频率的声音就是以一个频率来填满采样块。Oscillator节点也可以不使用固定频率,可以自定义这个采样块。
  固定频率的声音是毫无音色可言的,只有对采样快的波形设置才能得到不同的音色。首先需要调用createPeriodicWave方法来创建一个采样快的数据,它通过傅里叶系数表来描述。由于傅里叶级数的每一项分别有cos和sin两个系数,所以我们需要传入的参数分为两组,一组是cos的系数数组,一组是sin的系数数组。这两个数组是Float32Array类型的,而且sin和cos的系数数组必须是等长的,且长度大于0小于2048(因为2048是采样块的大小,一个采样块不可能描述大于2048的频率)。傅里叶级数的下标是从1开始的,而我们的数组下标是从0开始。cos系数数组的0元素是用于调整直流偏移的,而sin系数数组的0元素没有意义,会被直接无视掉。
  演示:[实例]
<script>
var AudioContext=AudioContext||webkitAudioContext;
var context=new AudioContext;
//创建节点
var oscillator=context.createOscillator();
//配置节点
var length=4096;
var real=new Float32Array(length); //cos系数数组
var imag=new Float32Array(length); //sin系数数组
for(var i=200;i<500;i++)real[i]=1; //随便填入一些数据
//创建PeriodicWave,并设置到oscillator上
oscillator.setPeriodicWave(context.createPeriodicWave(real,imag));
//让oscillator使用1的频率
oscillator.frequency.value=1;
//连接:oscillator → destination
oscillator.connect(context.destination);
//播放
oscillator.start(0);
</script>

  参考:http://www.g200kg.com/jp/docs/webaudio/osccustom.html
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^