4 #include "test_macros.h"
7 bus_call(GstBus *bus, GstMessage *msg, gpointer data)
9 GMainLoop *loop = (GMainLoop *)data;
11 switch (GST_MESSAGE_TYPE(msg)) {
13 g_print("End-of-stream\n");
14 g_main_loop_quit(loop);
16 case GST_MESSAGE_ERROR: {
20 gst_message_parse_error(msg, &err, &debug);
22 g_print("Error: %s\n", err->message);
24 g_main_loop_quit(loop);
35 main(int argc, char *argv[])
40 GstElement *src, *resamp, *filter, *vader, *sink;
46 gst_init(&argc, &argv);
48 gst_plugin_load_file("../../src/gst-plugin/.libs/libgstpocketsphinx.so", &err);
50 g_print("Failed to load plugin: %s\n", err->message);
53 loop = g_main_loop_new(NULL, FALSE);
55 pipeline = gst_pipeline_new("test_gst");
56 src = gst_element_factory_make("filesrc", "file-source");
57 g_object_set(G_OBJECT(src), "location", DATADIR "/goforward.raw", NULL);
58 caps = gst_caps_from_string("audio/x-raw-int,channels=1,endianness=1234,width=16,depth=16,rate=16000,signed=(bool)true");
60 g_print("Failed to create caps!\n");
63 resamp = gst_element_factory_make("audioresample", "resampler");
64 vader = gst_element_factory_make("vader", "vad");
65 g_object_set(G_OBJECT(vader), "auto_threshold", TRUE, NULL);
66 filter = gst_element_factory_make("pocketsphinx", "asr");
67 g_object_set(G_OBJECT(filter), "hmm", MODELDIR "/hmm/en_US/hub4wsj_sc_8k", NULL);
68 g_object_set(G_OBJECT(filter), "lm", MODELDIR "/lm/en/turtle.DMP", NULL);
69 g_object_set(G_OBJECT(filter), "dict", MODELDIR "/lm/en/turtle.dic", NULL);
70 g_object_set(G_OBJECT(filter), "latdir", ".", NULL);
71 sink = gst_element_factory_make("filesink", "sink");
72 g_object_set(G_OBJECT(sink), "location", "test_gst.out", NULL);
73 gst_bin_add_many(GST_BIN(pipeline),
74 src, resamp, vader, filter, sink, NULL);
75 gst_element_link_filtered(src, resamp, caps);
76 gst_element_link(resamp, vader);
77 gst_element_link(vader, filter);
78 gst_element_link(filter, sink);
80 bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
81 gst_bus_add_watch(bus, bus_call, loop);
83 gst_element_set_state(pipeline, GST_STATE_PLAYING);
84 g_main_loop_run(loop);
86 gst_element_set_state(pipeline, GST_STATE_NULL);
87 gst_object_unref(GST_OBJECT(pipeline));
89 TEST_ASSERT(fh = fopen("test_gst.out", "r"));
90 TEST_ASSERT(fgets(line, sizeof(line), fh));
91 TEST_EQUAL(0, strcmp(line, "go forward ten meters\n"));