On windows, you must open binary files as binary: f = open("sound.wav", "rb")
If you don't do this, windows will truncate the file and give no error, though it will work on linux. On 29/02/2008, PyMike <[EMAIL PROTECTED]> wrote: > I tried some others and still get the same error. (error: Unrecognized sound > file type) > > > On Fri, Feb 29, 2008 at 8:00 AM, PyMike <[EMAIL PROTECTED]> wrote: > > > Hi Douglas > > > > Just to let you know, my sound will load and play with pygame without the > string compression. It's a mere 0.18 seconds long. I tried some other sounds > that were short and I got ~around~ the same results. > > > > After editing sound2.py, > > > > "RIFF\x16\xe9\x00\x00WAVEfmt > \x10\x00\x00\x00\x01\x00\x01\x00D\xac\x00\x00\x88X\x01\x00\x02\x00\x10\x00data\xf2\xe8\x00\x00\xd2$\xcf(U\xf0r+\xc3\x16\x0c\xf6\xa7\xdc2\x0bH\xf8\x95\xdcy\xd6\x06!\xbc\x05\x17\xe5\xbf\xe4\xd5\xfa\n\xea'\xedN\xfb\xec!\x055\x88\xecy\xcb\xdf\xc8#\xd2x\x16\xf1\xd0|\xf9\x1f\x02\x86\xe2\x04\xf3\xa4'G\x1c\xfd\xfb7B\x86" > > > > > > import binascii > > from cStringIO import StringIO > > from pygame import mixer > > > > snd = binascii.a2b_base64(__doc__) > > f = StringIO(snd) > > > > mixer.init() > > sound = mixer.Sound(f) > > sound.play() > > > > I get this traceback: > > > > >>> > > Traceback (most recent call last): > > File "C:\Documents and > Settings\Michael\Desktop\sound2.py", line 8, in <module> > > > > snd = binascii.a2b_base64(__doc__) > > Error: Incorrect padding > > >>> > > > > Then I switched a2b_base64 to b2a_base64 and got this traceback: > > > > >>> > > Traceback (most recent call last): > > File "C:\Documents and > Settings\Michael\Desktop\sound2.py", line 12, in <module> > > sound = mixer.Sound(f) > > error: Unrecognized sound file type > > >>> > > > > I'm going to try a few other sound files real quick. > > > > > > > > > > > > > > On Fri, Feb 29, 2008 at 1:56 AM, Douglas Bagnall <[EMAIL PROTECTED]> > wrote: > > > > > hi Mike > > > > > > This is your main problem: > > > > > > >> print len(s) > > > >> > > > >> 217 > > > > > > Your wave file is broken. In 16 bit mono, 217 bytes leaves room for 94 > > > samples when you take away the headers. That's about 1/500 of a second > > > at 44.1 kHz. Your sound is not actually that short: the file is broken. > > > > > > > > > Then later you wrote: > > > > > > > f = open("shoot.wav") > > > > s = f.read() > > > > f.close() > > > > print len(s) > > > > print len(repr(s)) > > > > print len(eval(repr(s))) > > > > > > > > > > > b64 = binascii.b2a_base64(snd) > > > > > > > > > You mean binascii.b2a_base64(s). > > > snd is not defined yet. > > > > > > > > > > > > > > f = open("sound2.py", "wr").write(str(repr(b64))) > > > > > > repr() always returns a string -- there's no need for str(). > > > Also, f here will always be None, because it is the result of > > > open().write() not open(). > > > > > > Anyway, at this point sound2.py will contain a python representation of > > > a sound, and nothing else, which incidentally makes it the module's > > > __doc__ string. > > > > > > So then, if you modify sound2.py, adding the following lines: > > > > > > > > > 'RIFFZB\x00\x00WAVEfmt \x10\x00[...]' #this is the existing line > > > > > > import binascii > > > from cStringIO import StringIO > > > from pygame import mixer > > > > > > snd = binascii.a2b_base64(__doc__) > > > > > > f = StringIO(snd) > > > > > > mixer.init() > > > sound = mixer.Sound(f) > > > sound.play() > > > > > > > > > It will play. At least it would if you didn't have a corrupt wav file. > > > > > > > > > > > > >>>>>> I tried that out, and it got close to working. But I get an > > > >>>>> "unrecognized file-type"' error > > > > > > > > > It always helps if you say where an exception occurs. Pasting the > > > traceback is good. > > > > > > > > > > > > douglas > > > > > > > > > > > -- > > - PyMike > > > > -- > - PyMike -- Alistair Buxton [EMAIL PROTECTED]