WebAudio中的WaveShaper节点 - 如何模拟失真?

 一二三 发布于 2023-01-18 19:28

使用WebAudio API并尝试扭曲!问题是,我不确定如何进入WaveShaper的"曲线"参数.

简而言之,'oscidis'是程序早期创建的WaveShaper节点.Oscidisv是一个静态设置为0的值,现在:

var wsCurve = new Float32Array();
if ((oscidisv >= -1) && (oscidisv < 1)) {

    var k = 2 * oscidisv / (1 - oscidisv);
    console.log
    for (var i = 0; i < 16; i+=1) {
        // LINEAR INTERPOLATION: x := (c - a) * (z - y) / (b - a) + y
        // a = 0, b = 2048, z = 1, y = -1, c = i
        var x = (i - 0) * (1 - (-1)) / (16 - 0) + (-1);
        wsCurve[i] = (1 + k) * x / (1+ k * Math.abs(x));
    }
}
oscidis.curve.value = wsCurve;

问题 - 无论我在这里放什么,我听不到任何声音上的差异) - =.即使在max(1)处出现失真,我也没有注意到任何真正的失真.你们知道一个更明显的失真波形整形函数吗?或者,如果我在WebAudio API中完全正确地执行此操作?

1 个回答
  • 这是我用过的一个基于我在白皮书中发现的一些不同功能的东西:

    function makeDistortionCurve( amount ) {
      var k = typeof amount === 'number' ? amount : 50,
        n_samples = 44100,
        curve = new Float32Array(n_samples),
        deg = Math.PI / 180,
        i = 0,
        x;
      for ( ; i < n_samples; ++i ) {
        x = i * 2 / n_samples - 1;
        curve[i] = ( 3 + k ) * x * 20 * deg / ( Math.PI + k * Math.abs(x) );
      }
      return curve;
    };
    

    我是在撒谎,如果我告诉你,我知道在哪里的3 + k或者20是从哪里来的-但它的工作原理.

    amount可以基本上是任何正数,但我发现0 - 100是一个非常好的范围,取决于你需要多少失真.

    如果您有兴趣了解这些函数的外观,我建立了一个小工具来帮助我在这里看到它们:http://kevincennis.github.io/transfergraph/

    2023-01-18 19:30 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有