我试图根据播放歌曲的音频级别(声音输出)来获取我的Raspberry。这首歌不一定是Raspberry上的本地mp3文件。让我解释一下:
如果(音频电平高于阈值): 做点什么......
我发现这个http://freshfoo.com/posts/pulseaudio_monitoring/几乎就是我想要的东西,但我必须能够阅读单个样本,以便将其与使用的阈值进行比较。 Analyze audio using Fast Fourier Transform也是一个可以提供帮助的话题,如果有关于如何获得这些数字的代码/解释。 我希望你能帮助我解决这个问题,因为进一步的信息只需要问:)
答案 0 :(得分:0)
看看raspberry-vu project,它与用C语言编写的cpu密集部分类似,对RPi来说相当重要。
如果您还链接到src/impulse.c
和src/test-impulse.c
(dep of gsl)并且包含{{1},则可以修改gsl
和cblas
以执行您想要的操作}。你会注意到你从<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