lisp - 如何在奈奎斯特中找到声音的均值/平均值

标签 lisp audio mean audacity

我正在尝试为 Audacity 编写一个简单的测量插件,它就像用石头砸我的头骨一样有趣。我想要做的就是获取一段音频并找到所有样本的平均值(该 block 的 DC offset ),这样我就可以将它作为一个数字呈现给用户,这样我就可以从 sample 进行进一步处理。我知道并理解我想做的数学,但我不明白如何在 Lisp/XLisp/Nyquist/whatever 中做。

Background information in this thread

据我所知,没有执行此操作的功能。出于某种原因,snd-avg function正如您可能期望的那样,实际上并没有计算声音的平均值。它首先计算绝对值,然后计算平均值计算平均值,然后计算绝对值。即使有一个单独的 snd-abs 函数可以做到这一点。 >:(

所以我想我必须自己写?这意味着将声音转换为数组,然后计算其平均值?

(snd-fetch-array sound len step)

Reads sequential arrays of samples from sound, returning either an array of FLONUMs or NIL when the sound terminates.

(snd-samples sound limit)

Converts the samples into a lisp array.

Nyquist Functions

而且连一个平均函数都没有,所以我也得自己做一个求和?但是数学函数只适用于列表?所以我需要将数组转换成列表?

这也会为更长的波形占用大量内存(每个样本 18 个字节),因此最好分块处理它并执行 cumulative average。 .但我什至不知道如何做未优化的版本。

不,(hp s 0.1) 不会工作,因为:

  1. 我只想去除直流电,并保持任意低频。 0.01 Hz 应无变化地通过,DC 应被移除。
  2. 高通滤波器是因果关系,无论您使用何种拐点频率,波形的第一个样本都保持不变,因此无法用于测量峰值样本等。

最佳答案

没关系

snd-maxsamp 正在计算绝对值,而不是 snd-avgsnd-avg 工作得很好。以下是从中提取数字(“FLONUM”)的方法:

(snd-fetch (snd-avg s (round len) (round len) OP-AVERAGE))

这会为负样本生成负数,为正样本生成正数,这是应该的。

这个问题是应该删除还是留作其他人的例子?

关于lisp - 如何在奈奎斯特中找到声音的均值/平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436194/

相关文章:

list - 删除列表中的重复元素

list - Lisp 中的列表问题

iphone - iOS 声音应用程序的 EQ 设置

audio - 使用Vbscript提取或播放youtube音频

javascript - 使用 Angular 更改 url 的名称

functional-programming - 有什么方法可以进行基于示例的编程吗?

Lisp:帮助不返回值?

C# - Xamarin Forms 音频播放器在使用 5 或 6 次后停止工作

java - JOptionPane 输入到数组的平均值

matlab - 元胞数组 MATLAB 中的平均值