Python 进程在单击“后返回-11(0x-b)”;说;pocketsphinx用户界面示例中

Python 进程在单击“后返回-11(0x-b)”;说;pocketsphinx用户界面示例中,python,python-2.7,gtk,speech-recognition,pocketsphinx,Python,Python 2.7,Gtk,Speech Recognition,Pocketsphinx,我使用的是一份完全相同的代码副本。 每次我运行代码时,UI都会出现,并且似乎在做它们应该做的事情。除单击“Speak”(讲话)按钮外,它将关闭,终端将打印以下内容: Process returned -11 (0x-b) 没有出现错误。它关闭的时候就好像它是注定的(我知道它不是)。你知道怎么解决这个问题吗 (编辑)以下是我试图执行的完整代码 from gi import pygtkcompat import gi gi.require_version('Gst', '1.0') from g

我使用的是一份完全相同的代码副本。 每次我运行代码时,UI都会出现,并且似乎在做它们应该做的事情。除单击“Speak”(讲话)按钮外,它将关闭,终端将打印以下内容:

Process returned -11 (0x-b)
没有出现错误。它关闭的时候就好像它是注定的(我知道它不是)。你知道怎么解决这个问题吗

(编辑)以下是我试图执行的完整代码

from gi import pygtkcompat
import gi

gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst
GObject.threads_init()
Gst.init(None)

gst = Gst

print("Using pygtkcompat and Gst from gi")

pygtkcompat.enable()
pygtkcompat.enable_gtk(version='3.0')

import gtk

class DemoApp(object):
    """GStreamer/PocketSphinx Demo Application"""
    def __init__(self):
        """Initialize a DemoApp object"""
        self.init_gui()
        self.init_gst()

    def init_gui(self):
        """Initialize the GUI components"""
        self.window = gtk.Window()
        self.window.connect("delete-event", gtk.main_quit)
        self.window.set_default_size(400,200)
        self.window.set_border_width(10)
        vbox = gtk.VBox()
        self.textbuf = gtk.TextBuffer()
        self.text = gtk.TextView(buffer=self.textbuf)
        self.text.set_wrap_mode(gtk.WRAP_WORD)
        vbox.pack_start(self.text)
        self.button = gtk.ToggleButton("Speak")
        self.button.connect('clicked', self.button_clicked)
        vbox.pack_start(self.button, False, False, 5)
        self.window.add(vbox)
        self.window.show_all()

    def init_gst(self):
        """Initialize the speech components"""
        self.pipeline = gst.parse_launch('autoaudiosrc ! audioconvert !  audioresample ! pocketsphinx ! fakesink')
        bus = self.pipeline.get_bus()
        bus.add_signal_watch()
        bus.connect('message::element', self.element_message)

        self.pipeline.set_state(gst.State.PAUSED)




    def element_message(self, bus, msg):
        """Receive element messages from the bus."""
        msgtype = msg.get_structure().get_name()
        if msgtype != 'pocketsphinx':
            return

        if msg.get_structure().get_value('final'):
            self.final_result(msg.get_structure().get_value('hypothesis'),
                msg.get_structure().get_value('confidence'))
            self.pipeline.set_state(gst.State.PAUSED)
            self.button.set_active(False)
        elif msg.get_structure().get_value('hypothesis'):
            self.partial_result(msg.get_structure().get_value('hypothesis'))

    def partial_result(self, hyp):
        """Delete any previous selection, insert text and select it."""
        # All this stuff appears as one single action
        self.textbuf.begin_user_action()
        self.textbuf.delete_selection(True, self.text.get_editable())
        self.textbuf.insert_at_cursor(hyp)
        ins = self.textbuf.get_insert()
        iter = self.textbuf.get_iter_at_mark(ins)
        iter.backward_chars(len(hyp))
        self.textbuf.move_mark(ins, iter)
        self.textbuf.end_user_action()

    def final_result(self, hyp, confidence):
        """Insert the final result."""
        # All this stuff appears as one single action
        self.textbuf.begin_user_action()
        self.textbuf.delete_selection(True, self.text.get_editable())
        self.textbuf.insert_at_cursor(hyp)
        self.textbuf.end_user_action()

    def button_clicked(self, button):
        """Handle button presses."""
        if button.get_active():
            button.set_label("Stop")
            self.pipeline.set_state(gst.State.PLAYING)
        else:
            button.set_label("Speak")
            self.pipeline.set_state(gst.State.PAUSED)

app = DemoApp()
gtk.main()

我将此作为一个答案发布,以获得正确的格式。无法保证这对您(或任何其他人)有效

我还将其升级为完整的Gtk3

import gi

gi.require_version('Gst', '1.0')
#gi.require_version('GES', '1.0')
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject, Gst#, GES
Gst.init(None)



class DemoApp(object):
    """GStreamer/PocketSphinx Demo Application"""
    def __init__(self):
        """Initialize a DemoApp object"""
        self.init_gui()
        self.init_gst()

    def init_gui(self):
        """Initialize the GUI components"""
        self.window = Gtk.Window()
        self.window.connect("delete-event", Gtk.main_quit)
        self.window.set_default_size(400,200)
        self.window.set_border_width(10)
        vbox = Gtk.Box(expand = True)
        vbox.set_orientation(Gtk.Orientation.VERTICAL)
        self.textbuf = Gtk.TextBuffer()
        self.text = Gtk.TextView(buffer=self.textbuf)
        self.text.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)
        vbox.pack_start(self.text, True, True, 0)
        self.button = Gtk.ToggleButton("Speak")
        self.button.connect('clicked', self.button_clicked)
        vbox.pack_start(self.button, False, False, 5)
        self.window.add(vbox)
        self.window.show_all()

    def init_gst(self):
        """Initialize the speech components"""
        #self.pipeline = Gst.parse_launch('autoaudiosrc ! audioconvert !  audioresample ! pocketsphinx ! fakesink')
        self.pipeline = Gst.Pipeline()
        bus = self.pipeline.get_bus()
        bus.add_signal_watch()
        bus.connect('message::element', self.element_message)

        self.pipeline.set_state(Gst.State.PAUSED)




    def element_message(self, bus, msg):
        """Receive element messages from the bus."""
        msgtype = msg.get_structure().get_name()
        if msgtype != 'pocketsphinx':
            return

        if msg.get_structure().get_value('final'):
            self.final_result(msg.get_structure().get_value('hypothesis'),
                msg.get_structure().get_value('confidence'))
            self.pipeline.set_state(Gst.State.PAUSED)
            self.button.set_active(False)
        elif msg.get_structure().get_value('hypothesis'):
            self.partial_result(msg.get_structure().get_value('hypothesis'))

    def partial_result(self, hyp):
        """Delete any previous selection, insert text and select it."""
        # All this stuff appears as one single action
        self.textbuf.begin_user_action()
        self.textbuf.delete_selection(True, self.text.get_editable())
        self.textbuf.insert_at_cursor(hyp)
        ins = self.textbuf.get_insert()
        iter = self.textbuf.get_iter_at_mark(ins)
        iter.backward_chars(len(hyp))
        self.textbuf.move_mark(ins, iter)
        self.textbuf.end_user_action()

    def final_result(self, hyp, confidence):
        """Insert the final result."""
        # All this stuff appears as one single action
        self.textbuf.begin_user_action()
        self.textbuf.delete_selection(True, self.text.get_editable())
        self.textbuf.insert_at_cursor(hyp)
        self.textbuf.end_user_action()

    def button_clicked(self, button):
        """Handle button presses."""
        if button.get_active():
            button.set_label("Stop")
            #self.pipeline.set_mode(GES.PipelineFlags.RENDER)
            self.pipeline.set_state(Gst.State.PLAYING)
        else:
            button.set_label("Speak")
            self.pipeline.set_state(Gst.State.PAUSED)

app = DemoApp()
Gtk.main()
其他说明:

(1)当我运行你的原始代码时,我发现一个分段错误。我怀疑你的操作系统返回的是信号-11而不是分段错误。在谷歌搜索Gst.State.PLAYING Segmentation Fault会得到很多有趣的结果

(2)我在GStreamer方面没有经验,所以在这个问题上我帮不了你很多。我只是想发布我的结果和我的2美分


(3部分代码来自

也请检查此项。ValueError:命名空间GES不可用于gi。require_version('GES','1.0')多亏了您的代码,我能够获得比单击“Speak”更进一步的信息按钮,但奇怪的是它没有录音。Pulseaudio没有显示任何设备录音,无论按钮的状态如何,也没有显示任何文本。对不起,我真的帮不了你更多。你可以发布一个新问题来解释你的问题,@Vindicium