Bus Message Structure
Brian Duffy
brduffy at gmail.com
Thu Mar 22 13:36:18 PDT 2012
Hello,
I am trying to use CMU's PocketSphinx plugin for Gstreamer from Vala and I
am running into a problem getting access to the message structure in my bus
callback function (app_message). For some reason when I use the
get_structure method to return the structure of the message and then call a
method on that structure such as get_name() or get_string(), I get a
critical Gstreamer error :
(cmu:26958): GStreamer-CRITICAL **: gst_structure_get_string: assertion
`structure != NULL' failed
I just can't figure out why my message structure would be null. Any ideas?
Here is my code ...
using Gst;
class Sphinx : GLib.Object {
// experimenting with gstreamer pocketsphinx
private Gst.Pipeline pipeline;
private Gst.Element vader;
dynamic Gst.Element asr;
private Gst.Bus bus;
private Gst.Structure msg;
private Gst.Structure my_struct;
private Gst.Structure my_struct2;
private Gst.Message message;
private MainLoop loop;
public Sphinx() {
string a = """pulsesrc
device="alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono" ! audioconvert
!""";
string b = """ audioresample ! vader name=vad auto-threshold=true !
pocketsphinx name=asr ! fakesink""";
string pipeDef = a + b;
try {
pipeline = (Pipeline)Gst.parse_launch(pipeDef);
} catch (Error e) {
stdout.printf("Error: %s\n", e.message);
}
bus = pipeline.get_bus();
bus.add_signal_watch();
bus.message.connect(app_message);
asr = pipeline.get_by_name("asr");
asr.set_property("lm", "4038.lm");
asr.set_property("dict", "4038.dic");
asr.partial_result.connect(asrPartialResult);
asr.result.connect(asrResult);
asr.set_property("configured", true);
bus = pipeline.get_bus();
bus.add_signal_watch();
bus.message.connect(app_message);
pipeline.set_state(Gst.State.PLAYING);
loop = new MainLoop ();
loop.run();
}
private void asrPartialResult(Gst.Element asr, string text, string uttid) {
my_struct = new Gst.Structure.empty("partial_result");
my_struct.set_value("hyp", text);
my_struct.set_value("uttid", uttid);
asr.post_message(new Gst.Message.application(asr, my_struct));
}
private void asrResult(Gst.Element asr, string text, string uttid) {
//stdout.printf("%s", "inside asrResult");
my_struct2 = new Gst.Structure.empty("result");
my_struct2.set_value("hyp", text);
my_struct2.set_value("uttid", uttid);
asr.post_message(new Gst.Message.application(asr,
my_struct2));
}
private void app_message(Gst.Bus bus, Gst.Message p_msg) {
// trying to get the string that PocketSphinx converts my voice to here
// but I keep getting : GStreamer-CRITICAL **: gst_structure_get_string:
assertion `structure != NULL' failed
string msg_string = p_msg.get_structure().get_string("hyp");
/* // Not using any of this for now
if (msgType == null) {
stdout.printf("%s", "null");
}else{
stdout.printf("%s", "not null");
}
*/
//stdout.printf("%s", msgType);
//if (p_msg.type == MessageType.APPLICATION) {
// stdout.printf("%s", "booyah");
//}
/*
if (msg["hyp"]) {
stdout.printf("%s", "true");
}else{
stdout.printf("%s", "false");
}
*/
/*
if (msgType == "partial_result") {
//partialResult(msg["hyp"], msg["uttid"]);
}else if (msgType == "result") {
//finalResult(msg["hyp"], msg["uttid"]);
//pipeline.set_state(Gst.State.PAUSED);
}
*/
//return true;
}
private void partialResult(GLib.Value hyp, GLib.Value uttid) {
stdout.printf("%s", (string)hyp);
}
private void finalResult(GLib.Value hyp, GLib.Value uttid) {
stdout.printf("%s", (string)hyp);
}
}
int main (string[] args) {
Gst.init(ref args);
var sphinx = new Sphinx();
return 0;
}
--
Duff
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20120322/fe25c86c/attachment.html>
More information about the gstreamer-devel
mailing list