I realised today that the docs say: "Music can only be loaded from filenames, not python file objects like the other pygame loading functions."
So here's a patch to correct the docs. On Tue, Jul 22, 2008 at 7:38 AM, René Dudfield <[EMAIL PROTECTED]> wrote: > cool, thanks! > > Committed revision 1524. > > cu, > > On Mon, Jul 21, 2008 at 12:26 PM, Forrest Voight <[EMAIL PROTECTED]> wrote: >> Fixed both Brian and I's deadlocking problem. >> >> Biran's program works all the way up to the last music (house_lo.mp3) >> which has an odd header (SDL_mixer's fault, patch send in.) >> >> The ogg get_busy() problem is SDL_mixer's fault. >> pygame.mixer.music.get_busy() directly calls SDL_mixer. >> >> On Sun, Jul 20, 2008 at 9:55 PM, Forrest Voight <[EMAIL PROTECTED]> wrote: >>> For the deadlock on reloading a sound, I'm working on it, I earlier >>> discovered the problem (threaded rwops deadlocks on exception in >>> file-like due to bug). >>> >>> For the mp3 not loading, it is another magic problem. It is not an ID3 >>> tag but some other weird header not caught. >>> >>> The MID file doesn't play when loading it normally, right? I'm not >>> sure what the problem is here, but it works for me and Lenard. >>> >>> Lenard, I'll look into the ogg problem. >>> >>> On Sun, Jul 20, 2008 at 7:50 PM, René Dudfield <[EMAIL PROTECTED]> wrote: >>>> hi, >>>> >>>> nice testing :) >>>> >>>> I think this will have to be ifdef'd out for 1.8.1, unless someone can >>>> fix it in the next couple of days. >>>> >>>> cu, >>>> >>>> >>>> On Mon, Jul 21, 2008 at 4:26 AM, Brian Fisher <[EMAIL PROTECTED]> wrote: >>>>> I got some time to play with this more, testing both on my Vista machine >>>>> and >>>>> OS X 10.5. >>>>> >>>>> with SDL_Mixer 1.2.8, ogg and mp3 and mid and mod all seem to be able to >>>>> load from a file or file-like object on my windows machine, so I think >>>>> Forrest is right about the level of support in SDL_Mixer 1.2.8 >>>>> >>>>> ...but there were a few of issues... >>>>> >>>>> 1. if I try to call mixer.music.load again after having tried to play a >>>>> song >>>>> from a file or file-like object, it hangs on the loading >>>>> 2. the pygame examples/data/house_lo.mp3 plays silence when I try to play >>>>> it >>>>> from a filename, but loading from a file or file-like object I get an >>>>> exception of unrecognized file type (which must be the ID3 tag thing >>>>> Forrest >>>>> called out earlier?) >>>>> 3. the mid file claims to load but plays nothing, regardless of how I load >>>>> it >>>>> >>>>> 2 and 3 may be issues with the file, and are not likely to be problem's >>>>> with >>>>> loading from rw_objects at all, but issue 1 (hanging on trying to load a >>>>> different piece of music after loading from a file-like object) seems >>>>> like a >>>>> serious problem that is the responsibility of the loading from rwobject >>>>> code >>>>> to fix. >>>>> >>>>> I have no idea what the cause of it is - from the prints for a file-like >>>>> object loader, it seems to do the exact same sequence of seek, tell and >>>>> read >>>>> as when it doesn't hang, except that the load call simply doesn't return. >>>>> I >>>>> had to rebuild pygame with the mixer version check changed of course, but >>>>> It >>>>> happens for both my Leopard and Vista machines, so I don't think it's >>>>> anything about my builds in particular. >>>>> >>>>> here's the code I was running (with Forrest's sound files and the files >>>>> from >>>>> pygame) >>>>> ------------------------- >>>>> import pygame >>>>> import time >>>>> >>>>> pygame.init() >>>>> pygame.display.set_mode((320,200)) >>>>> pygame.event.pump() >>>>> files = ["sound.ogg", "sound.mp3", "sound.mod", "sound.mid", >>>>> "house_lo.ogg", >>>>> "house_lo.mp3"] >>>>> >>>>> class file_like_wrapper(): >>>>> def __init__(self, fname): >>>>> self.my_fname = fname >>>>> self.my_file = file(fname, "rb") >>>>> >>>>> def read(self, size=None): >>>>> print self.my_fname,"read", size >>>>> if size != None: >>>>> return self.my_file.read(size) >>>>> else: >>>>> return self.my_file.read() >>>>> >>>>> def seek(self, offset, whence): >>>>> print self.my_fname,"seek",offset, whence >>>>> return self.my_file.seek(offset, whence) >>>>> >>>>> def tell(self): >>>>> tell_pos = self.my_file.tell() >>>>> print self.my_fname,"tell", tell_pos >>>>> return tell_pos >>>>> >>>>> def close(self): >>>>> print self.my_fname,"close" >>>>> return self.my_file.close() >>>>> >>>>> for filename in files: >>>>> print "loading",filename,"..." >>>>> >>>>> print "from filename", >>>>> sound = pygame.mixer.music.load(filename) >>>>> print "loaded!" >>>>> pygame.mixer.music.play() >>>>> print "playing!" >>>>> time.sleep(3) >>>>> pygame.event.pump() >>>>> pygame.mixer.music.stop() >>>>> >>>>> print "loading from file-like object", >>>>> sound = pygame.mixer.music.load(file_like_wrapper(filename)) >>>>> print "loaded!" >>>>> pygame.mixer.music.play() >>>>> print "playing!" >>>>> time.sleep(3) >>>>> pygame.event.pump() >>>>> print "done playing!" >>>>> pygame.mixer.music.stop() >>>>> >>>>> print "loading from file object", >>>>> sound = pygame.mixer.music.load(file(filename, "rb")) >>>>> print "loaded!" >>>>> pygame.mixer.music.play() >>>>> print "playing!" >>>>> time.sleep(3) >>>>> pygame.event.pump() >>>>> print "done playing!" >>>>> pygame.mixer.music.stop() >>>>> >>>>> >>>>> >>>> >>> >> >
Index: src/music.doc =================================================================== --- src/music.doc (revision 1673) +++ src/music.doc (working copy) @@ -14,12 +14,11 @@ load Load a music file for playback pygame.mixer.music.load(filename): return None +pygame.mixer.music.load(object): return None -This will load a music file and prepare it for playback. If a music stream -is already playing it will be stopped. This does not start the music playing. - -Music can only be loaded from filenames, not python file objects like the -other pygame loading functions. +This will load a music filename/file object and prepare it for playback. If a +music stream is already playing it will be stopped. This does not start the music +playing. <END>