Hi,<br><br>Here&#39;s an interesting one, possibly o/t for this list, but I&#39;ll be cheeky and ask anyway. :)<br><br>I&#39;m writing a meditation timer program in Python, it waits for &#39;n&#39; minutes then plays an ogg encoded bell sound.&nbsp; Everything is great, got the GUI and it plays the sound via a GStreamer playbin.
<br><br>My problem is that there is a slight delay between the end of the time period and the sound playing as playbin loads it.&nbsp; So I think I need to read the file into memory during my program initialisation and play it from there rather than the disk.
<br><br>I was playing with the code below, but when I try to add the buffer into the pipeline with &quot;gst.element_link_many(buffer, decode)&quot;, it complains it&#39;s not a gstreamer object.<br><br>My question is, can anyone give me any guidance on how to pre-buffer / pre-decode the ogg sound, or what I&#39;m doing wrong with this buffer please?
<br><br>Thanks,<br>
<br>
Rich.<br><br>-----SOF<br>#!/usr/bin/python<br><br>import os<br>import pygst<br>pygst.require(&quot;0.10&quot;)<br>import gst<br><br>class playit:<br>&nbsp;&nbsp;&nbsp; def main(self):<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; size = os.path.getsize(&quot;./test.ogg&quot;)
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; file = open(&quot;./test.ogg&quot;,&quot;r&quot;)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; # Construct the GStreamer pipeline&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; player = gst.Pipeline(&quot;testplayer&quot;)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #Buffer source<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffer = gst.buffer_new_and_alloc
(size)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffer = file.read<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #Binary decoder<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; decode = gst.element_factory_make(&quot;decodebin&quot;, &quot;decode&quot;)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; decode.connect(&quot;new-decoded-pad&quot;, self.OnDynamicPad
)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; player.add(decode)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #Audio converter<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; converter = gst.element_factory_make(&quot;audioconvert&quot;,&quot;converter&quot;)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; player.add(converter)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #ALSA Sink&nbsp;&nbsp;&nbsp; 
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sink = gst.element_factory_make(&quot;alsasink&quot;,&quot;sink&quot;)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; player.add(sink)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #Link them up<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; gst.element_link_many(buffer, decode)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; gst.element_link_many(converter, sink)&nbsp;&nbsp;&nbsp; 
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #Play<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; player.set_state(gst.STATE_PLAYING)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; def OnDynamicPad(self, dbin, pad, islast):<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pad.link(self.converter.get_pad(&quot;sink&quot;))<br>&nbsp;&nbsp;&nbsp; <br>if __name__ == &quot;__main__&quot;:
<br>&nbsp;&nbsp;&nbsp; gsttest = playit()<br>&nbsp;&nbsp;&nbsp; gsttest.main()<br><br>------EOF<br><br>-- <br><a href="http://quietwatercourse.wordpress.com">http://quietwatercourse.wordpress.com</a> <br><a href="http://www.myspace.com/quietwatercourse">
http://www.myspace.com/quietwatercourse</a><br><br>Visit my sites, I don&#39;t bite unless you&#39;re in fishnets!