我正在实施'过滤器扫描'效果(我不知道它是否被调用)。我所做的基本上是创建一个低通滤波器,使其在某个频率范围内“移动”。
要计算给定时刻的滤波器截止频率,我使用用户提供的线性函数,该函数产生0到1之间的值。
我的第一次尝试是直接将线性函数返回的值映射到频率范围,如cf = freqRange * lf(x)。虽然它工作正常但看起来扫描在低频移动时运行得更快,然后在通往高频区域时减慢。我不知道为什么会这样,但我想这与人类听觉以非线性方式感知频率变化有关。
我的下一次尝试是以对数方式移动滤波器的截止频率。它现在工作得更好但我仍然觉得滤波器在频率范围内不会以恒定的感知速度移动。
我应该如何划分频率空间以获得恒定的感知扫描速度?
提前致谢。
答案 0 :(得分:2)
你所指的频率扫描效果可能是一个哇音滤波器,以无处不在的wah-wah pedal命名。
我们听到八度音的频率,用对数刻度扫过八度音是线性化它的方法。不要听起来不屑一顾,但听起来你正在做的事情在物理上和数学上是正确的。 (你应该在2000到4000赫兹之间花费200到400赫兹之间的时间,等等。)你只是不喜欢它听起来如何。这两点都很好 - 音频非常主观。
为了混合一点,一种选择是尝试Bark scale,这是基于心理声学和耳朵的结构。据我了解,这是为了在你的每个耳内部“带通滤波器”中花费相同的时间。
你总是可以在0和1之间尝试二次或三次函数。音频电位器通常使用一些分段二次或三次截面来获得它们的映射。
答案 1 :(得分:1)
永远,但试试这个:
http://en.wikipedia.org/wiki/Physics_of_music#Scales“下表显示了正常主要音阶的所有音符的频率与音阶的第一个音符的固定频率之间的比率。”
然后会有一个图表显示1到2之间的小数值,如果你调整匹配的时间,你可能得到你想要的。虽然整体进展仍然是对数,但每一步之间的步进应该分成相等的第8步(有点跳跃)。
换句话说,每半秒调整一个音符。每个八度音程(我认为)将覆盖前一个八度音程的频率范围的两倍。
编辑:另外,你会在这里找到频率:http://en.wikipedia.org/wiki/Middle_C#Designation_by_octave(你希望程序员不希望C0正好是16hz吗?)