python - 使用 GStreamer(或其他库)检测麦克风吹气

标签 python gtk audio pygtk gstreamer

<分区>

我可以使用 GStreamer(或其他与 Linux 兼容的声音库)检测麦克风上的吹气吗?

这样做我可以获得一些关于声音的信息:

import gtk, gst

def playerbinMessage(bus, message):
    if message.type == gst.MESSAGE_ELEMENT:
        struct = message.structure

        if struct.get_name() == 'level':
            # printing peak, decay, rms
            print struct['peak'][0], struct['decay'][0], struct['rms'][0]

pipeline = gst.parse_launch('pulsesrc ! level ! filesink location=/dev/null')

bus = pipeline.get_bus()
bus.add_signal_watch()
bus.connect('message', playerbinMessage)

pipeline.set_state(gst.STATE_PLAYING)

gtk.main()

我用它来检测拍手,但我不知道我是否可以使用这些信息来检测吹气而不用我的计算机混淆吹气和说话。另外,我不知道是否有其他方法可以使用 GStreamer 或其他与 Linux 兼容的声音库分析声音。

最佳答案

您需要查看的不仅仅是音频级别,以区分吹气和语音。首先,请考虑大多数语音由高于 80Hz 左右的音频组成,而对着麦克风吹气会产生大量低频隆隆声。

因此:如果您想坚持使用 gstreamer,可以尝试使用“audiocheblimit”过滤器在测量音量之前降低声音的通量。 (类似于 audiocheblimit mode=low-pass cutoff=40 poles=4)

就我个人而言,我的方法更像是:

  1. 使用 python-alsaaudio 之类的工具录制原始音频
  2. 使用 numpy 计算声音 block 的傅立叶变换
  3. 总结低频(可能是 20-40Hz)的振幅,如果该值足够大则触发。

如果这不起作用,那么我会寻找更聪明的检测算法。这种方法(alsa+numpy)非常灵活,但比 gstreamer 方法稍微复杂一些。

编辑:我刚刚注意到 gstreamer 也有一个“频谱”元素,它将返回傅里叶变换。

关于python - 使用 GStreamer(或其他库)检测麦克风吹气,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5686424/

相关文章:

python - 如何获取 Gtk ScrolledWindow 中的当前显示区域

audio - 是否可以使用结束的声音文件过渡到新场景或刷新同一场景中的数据?

javascript - Bokeh 图上的可点击点

python - gtk.StatusIcon 双击

python - Python 中的逐像素数据

python - 为什么 python 2.7.2 pygtk 解析空地 GtkButtonBox 会出现段错误?

ios - 将音频样本从流附加到AVAssetWriter

php - sh :/usr/bin/ffmpeg: not found

python - Conda安装的包,Python找不到

python - 我希望能够从根路径和子路径加载类