首页 > 解决方案 > 如何从声音文件中提取包络?

问题描述

我需要在无头 Linux 主机上的批处理作业中从一组音频文件中提取声波包络。

我认为这可以使用Nyquist 编程语言来实现,它是 Lisp 的一种变体,尤其是嵌入了 Audacity 中,并且专门用于声音处理。但是,如果我对 Lisp 有一些了解,那么我之前没有任何使用 Nyquist 的经验。

Nyquist 中是否有一些原语可以直接实现这一点?或者我如何编写一个简短的 Nyquist 程序来提取声音的包络?


我尝试使用snd-avg函数。但它似乎没有产生一个平滑的包络(截图中的上半部分):

(snd-avg
  (aref *track* 0)                 ; first sound
  (truncate (/ *sound-srate* 50))  ; 50 Hz to samples
  1 op-peak)                       ; follow peak values

使用 <code>snd-avg</code> 获得的信封

标签: audiosignal-processingnyquist

解决方案


snd-avg为了消除楼梯波纹,我通过应用低通滤波器获得了不错的结果:

(lp 
  (snd-avg
    (aref *track* 0)
    (truncate (/ *sound-srate* 1000)) ; 1kHz
    1 op-peak)
  50)                                 ; 50 Hz low-pass

在此处输入图像描述


推荐阅读