在Web音频API中通过PeriodicWave播放缓冲区,我可以将增益设置为缓冲区
Play buffer by PeriodicWave in Web Audio API, can I set Gain as loud as buffer?
我尝试播放振荡器(buffer -> FFT -> PeriodicWave ->振荡器)。
// PeriodicWave (-> Oscillator)
var wave = fft(buffer), periodicwave = ctx.createPeriodicWave(wave[0], wave[1]);
function fft(input) {
var n = input.length, theta = 2 * Math.PI / n,
ar = new Float32Array(n), ai = new Float32Array(n),
m, mh, i, j, k, irev,
wr, wi, xr, xi,
cos = Math.cos, sin = Math.sin;
for(i=0; i<n; ++i) {
ar[i] = input[i];
}
// scrambler
i=0;
for(j=1; j<n-1; ++j) {
for(k = n>>1; k>(i ^= k); k>>=1);
if(j<i) {
xr = ar[j];
xi = ai[j];
ar[j] = ar[i];
ai[j] = ai[i];
ar[i] = xr;
ai[i] = xi;
}
}
for(mh=1; (m = mh << 1) <= n; mh=m) {
irev = 0;
for(i=0; i<n; i+=m) {
wr = cos(theta * irev);
wi = sin(theta * irev);
for(k=n>>2; k > (irev ^= k); k>>=1);
for(j=i; j<mh+i; ++j) {
k = j + mh;
xr = ar[j] - ar[k];
xi = ai[j] - ai[k];
ar[j] += ar[k];
ai[j] += ai[k];
ar[k] = wr * xr - wi * xi;
ai[k] = wr * xi + wi * xr;
}
}
}
return [ar, ai];
}
这个代码很好,但是这个振荡器的增益是自动标准化的。我想将增益设置为BufferSource (buffer -> AudioBuffer -> BufferSource),但它不起作用,我尝试过使用AudioGainNode,请参阅此测试代码。
createPeriodicWave
自动缩放输出波形,使其最大幅度为1。这意味着音量比您预期的要低。您必须对增益进行一些实验,以使振荡器输出与缓冲区输出音量匹配。缩放取决于createPeriodicWave
使用的波。
然而,我认为Chrome的beta(或金丝雀)版本支持最近为createPeriodicWave
引入的参数disableNormalization: true
来禁用规范化。那么振荡器音量应该与缓冲音量匹配。
你可以增加振荡器的增益;但是,是的,PeriodicWave默认情况下会进行规范化。createPeriodicWave现在接受一个约束对象,使您能够禁用规范化。
相关文章:
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 我可以获得相对于被点击元素的确切点击位置吗
- 我可以更改剑道UI网格吗's的外键值
- 我可以'我似乎不知道如何修复javascript中的两个lint.有人能帮我理解吗
- 我可以在Javascript/jQuery中使用一个变量作为键吗
- 在Angular中,我可以从模板url中截取内容吗
- 我可以使此幻灯片图像自动播放吗?
- 我可以通过JQuery将CSS类交换为一个特殊的元素集吗
- JavaScript-为什么我可以在数组中设置键
- 我可以在Nodewebkit中保护javascript以外的资源吗
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- Sails.js:我可以将一些服务/模型打包为npm并在Sails.jss应用程序中加载npm吗
- 我可以让我的Ajax调用引起一个“;进行中”;光标
- 变量dos'即使我可以返回更新后的值,也不会改变
- JavaScript/Ionic2-为什么我可以't检索localStorage值
- HTML4表单使用mattw@scriptarchive.comcgi脚本我可以嵌入贝宝按钮
- 我可以将函数导入到typescript类文件中吗
- 我可以在网页正文中插入文本链接吗
- 在Web音频API中通过PeriodicWave播放缓冲区,我可以将增益设置为缓冲区