在我的GStreamer管道中录音时使用阀门
我在管道的阀门上遇到了问题:
self.pipeline = gst.parse_launch(' ! '.join(['autoaudiosrc',
'queue silent=false leaky=2 max-size-buffers=0 max-size-time=0 max-size-bytes=0',
'audioconvert',
'audioresample',
'audio/x-raw-int, rate=16000, width=16, depth=16, channels=1',
'tee name=t',
'queue',
'audioresample',
'audio/x-raw-int, rate=8000',
'vader name=vader auto-threshold=true',
'pocketsphinx lm=%s dict=%s name=listener' % (dir_path + '/pocketsphinx/lisa.lm',dir_path + '/pocketsphinx/lisa.dic'),
'fakesink dump=1 t.',
'valve name=valve drop=0',
'queue',
'flacenc',
'filesink async=0 location=' + self.recording]))
我知道这样创建管道不是最优雅的Python方式,但这样写最容易理解。
把它设置为0可以记录麦克风的声音流到我的文件里,一切都正常。 但是我想默认是关闭的,只有在某个事件发生时(监听一个关键词,用pocketsphinx),再打开这个阀门,然后再把它关上。 可是这似乎不太管用:我的文件还是0字节。
一旦pocketsphinx听到关键词,我就用以下代码打开阀门:
self.recording_valve.set_property('drop',False)
我试着给出一个非常简单的例子来说明这个问题。也许问题不在这部分,但我的调试就是在这里找到的。
想查看整个项目: https://github.com/Seraf/LISA-CLIENT-Linux/blob/pocketsphinx/lisa.tac
这个链接调用了这个类: https://github.com/Seraf/LISA-CLIENT-Linux/blob/pocketsphinx/lib/listener.py
这个类又调用了这个类: github /Seraf/LISA-CLIENT-Linux/blob/pocketsphinx/lib/recorder.py
谢谢你的帮助!
1 个回答
2
这听起来有点傻,但我在快速重写我的文件时,使用“watch”命令监视文件,结果即使设置了1秒的时间间隔,它也没能及时看到文件的变化。
把出问题的那行去掉后,我发现文件内容确实填充得很好。
抱歉打扰大家了。