2 * Play media file via gstreamer, optionally setting pulseaudio
3 * properties on it. Inspired by qwerty12's code from:
4 * http://talk.maemo.org/showthread.php?t=50266&page=2
8 #include <pulse/pulseaudio.h>
9 #include <pulse/glib-mainloop.h>
11 static GMainLoop *loop;
12 static GstElement *sound_player, *pulsesink;
14 static gboolean bus_call(GstBus *bus, GstMessage *msg, gpointer data)
16 GMainLoop *loop = data;
20 switch (GST_MESSAGE_TYPE(msg)) {
22 g_main_loop_quit(loop);
24 case GST_MESSAGE_ERROR:
25 gst_message_parse_error(msg, &error, &debug);
28 g_printerr("Error: %s\n", error->message);
30 g_main_loop_quit(loop);
39 int main(int argc, char *argv[])
42 pa_proplist *proplist = NULL;
45 g_printerr("Usage: %s <uri> [<event-id>]\n", argv[0]);
49 gst_init(&argc, &argv);
50 loop = g_main_loop_new(NULL, FALSE);
53 proplist = pa_proplist_new();
54 pa_proplist_sets(proplist, PA_PROP_EVENT_ID, argv[2]);
55 pa_proplist_sets(proplist, "module-stream-restore.id", "x-maemo-applet-profiles");
58 sound_player = gst_element_factory_make("playbin2", "eSpeakTime");
59 pulsesink = gst_element_factory_make("pulsesink", NULL);
61 g_object_set(G_OBJECT(pulsesink), "proplist", proplist, NULL);
63 bus = gst_pipeline_get_bus(GST_PIPELINE(sound_player));
64 gst_bus_add_watch(bus, bus_call, loop);
65 gst_object_unref(bus);
67 g_object_set(sound_player, "audio-sink", pulsesink, "uri", argv[1], NULL);
68 gst_element_set_state(sound_player, GST_STATE_PLAYING);
70 g_main_loop_run(loop);