LP #116990; GNOME #436192; adds a volume element in the output filterbin to
help caps negociation which seems to cause crackling sound with some ALSA
hardware at high volume

diff -Nur rhythmbox-0.11.2/backends/gstreamer/rb-player-gst.c rhythmbox-0.11.2.new/backends/gstreamer/rb-player-gst.c
--- rhythmbox-0.11.2/backends/gstreamer/rb-player-gst.c	2007-10-11 12:19:50.000000000 +0200
+++ rhythmbox-0.11.2.new/backends/gstreamer/rb-player-gst.c	2007-10-11 12:21:11.000000000 +0200
@@ -556,6 +556,7 @@
 		GList *l;
 		GstElement *queue;
 		GstElement *audioconvert;
+		GstElement *volume;
 		GstPad *ghostpad;
 
 		/* setup filterbin,and insert the leading audioconvert */
@@ -574,15 +575,19 @@
 		gst_element_add_pad (mp->priv->filterbin, ghostpad);
 		gst_object_unref (pad);
 
-
 		/* set up the sinkbin with it's tee element */
 		mp->priv->sinkbin = gst_bin_new (NULL);
 		mp->priv->tee = gst_element_factory_make ("tee", NULL);
 		queue = gst_element_factory_make ("queue", NULL);
 
+		/* add a volume element which seems to help negociating proper
+		 * pads with alsa and works around crackling sound; see GNOME
+		 * #436192 and LP #116990 */
+		volume = gst_element_factory_make ("volume", NULL);
+
 		/* link it all together and insert */
-		gst_bin_add_many (GST_BIN (mp->priv->sinkbin), mp->priv->filterbin, mp->priv->tee, queue, sink, NULL);
-		gst_element_link_many (mp->priv->filterbin, mp->priv->tee, queue, sink, NULL);
+		gst_bin_add_many (GST_BIN (mp->priv->sinkbin), mp->priv->filterbin, mp->priv->tee, volume, queue, sink, NULL);
+		gst_element_link_many (mp->priv->filterbin, mp->priv->tee, volume, queue, sink, NULL);
 
 		pad = gst_element_get_pad (mp->priv->filterbin, "sink");
 		ghostpad = gst_ghost_pad_new ("sink", pad);
