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) f = open("sound2.py", "wr").write(str(repr(b64))) snd = binascii.a2b_base64(b64) f = open("sound2.py", "wr").write(str(repr(snd))) snd = open("sound2.py", "rb").read() f = StringIO(snd) mixer.init() snd = mixer.Sound(f) On Thu, Feb 28, 2008 at 7:17 PM, PyMike <[EMAIL PROTECTED]> wrote: > f = open("shoot.wav") > s = f.read() > f.close() > print len(s) > print len(repr(s)) > print len(eval(repr(s))) > > 217 > 675 > 217 > > > On Thu, Feb 28, 2008 at 7:11 PM, Douglas Bagnall <[EMAIL PROTECTED]> > wrote: > > > PyMike wrote: > > > > > After doing that, this is the output: > > > > > > snd = 'RIFFZB\x00\x00WAVEfmt > > > > > \x10\x00\x00\x00\x01\x00\x01\x00D\xac\x00\x00\x88X\x01\x00\x02\x00\x10\x00data6B\x00\x00y\x18\x90\x17\xaf\x16\xd7\x15\x07\x15>\x14}\x13\xc3\x12\x10\x12d\x11\xbe\x10\x1f\x10\x85\x0f\xf1\x0ec\x0e\xd9\rU\r\xd6\x0c\\\x0c\xe6\x0bu\x0b\x07\x0b\x9e\n\xd0\xfd\\\xd9\xcc\xda/\xdc\x84\xdd\xcd\xde\t\xe0:\xe1`\xe2z\xe3\x8a\xe4\x90\xe5\x8c\xe6\x7f\xe7h\xe8I\xe9"\xea\xf2\xea\xbb\xeb|\xec6\xed\xea\xed\x96\xee<\xef\xdc\xefv\xf0\n\xf1\x99\xf1"\xf2\xa6\xf2%\xf3\xa0\xf3\x16\xf4\x88\xf4\xf5\xf4^\xf5\xc4\xf5%\xf6\x83\xf6\xde\xf65\xf7\x89\xf7\xd9\xf7\'\xf8r\xf8\xba\xf8\xff\xf8B\xf9\x82\xf9\xc0\xf9\xb0\x12<*\xa9(&\'\xb0%I$\xef"\xa2!a > > > -\x1f\x03\x1e\xe5\x1c\xd2\x1b\xc8' > > > > That's way too short. Are you sure shoot.wav is complete? What is > > len(s), len(repr(s)), and len(eval(repr(s))? The last should be the > > same as the first, and the same as the file size reported by the OS. The > > middle one will be about 3 times as long. > > > > Also, just to be sure you got this, where you go: > > > > wav = StringIO(snd) > > > > That snd shouldn't be the same as repr(s), but the same as s. repr(s) is > > just a convenient way of getting it into a source file. You *don't* want > > to be going snd = repr(s). > > > > douglas > > > > > But I still get the same error. > > > > > > On Thu, Feb 28, 2008 at 5:20 PM, Douglas Bagnall < > > [EMAIL PROTECTED]> > > > wrote: > > > > > >> PyMike wrote: > > >> > > >>> I tried that out, and it got close to working. But I get an > > >> "unrecognized > > >>> file-type"' error > > >>> Code is below. What did I do wrong? > > >>> > > >>> f = open("shoot.wav") > > >>> s = f.read() > > >>> snd = repr(s) > > >>> print snd > > >> > > >> Sorry, I wasn't clear. You don't need to repr() the string if you are > > >> using it directly. You would only do that if you were writing it to a > > >> file in the form of a string, like so: > > >> > > >> f = open("sound.py", "w") > > >> f.write("snd = " + repr(s)) > > >> > > >> Then sound.py becomes the basis of your decoding script. The string > > you > > >> pass to mixer.Sound should look like lots of these: "\x00", not lots > > of > > >> these "\\x00". > > >> > > >> BTW, if you are concerned about the length, as other threads would > > >> suggest, you would be better off using base64 encoding, possibly with > > a > > >> bz2 stage. > > >> > > >> import binascii #or base64 (same functions with different names) > > >> > > >> f = open("shoot.wav") > > >> snd = f.read() > > >> > > >> b64 = binascii.b2a_base64(snd) > > >> > > >> # save b64 to file like above, then > > >> > > >> snd = binascii.a2b_base64(b64) > > >> #etc > > >> > > >> To compress the wav before base64 encoding it, try bz2.compress(). > > >> > > >> > > >> douglas > > >> > > >> > > >> > > >> > > > > > > > > > > > > > > > -- > - PyMike -- - PyMike