(Original post from 25. Dec. 2011)
I’ve had a fundamental, little problem on my route to a successful audioplayer. I wasn’t sure how to let my AudioFile class interact with my AudioPlayer class.
I use the pyaudiere library and as a small example this is how you would play an audiofile with pyaudiere:
# Start a device with which you can play more than one file device = audiere.open_device() # Load a sound file into memory, then play it looped: l = d.open_file('/path/to/your/audiofile', True) # True for streaming l.play() # Note, I always use True for streaming because when using # an ogg file without streaming, a blue screen occurs on my PC.
The main problem was that, if I create an instance of AudioFile on initialisation of my AudioPlayer class, then I would have to provide a valid path to an audiofile which would not allow for having an empty track folder (No files in the folder => no valid paths => Error on initialisation).
However, if I choose to initiate an AudioFile instance outside AudioPlayer, I had no control over the instance from the AudioPlayer class which is rubbish, too.
As a consequence, I decided to create an attribute called
When pressing any of the controls, I would call the following method:
# Avoids NoneTypeError when calling NoneType.stop() if self.track.__class__.__name__ == "AudioFile":
That way, I managed to avoid the invalid path problem at the beginning and also sidestep the control problem. I know, it isn’t the most elegant way of dealing with this, but it is good enough for now…