如何解决麦克风在使用 Gstreamer 管道几秒钟后停止向扬声器发送语音
我一直在尝试创建从我的 Raspberry Pi 麦克风(USB 耳机)到我的声卡的“通信线”,以便脚本将我在麦克风上说的任何内容通过管道发送到我的扬声器。
问题:
当我运行下面的脚本时,麦克风工作并在我的扬声器上发送声音几秒钟。之后它就不再重复我在说什么了。
我的代码如下所示:
#!/usr/bin/env python
import gi
import os
gi.require_version('Gst','1.0')
gi.require_version('Gtk','3.0')
from gi.repository import GObject,Gst,Gtk,GLib
#GObject.threads_init()
Gst.init(None)
loop = GLib.MainLoop ()
pipeline = Gst.parse_launch("autoaudiosrc ! audioconvert ! tee name=source ! queue ! vorbisenc ! oggmux ! filesink location=file.ogg source. ! queue ! audioconvert ! alsasink")
#autoaudiosrc = Gst.ElementFactory.make("autoaudiosrc","autoaudiosrc")
#audioconvert = Gst.ElementFactory.make("audioconvert","audioconvert")
#vorbisenc = Gst.ElementFactory.make("vorbisenc","vorbisenc")
#oggmux = Gst.ElementFactory.make("oggmux","oggmux")
#filesink = Gst.ElementFactory.make("filesink","filesink")
#url = "1.ogg"
#filesink.set_property("location",url)
#pipeline.add( autoaudiosrc)
#pipeline.add( audioconvert)
#pipeline.add( vorbisenc)
#pipeline.add( oggmux)
#pipeline.add( filesink)
#autoaudiosrc.link( audioconvert)
#audioconvert.link( vorbisenc)
#vorbisenc.link( oggmux)
#oggmux.link( filesink)
pipeline.set_state(Gst.State.PLAYING)
loop.run()
pipeline.set_state(Gst.State.NULL)
Gtk.main()
在项目开始时,我尝试以不同的方式创建管道(这就是为什么我在代码中留下注释以便您检查我的思维过程),直到我在这里找到可以完成我的工作的代码Simple microphone to speakers implementation 所以我尝试在我的项目中实现它。
在调试时,我的第一个想法是管道可能会在一段时间后关闭,但我所做的一些测试暗示情况并非如此。
请记住,我对 GStreamer 比较陌生(使用它不到 3 天) 所以我可能会犯一些愚蠢的错误。
如果您有时间,请向我解释问题的解决方案(如果您能发现)。
提前致谢。
**编辑 1:就在今天,我在不同的树莓派上执行了代码,我看到每次执行记录我的输入的代码时都会正常创建一个文件,无论我将其打开 10 秒还是 30 秒(因此记录器端的代码很好)。可能需要修复的是播放创建的文件的“播放”代码。
解决方法
我在之前安装了 Ubuntu 20 的 Raspberry 上尝试了相同的代码。正如预期的那样,脚本运行良好。因此,总而言之,这是 Raspberry Pi 操作系统问题,而不是代码错误。也可以通过以下方式实现此管道的最简单形式:
pipeline = Gst.parse_launch("autoadiosrc ! pulsesink")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。