【问题标题】:Changing Auriotouch Linear scale to logarithmic将 Auriotouch 线性刻度更改为对数
【发布时间】:2010-08-04 20:05:36
【问题描述】:

我不知道这是否可能,但我想我会问,我怀疑如果可能的话,它将在 - (void) renderFFTToTex 例程中进行更改。有没有人有关于这样做的任何想法或他们可以推荐的其他建议?谢谢。

【问题讨论】:

    标签: iphone audio fft


    【解决方案1】:

    要重新调整频率,我们需要调整这个参数:

    CGFloat yFract = (CGFloat)y / (CGFloat)(maxY - 1);
    

    它的值介于 0..1 之间,并确定要在显示行 y 上显示的 fft 输出。

    要获得对数刻度,首先进行数学运算:频率 f (0.1kHz-20kHz) 必须显示在位置 log(f) 上。调用下限 (0.1kHz) L,上限 (20kHz) H。然后经过一些数学运算 [[skipped]] 你得到:

    yFract = ( exp(yFract*log(H/L)) - 1 ) / ( H/L - 1 );
    

    您应该在哪里填写您认为的 H/L 比率,例如

    yFract = ( exp(yFract*log(20)) - 1 ) / ( 20 - 1 );
    

    (你应该检查 0 是否为 0 和 1 是否为 1,是这种情况)

    【讨论】:

    • 数据在频段的低端似乎仍然很拥挤。
    • 没关系,我不得不在使用 yFract 的两个地方修改它。非常感谢您的帮助和回答。
    • 您用来再次缩放 dB 级别的公式是什么?
    • 您可以在interpVal 的 sqrt 之后使用相同的逻辑。决定因素还是 H/L 比率。
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多