#include <config.h>
#include <glib.h>
+#include <glib/gi18n.h>
#include <libchimara/glk.h>
#ifdef GSTREAMER_SOUND
#include <gst/gst.h>
g_free(pipeline_name);
/* Create GStreamer elements to put in the pipeline */
- s->source = gst_element_factory_make("filesrc", NULL);
+ s->source = gst_element_factory_make("audiotestsrc", NULL);
s->filter = gst_element_factory_make("volume", NULL);
s->sink = gst_element_factory_make("autoaudiosink", NULL);
if(!s->source || !s->filter || !s->sink) {
#ifdef GSTREAMER_SOUND
ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
+
+ if(!gst_element_set_state(chan->pipeline, GST_STATE_NULL))
+ WARNING_S(_("Could not set GstElement state to"), "NULL");
glk_data->schannel_list = g_list_delete_link(glk_data->schannel_list, chan->schannel_list);
* in which case playing a MOD resource would fail if one was already playing.
* </para></note>
*
- * <warning><para>This function is not implemented yet.</para></warning>
- *
* Returns: 1 on success, 0 on failure.
*/
glui32
* %gestalt_SoundNotify selector before you rely on it; see <link
* linkend="chimara-Testing-for-Sound-Capabilities">Testing for Sound
* Capabilities</link>.
- *
- * <warning><para>This function is not implemented yet.</para></warning>
*
* Returns: 1 on success, 0 on failure.
*/
glk_schannel_play_ext(schanid_t chan, glui32 snd, glui32 repeats, glui32 notify)
{
VALID_SCHANNEL(chan, return 0);
+#ifdef GSTREAMER_SOUND
+ if(!gst_element_set_state(chan->pipeline, GST_STATE_PLAYING)) {
+ WARNING_S(_("Could not set GstElement state to"), "PLAYING");
+ return 0;
+ }
+ return 1;
+#else
return 0;
+#endif
}
/**
*
* Stops any sound playing in the channel. No notification event is generated,
* even if you requested one. If no sound is playing, this has no effect.
- *
- * <warning><para>This function is not implemented yet.</para></warning>
*/
void
glk_schannel_stop(schanid_t chan)
{
VALID_SCHANNEL(chan, return);
+#ifdef GSTREAMER_SOUND
+ if(!gst_element_set_state(chan->pipeline, GST_STATE_READY))
+ WARNING_S(_("Could not set GstElement state to"), "READY");
+#endif
}
/**
#include <libchimara/glk.h>
#include <stdio.h>
+#include <unistd.h>
void
glk_main(void)
fprintf(stderr, "Could not create sound channel.\n");
return;
}
+
+ if(!glk_schannel_play(sc, 0)) { /* resource number doesn't matter right now */
+ fprintf(stderr, "Could not start sound channel.\n");
+ return;
+ }
glk_schannel_set_volume(sc, 0x10000);
+ sleep(1);
glk_schannel_set_volume(sc, 0x08000);
+ sleep(1);
glk_schannel_set_volume(sc, 0x04000);
+ sleep(1);
glk_schannel_set_volume(sc, 0x00000);
glk_schannel_set_volume(sc, 0xA0000); /* max supported volume */
glk_schannel_set_volume(sc, 0xB0000); /* should be coerced */
glk_schannel_set_volume(sc, 0x10000);
-
+
+ glk_schannel_stop(sc);
glk_schannel_destroy(sc);
}