网络音频 api 以不同的速率播放哔、哔、...
Posted
技术标签:
【中文标题】网络音频 api 以不同的速率播放哔、哔、...【英文标题】:web audio api plays beep, beep,... beep at different rate 【发布时间】:2015-06-05 17:47:32 【问题描述】:我正在尝试根据浏览器窗口内的某些传感器读数以不同的速率播放“哔”声。
这个想法是当传感器读数高时“哔,哔,哔,...哔”更快,当传感器读数较低时,“哔,...哔”变慢,所有这些都是实时的。
传感器读数通过 socket.io 输入浏览器。我已经可以控制上下移动的进度条了。音频反馈是一项额外功能。
经过一番谷歌搜索,我正在考虑使用网络音频 api,创建一个正弦波振荡器,并通过增益节点连接/断开来打开/关闭它。
我的问题是如何以正确的方式控制时间,比如我试图在 1 Hz 到 20 Hz 的频率范围内发出哔哔声,并且能够动态改变频率。
【问题讨论】:
请根据您的问题澄清频率 - 正弦波的基频(哔哔声的音高)但您也参考了更快和更慢的哔哔声重复,这也可以考虑一个频率。您是想调节重复哔声的频率还是音调? 【参考方案1】:我特别不会通过连接和断开振荡器来打开和关闭它 - 你必须从主线程中做到这一点,所以不是超级可预测的。
您实际上可以使用调制低频振荡器来做到这一点:查看以下代码:
var context = new AudioContext();
//defaults to A440Hz, sine wave
var src = context.createOscillator();
// Now let's create a modulator to turn beeps on and off
var mod = context.createOscillator();
mod.type="square";
mod.frequency.value = "2"; // Start at 2Hz
var gain = context.createGain();
var scaler = context.createGain();
src.connect(gain);
gain.connect(context.destination);
mod.connect(scaler); // Mod signal is [-1,1]
scaler.gain.value = 0.5; // we need it to be [-0.5,0.5]
gain.gain.value = 0.5; // then it's summed with 0.5, so [0,1]
scaler.connect(gain.gain);
//start it up
src.start(0);
mod.start(0);
// to change rate, change mod.frequency.value to desired frequency
【讨论】:
以上是关于网络音频 api 以不同的速率播放哔、哔、...的主要内容,如果未能解决你的问题,请参考以下文章
在窗口中运行的 VBScript 如何发出哔哔声(或播放系统声音)? [复制]