I'm also able to play FLAC audio. I think the problem is that SDL_mixer detects MP3 files through the first and second bytes (the first is '\xff'), and files with ID3 tags have a special header first, so SDL_mixer defaults to mikmod decoding, which determines it is invalid.
So, some MP3 files work and some don't. I was able to find an MP3 file without tags and it worked. This is an SDL_mixer bug. On Sat, Jul 12, 2008 at 4:44 PM, Forrest Voight <[EMAIL PROTECTED]> wrote: > Using SDL_mixer SVN, I'm able to load & play WAV and OGG. > > MP3 gives me the 'Module format not recognized' error. I'm looking > into that now... > > On Sat, Jul 12, 2008 at 3:58 PM, Brian Fisher <[EMAIL PROTECTED]> wrote: >> My automated build machines both use 1.2.8, and they both fail to load mp3 >> (what the test is currently trying) >> >> so it seems that 1.2.8 doesn't support MP3. This post seems to indicate that >> OGG and MOD should be supported: >> http://listas.apesol.org/pipermail/sdl-libsdl.org/2007-December/063633.html >> I tried OGG on my Mac though, and it just seemed to hang :( I don't have a >> mod file to try at the moment. >> >> So Forrest, what formats were you able to load when you were testing the >> patch? >> >> >> On Sat, Jul 12, 2008 at 12:13 PM, Forrest Voight <[EMAIL PROTECTED]> wrote: >>> >>> Rene: what version of SDL_mixer are you using? >>> >>> I think I was wrong... SDL_mixer 1.2.8 supports OGG, MP3, MID, and MOD >>> music. >>> >>> Only SVN supports WAV. >>> >>> On Sat, Jul 12, 2008 at 1:40 PM, Brian Fisher <[EMAIL PROTECTED]> >>> wrote: >>> > by svn version do you mean 1.3, or an upcoming bug-fix release of 1.2? >>> > >>> > >>> > On Sat, Jul 12, 2008 at 9:27 AM, Forrest Voight <[EMAIL PROTECTED]> >>> > wrote: >>> >> >>> >> The current sdl_mixer svn only supports mikmod. The svn version >>> >> supports all of those formats. >>> >> >>> >> On Sat, Jul 12, 2008 at 4:55 AM, René Dudfield <[EMAIL PROTECTED]> >>> >> wrote: >>> >> > hi, >>> >> > >>> >> > I just wrote a test for it (see test/mixer_test.py). >>> >> > >>> >> > Unfortunately it doesn't seem to be able to load from a file like >>> >> > object for mp3, ogg, or wav files. >>> >> > >>> >> > Any ideas? >>> >> > >>> >> > >>> >> > ====================================================================== >>> >> > ERROR: test_mixer_music__load (__main__.MixerModuleTest) >>> >> > >>> >> > ---------------------------------------------------------------------- >>> >> > Traceback (most recent call last): >>> >> > File "test\mixer_test.py", line 207, in test_mixer_music__load >>> >> > pygame.mixer.music.load(open(musfn)) >>> >> > error: Module format not recognized >>> >> > >>> >> > >>> >> > cu, >>> >> > >>> >> > On Thu, Jul 10, 2008 at 11:33 PM, René Dudfield <[EMAIL PROTECTED]> >>> >> > wrote: >>> >> >> Cool, thanks. >>> >> >> >>> >> >> Committed revision 1482. >>> >> >> >>> >> >> On Wed, Jul 9, 2008 at 12:39 PM, Forrest Voight <[EMAIL PROTECTED]> >>> >> >> wrote: >>> >> >>> All we need to do is make RwopsFromPythonThreaded not try to make a >>> >> >>> standard rwop, because it shouldn't. >>> >> >>> >>> >> >>> And it is correct, RwopsFromPythonThreaded is obviously meant to be >>> >> >>> used like this (hence the threaded). >>> >> >>> >>> >> >>> Attached is the updated patch. >>> >> >>> >>> >> >>> Forrest >>> >> >>> >>> >> >>> On Tue, Jul 8, 2008 at 9:38 PM, René Dudfield <[EMAIL PROTECTED]> >>> >> >>> wrote: >>> >> >>>> I guess we need to store a reference to the file object somewhere, >>> >> >>>> and >>> >> >>>> release the reference at cleanup. >>> >> >>>> >>> >> >>>> >>> >> >>>> On Wed, Jul 9, 2008 at 9:40 AM, Brian Fisher >>> >> >>>> <[EMAIL PROTECTED]> wrote: >>> >> >>>>> Hmmm... from looking at the patch, it seems that it does not fix >>> >> >>>>> the >>> >> >>>>> crash >>> >> >>>>> that Forrest discovered (where the file object falls out of scope >>> >> >>>>> and gets >>> >> >>>>> deleted so the rwobject ends up having bad pointers) - Is that >>> >> >>>>> correct >>> >> >>>>> Forrest? >>> >> >>>>> >>> >> >>>>> If that is the case, it seems to me that the feature >>> >> >>>>> implementation >>> >> >>>>> isn't >>> >> >>>>> finished yet, so the patch as sent is not ready to be applied to >>> >> >>>>> pygame >>> >> >>>>> 1.8.1. >>> >> >>>>> >>> >> >>>>> I would imagine that in most cases, people wouldn't be keeping >>> >> >>>>> around a >>> >> >>>>> python reference to the file object they would pass in (cause it >>> >> >>>>> loads the >>> >> >>>>> music up in some other function or something), which means most >>> >> >>>>> attempts to >>> >> >>>>> use this feature would get crashes and bad behavior as the mixer >>> >> >>>>> tries to >>> >> >>>>> stream the music, but the file object falls out of scope - and >>> >> >>>>> the >>> >> >>>>> crash >>> >> >>>>> would happen at what seems like a random point in time. >>> >> >>>>> >>> >> >>>>> Also, as I said in an earlier email, I don't think this patch is >>> >> >>>>> exposing an >>> >> >>>>> existing bug, I think it uses rwobject in a way that's not >>> >> >>>>> intended, >>> >> >>>>> as >>> >> >>>>> other "load-from-file" pygame uses don't require the file-object >>> >> >>>>> to >>> >> >>>>> exist >>> >> >>>>> longer than it takes for the load function to return. >>> >> >>>>> >>> >> >>>>> >>> >> >>>>> >>> >> >>>>> On Tue, Jul 8, 2008 at 3:20 PM, René Dudfield <[EMAIL PROTECTED]> >>> >> >>>>> wrote: >>> >> >>>>>> >>> >> >>>>>> Cool, thanks. I'll try and patch it tonight (+ 9 hours). >>> >> >>>>>> >>> >> >>>>>> cu, >>> >> >>>>>> >>> >> >>>>>> On Wed, Jul 9, 2008 at 1:09 AM, Forrest Voight >>> >> >>>>>> <[EMAIL PROTECTED]> >>> >> >>>>>> wrote: >>> >> >>>>>> > I did the version checks. >>> >> >>>>>> > >>> >> >>>>>> > There are currently no tests for pygame.mixer.music, but I'll >>> >> >>>>>> > try >>> >> >>>>>> > to >>> >> >>>>>> > make a test for this. >>> >> >>>>>> > >>> >> >>>>>> > Also, I found a bug in rwobject. It makes a standard SDL_RWops >>> >> >>>>>> > from >>> >> >>>>>> > python file objects but doesn't hold a reference to them. >>> >> >>>>>> > This is shown by doing something like: >>> >> >>>>>> > >>> >> >>>>>> > pygame.mixer.music.load(open('x.mp3')) >>> >> >>>>>> > >>> >> >>>>>> > Then playing it, and pygame crashes. >>> >> >>>>>> > This is not my patch's fault, it just exposes it. >>> >> >>>>>> > >>> >> >>>>>> > Forrest Voight >>> >> >>>>>> > >>> >> >>>>>> > On Tue, Jul 8, 2008 at 2:08 AM, René Dudfield >>> >> >>>>>> > <[EMAIL PROTECTED]> >>> >> >>>>>> > wrote: >>> >> >>>>>> >> hi, >>> >> >>>>>> >> >>> >> >>>>>> >> I think this will have to wait until we put the version >>> >> >>>>>> >> checks >>> >> >>>>>> >> in and >>> >> >>>>>> >> have unittests... ie for pygame 1.9. Unless someone can get >>> >> >>>>>> >> around to >>> >> >>>>>> >> it in the next week. >>> >> >>>>>> >> >>> >> >>>>>> >> >>> >> >>>>>> >> cu, >>> >> >>>>>> >> >>> >> >>>>>> >> >>> >> >>>>>> >> On Wed, Jun 18, 2008 at 2:44 PM, Forrest Voight >>> >> >>>>>> >> <[EMAIL PROTECTED]> >>> >> >>>>>> >> wrote: >>> >> >>>>>> >>> OK, I'll work on unit tests and a version check. >>> >> >>>>>> >>> >>> >> >>>>>> >>> On Mon, Jun 16, 2008 at 11:52 AM, Lenard Lindstrom >>> >> >>>>>> >>> <[EMAIL PROTECTED]> >>> >> >>>>>> >>> wrote: >>> >> >>>>>> >>>> Maybe the test could write a sine wave to a StringIO, load >>> >> >>>>>> >>>> it, >>> >> >>>>>> >>>> then >>> >> >>>>>> >>>> use >>> >> >>>>>> >>>> get_buffer (sound objects do have get_buffer now, right?*) >>> >> >>>>>> >>>> to >>> >> >>>>>> >>>> check >>> >> >>>>>> >>>> it. >>> >> >>>>>> >>>> >>> >> >>>>>> >>>> Lenard >>> >> >>>>>> >>>> >>> >> >>>>>> >>>> * Sorry, I don't have access to latest Python/Pygame at the >>> >> >>>>>> >>>> moment. >>> >> >>>>>> >>>> >>> >> >>>>>> >>>> Quoting René Dudfield <[EMAIL PROTECTED]>: >>> >> >>>>>> >>>> >>> >> >>>>>> >>>>> Hi, >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> nice patch! This will be very useful :) >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> Do you know which version of sdl_mixer allows rwops for >>> >> >>>>>> >>>>> music >>> >> >>>>>> >>>>> (Mix_LoadMUS_RW)? Does it require an SDL_mixer version >>> >> >>>>>> >>>>> check? >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> Are you able to make make any unit tests for using file >>> >> >>>>>> >>>>> likes >>> >> >>>>>> >>>>> with >>> >> >>>>>> >>>>> the >>> >> >>>>>> >>>>> music mixer? We're using unittests for all new code now, >>> >> >>>>>> >>>>> and >>> >> >>>>>> >>>>> it'd >>> >> >>>>>> >>>>> make us feel more safe about adding it in for the 1.8.1 >>> >> >>>>>> >>>>> release. >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> Not really sure how best to test it. I guess just loading >>> >> >>>>>> >>>>> the music >>> >> >>>>>> >>>>> from different filename, and from a python file object >>> >> >>>>>> >>>>> would >>> >> >>>>>> >>>>> be ok >>> >> >>>>>> >>>>> for >>> >> >>>>>> >>>>> now. >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> here's a start on a test for it... >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> data_fname = os.path.join('..', 'examples', 'data') >>> >> >>>>>> >>>>> #note, I just added house_lo.ogg to svn. >>> >> >>>>>> >>>>> oggfn = os.path.join(data_fname, 'house_lo.ogg') >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> pygame.mixer.music.load(oggfn) >>> >> >>>>>> >>>>> pygame.mixer.music.load(open(oggfn)) >>> >> >>>>>> >>>>> oggf = open(oggfn) >>> >> >>>>>> >>>>> pygame.mixer.music.load(oggf) >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> cheers, >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>>> On Sat, Jun 14, 2008 at 9:53 AM, Forrest Voight >>> >> >>>>>> >>>>> <[EMAIL PROTECTED]> >>> >> >>>>>> >>>>> wrote: >>> >> >>>>>> >>>>> > Thanks! >>> >> >>>>>> >>>>> > >>> >> >>>>>> >>>>> > On Fri, Jun 13, 2008 at 7:31 PM, Lenard Lindstrom >>> >> >>>>>> >>>>> > <[EMAIL PROTECTED]> wrote: >>> >> >>>>>> >>>>> >> This is interesting. I am having a look at it. No >>> >> >>>>>> >>>>> >> promise >>> >> >>>>>> >>>>> >> it can >>> >> >>>>>> >>>>> >> go into >>> >> >>>>>> >>>>> >> 1.8.1 though as this is supposed to be a bug fix. >>> >> >>>>>> >>>>> >> >>> >> >>>>>> >>>>> >> Lenard >>> >> >>>>>> >>>>> >> >>> >> >>>>>> >>>>> >> >>> >> >>>>>> >>>>> >> Forrest Voight wrote: >>> >> >>>>>> >>>>> >>> >>> >> >>>>>> >>>>> >>> This patch re-adds support for playing (and queueing) >>> >> >>>>>> >>>>> >>> music from >>> >> >>>>>> >>>>> >>> python file-like objects. >>> >> >>>>>> >>>>> >>> >>> >> >>>>>> >>>>> >>> While support for WAV music streams is still in >>> >> >>>>>> >>>>> >>> SDL_mixer >>> >> >>>>>> >>>>> >>> svn, >>> >> >>>>>> >>>>> >>> there >>> >> >>>>>> >>>>> >>> is support for mp3, mikmod and other formats already. >>> >> >>>>>> >>>>> >>> >>> >> >>>>>> >>>>> >>> >>> >> >>>>>> >>>>> >> >>> >> >>>>>> >>>>> >> >>> >> >>>>>> >>>>> > >>> >> >>>>>> >>>>> >>> >> >>>>>> >>>> >>> >> >>>>>> >>>> >>> >> >>>>>> >>>> -- >>> >> >>>>>> >>>> Lenard Lindstrom >>> >> >>>>>> >>>> <[EMAIL PROTECTED]> >>> >> >>>>>> >>>> >>> >> >>>>>> >>>> >>> >> >>>>>> >>> >>> >> >>>>>> >> >>> >> >>>>>> > >>> >> >>>>> >>> >> >>>>> >>> >> >>>> >>> >> >>> >>> >> >> >>> >> > >>> > >>> > >> >> >