使用Python实时分析音频电平

时间:2016-12-09 09:53:02

标签: python audio raspberry-pi3 pyaudio pulseaudio

我试图根据播放歌曲的音频级别(声音输出)来获取我的Raspberry。这首歌不一定是Raspberry上的本地mp3文件。让我解释一下:

如果(音频电平高于阈值):   做点什么......

我发现这个http://freshfoo.com/posts/pulseaudio_monitoring/几乎就是我想要的东西,但我必须能够阅读单个样本,以便将其与使用的阈值进行比较。 Analyze audio using Fast Fourier Transform也是一个可以提供帮助的话题,如果有关于如何获得这些数字的代码/解释。 我希望你能帮助我解决这个问题,因为进一步的信息只需要问:)

1 个答案:

答案 0 :(得分:0)

看看raspberry-vu project,它与用C语言编写的cpu密集部分类似,对RPi来说相当重要。

如果您还链接到src/impulse.csrc/test-impulse.c(dep of gsl)并且包含{{1},则可以修改gslcblas以执行您想要的操作}。你会注意到你从<gsl/gsl_statistics_double.h>得到一个数组[256],它保存了FFT的大小。将该数组传递给您想要的函数。对我而言im_getSnapshot(),它将标准偏差作为一个简单的双重传回。对于你,你想要使用sd = gsl_stats_sd(array, 1, 256),它将为你提供所有光谱分布的平均值。然后,您可以根据mean = gsl_stats_mean(array, 1, 256)

的值执行某些操作

我正在做一个类似的项目来暂停/取消暂停基于白噪声检测的RTP源(SD对白噪声来说非常低)。如果SD非常低,则RTP接收器暂停。否则它已启用。这意味着只有在发现非whitenoise时才会发生大量RTP数据包。

这可能是您对音频电平信号做出反应的最简单方法。我在这里制作了一个片段,代表了我监听的音频的stddev和平均值。

mean