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

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



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 <renesd@xxxxxxxxx> wrote:
> Cool, thanks.
>
> Committed revision 1482.
>
> On Wed, Jul 9, 2008 at 12:39 PM, Forrest Voight <voights@xxxxxxxxx> 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 <renesd@xxxxxxxxx> 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 <brian@xxxxxxxxxxxxxxxxxxx> 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 <renesd@xxxxxxxxx> wrote:
>>>>>
>>>>> Cool, thanks.  I'll try and patch it tonight (+ 9 hours).
>>>>>
>>>>> cu,
>>>>>
>>>>> On Wed, Jul 9, 2008 at 1:09 AM, Forrest Voight <voights@xxxxxxxxx> 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 <renesd@xxxxxxxxx> 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 <voights@xxxxxxxxx>
>>>>> >> wrote:
>>>>> >>> OK, I'll work on unit tests and a version check.
>>>>> >>>
>>>>> >>> On Mon, Jun 16, 2008 at 11:52 AM, Lenard Lindstrom <len-l@xxxxxxxxx>
>>>>> >>> 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 <renesd@xxxxxxxxx>:
>>>>> >>>>
>>>>> >>>>> 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 <voights@xxxxxxxxx>
>>>>> >>>>> wrote:
>>>>> >>>>> > Thanks!
>>>>> >>>>> >
>>>>> >>>>> > On Fri, Jun 13, 2008 at 7:31 PM, Lenard Lindstrom
>>>>> >>>>> > <len-l@xxxxxxxxx> 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
>>>>> >>>> <len_l@xxxxxxxxx>
>>>>> >>>>
>>>>> >>>>
>>>>> >>>
>>>>> >>
>>>>> >
>>>>
>>>>
>>>
>>
>