我正在尝试为 Audacity 编写一个简单的测量插件,它就像用石头砸我的头骨一样有趣。我要做的就是获取一大块音频并找到所有样本的平均值(该块的DC 偏移量),以便我可以将其作为数字呈现给用户,这样我就可以从样本中减去 DC 偏移量用于进一步处理。我知道并理解我想做的数学,但我不明白如何在 Lisp/XLisp/Nyquist/whatever 中做。
据我所知,没有功能可以做到这一点。出于某种原因,该snd-avg
函数实际上并没有像您预期的那样计算声音的平均值。它首先计算绝对值,然后计算平均值,计算平均值,然后计算绝对值。即使有一个单独的snd-abs
功能可以做到这一点。>:(
所以我想我必须自己写?这意味着将声音转换为数组,然后计算其平均值?
(snd-fetch-array sound len step)
从声音中读取顺序的样本数组,当声音终止时返回 FLONUM 数组或 NIL。
(snd-samples sound limit)
将样本转换为 lisp 数组。
而且连平均函数都没有,所以我也得自己算一下?但是数学函数只适用于列表?所以我需要将数组转换为列表吗?
而且对于较长的波形(每个样本 18 个字节),这也会占用大量内存,因此最好将其分块处理并进行累积平均。但我什至不知道如何做未优化的版本。
不,(hp s 0.1)
不会工作,因为:
- 我只想去除 DC,并保持任意低频。0.01 Hz 应该不变地通过,DC 应该被移除。
- 高通滤波器是因果关系,波形的第一个样本保持不变,无论您使用什么拐点频率,都无法测量峰值样本等。