[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Patch - Re-add music support for file-like objects



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 <brian@xxxxxxxxxxxxxxxxxxx> 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()
>
>
>