[gst-devel] spectrum while playing a file

victor delvauxbernard at yahoo.fr
Tue Nov 16 02:45:11 CET 2010


Hello to all

I'd like to implement a spectrum measurment on a file that i'm playing; i'm
aware of the exeamples at 
http://http://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/tests/examples/spectrum/
http://http://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/tests/examples/spectrum/ 
but the exeamples are with either "alsasrc" or "audiotestsrc"; nothing with
a file that is played.

When i type in a terminal : 
filesrc location="/home/victor/Music/my_file.wav" ! decodebin2 ! spectrum
bands=100 threshold=-80 message=TRUE message-phase=TRUE interval=1000000 !
alsasink

it works (i don't have the display of the spectrum but i have the sound file
playing).

When i try it in a C program, i always have the 'complain' that elemets
cannot be linked...

Please, is there a think t forgot....?

Here is my "int main" function:

int
main (int argc, char *argv[])
{
  GstElement *bin;
  GstElement *src, *audioconvert, *decodebin, *spectrum, *sink;
  GstBus *bus;
  GstCaps *caps;
  GMainLoop *loop;

  gst_init (&argc, &argv);

  bin = gst_pipeline_new ("bin");

  src = gst_element_factory_make ("filesrc", "src");
  g_object_set (G_OBJECT (src), "location",
"file:///home/victor/Music/Gurdieff-Elena/gymnastique_medicale.wav", NULL);
  decodebin = gst_element_factory_make ("decodebin2", "decodebin2");
  g_signal_connect (decodebin, "new-decoded-pad", G_CALLBACK (cb_newpad),
NULL);
  spectrum = gst_element_factory_make ("spectrum", "spectrum");
  g_object_set (G_OBJECT (spectrum), "bands", spect_bands, "threshold", -80,
      "message", TRUE, "message-phase", TRUE, NULL);
  sink = gst_element_factory_make ("alsasink", "sink");
  g_object_set (G_OBJECT (sink), "sync", TRUE, NULL);
  gst_bin_add_many (GST_BIN (bin), src, decodebin, spectrum, sink, NULL);

  caps = gst_caps_new_simple ("audio/x-raw-int",
      "rate", G_TYPE_INT, AUDIOFREQ, NULL);

  if (!gst_element_link (src, decodebin))
{ fprintf (stderr, "can't link elements 1\n");
    exit (1);
  }
  if (!gst_element_link_filtered (decodebin, spectrum, caps)) 
	{ fprintf (stderr, "can't link elements 2\n");
    exit (1);
  }
  if  (!gst_element_link (spectrum, sink)) {
    fprintf (stderr, "can't link elements 3\n");
    exit (1);
  }
  gst_caps_unref (caps);

  bus = gst_element_get_bus (bin);
  gst_bus_add_watch (bus, message_handler, NULL);
  gst_object_unref (bus);

  gst_element_set_state (bin, GST_STATE_PLAYING);

  /* we need to run a GLib main loop to get the messages */
  loop = g_main_loop_new (NULL, FALSE);
  g_main_loop_run (loop);

  gst_element_set_state (bin, GST_STATE_NULL);

  gst_object_unref (bin);

  return 0;
}

Thank you

 Victor



-- 
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/spectrum-while-playing-a-file-tp3044123p3044123.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.




More information about the gstreamer-devel mailing list