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