[Vala] Bus Message Structure
- From: Brian Duffy <brduffy gmail com>
- To: gstreamer-devel lists freedesktop org, vala-list <vala-list gnome org>
- Subject: [Vala] Bus Message Structure
- Date: Thu, 22 Mar 2012 16:36:18 -0400
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]