[gst-devel] Play audio filled in buffer
Stefan Kost
ensonic at hora-obscura.de
Sat Jul 12 12:03:11 CEST 2008
hi,
Akbar Basha schrieb:
> Hi Stefan,
>
> Thanks for the response .
Would you please post to the list.
>
> I tried the same. But could not produce the result.
>
> Please find the code.
>
> static void
> cb_handoff (GstElement *fakesrc,
> GstBuffer *buffer,
> gpointer user_data)
> {
>
> /* Clip start and end */
>
> data = (guint8 *) g_malloc (3000);
> GST_BUFFER_SIZE (buffer) = 3000;
> GST_BUFFER_DATA (buffer) = GST_BUFFER_MALLOCDATA (buffer) = data;
>
> FILE* fp = fopen("vertigo.mp3","rb");
> if(fp == NULL)
> {
> printf( " File is not opened \n");
> return;
> }
> fread(data,3000,1,fp);
>
> fclose(fp);
>
> }
>
> gint
> main (gint argc,
> gchar *argv[])
> {
> GstElement *pipeline, *fakesrc, *flt, *conv, *audiosink;
> GMainLoop *loop;
>
> /* init GStreamer */
> gst_init (&argc, &argv);
> loop = g_main_loop_new (NULL, FALSE);
>
> /* setup pipeline */
> pipeline = gst_pipeline_new ("pipeline");
> fakesrc = gst_element_factory_make ("fakesrc", "source");
> flt = gst_element_factory_make ("capsfilter", "flt");
> conv = gst_element_factory_make ("mad", "conv");
> audiosink = gst_element_factory_make ("alsasink", "audiosink");
>
> /* setup */
> g_object_set (G_OBJECT (flt), "caps",
> gst_caps_new_simple("audio/x-raw-int",
> "channels", G_TYPE_INT, 2,
> "rate", G_TYPE_INT, 32000,
> "depth", G_TYPE_INT, 16, NULL), NULL);
This is obviously wrong. You load an mp3 and not raw audio data. The capsfilter
needs to tell that. But in your case you would not even need one.
>
> gst_bin_add_many (GST_BIN (pipeline), fakesrc, flt,conv, audiosink, NULL);
> gst_element_link_many (fakesrc, flt,conv, audiosink, NULL);
>
> /* setup fake source */
> g_object_set (G_OBJECT (fakesrc),"signal-handoffs", TRUE,NULL);
>
> g_signal_connect (fakesrc, "handoff", G_CALLBACK (cb_handoff), NULL);
>
> /* play */
> gst_element_set_state (pipeline, GST_STATE_PLAYING);
> g_main_loop_run (loop);
>
> /* clean up */
> gst_element_set_state (pipeline, GST_STATE_NULL);
> gst_object_unref (GST_OBJECT (pipeline));
>
> return 0;
> }
>
> Even if I set using memset . Audio is not coming.
What happens?
Stefan
>
> how to proceed in the case pad is required i.e for wav files.
>
> Regards,
> Akbar
>
> On Wed, Jul 9, 2008 at 11:53 PM, Stefan Kost <ensonic at hora-obscura.de
> <mailto:ensonic at hora-obscura.de>> wrote:
>
> Akbar Basha schrieb:
>
> Hi,
>
> I would like to play the buffer , which is filled with any audio
> file data.
> Does gstreamer provides any mechanism to play.
>
>
> if you have the whole bufer in memory, use a fakesrc with
> signal-handoffs=TRUE and connect to handoff signal. In the handoff
> signal you put the pointer to your data into the GST_BUFFER_DATA,
> set the correct GST_BUFFER_SIZE and clear GST_BUFFER_MALLOC_DATA (if
> it was previously set g_free() the previous content).
>
> You should used a capsfilter after fakesrc and set the format of
> your sample on the capsfilter caps.
>
> Its sort of a hack, but works fine.
>
> Stefan
>
>
> Thanks in advance.
>
> Regards,
> Akbar
>
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
> Studies have shown that voting for your favorite open source
> project,
> along with a healthy diet, reduces your potential for chronic
> lameness
> and boredom. Vote Now at http://www.sourceforge.net/community/cca08
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> gstreamer-devel mailing list
>
> gstreamer-devel at lists.sourceforge.net
> <mailto:gstreamer-devel at lists.sourceforge.net>
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>
>
More information about the gstreamer-devel
mailing list