我正在尝试为Audacity编写一个简单的测量插件,它就像撞击我的头骨一样有趣。我想做的就是取一大块音频并找到所有样本的平均值(块DC offset),这样我就可以将它作为一个数字呈现给用户,这样我就可以减去DC偏移从样品中进行进一步处理。我知道并理解我想做的数学,但我不明白如何在Lisp / XLisp / Nyquist /中做到这一点。
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)
无效,因为:
答案 0 :(得分:0)
NEVERMIND
snd-maxsamp
计算绝对值,而不是snd-avg
。 snd-avg
工作得很好。以下是如何从中挤出一个数字(“FLONUM”):
(snd-fetch (snd-avg s (round len) (round len) OP-AVERAGE))
这会产生阴性样本的负数和正样本的正数,正如它应该的那样。
是否应删除此问题或将其作为示例留给其他人?