我可以使用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()
Run Code Online (Sandbox Code Playgroud)
我用它来检测鼓掌,但我不知道我是否可以使用这些信息来检测吹气,而不会让我的电脑混淆吹嘘和说话.另外,我不知道是否有另一种方法可以使用GStreamer或其他兼容Linux的声音库来分析声音.
区分吹气和讲话时,您需要看的不仅仅是音频电平。首先,考虑到大多数语音都包含高于 80Hz 的音频,而对着麦克风吹气会产生大量低频隆隆声。
所以:如果您想坚持使用 gstreamer,也许可以尝试使用“audiocheblimit”滤波器在测量声音电平之前对声音进行低通处理。(就像是audiocheblimit mode=low-pass cutoff=40 poles=4)
就我个人而言,我的方法更像是:
如果这不起作用,那么我会寻找更聪明的检测算法。这种方法(alsa+numpy)非常灵活,但比 gstreamer 方法复杂一点。
编辑:我刚刚注意到 gstreamer 还有一个“频谱”元素,它将返回傅里叶变换。