Hmm, ok ich hab memory falsch interpretiert als ich das gelesen habe...
Ich hab jetzt versucht mir das zu vereinfachen, mit der anleitung hier:
https://ccrma.stanford.edu/courses/422/ ... aveFormat/
hier ist mein code der aber nicht funktioniert:
Code: Alles auswählen
class Wav:
def __init__(self, **kwargs):
self.samples = 4
self.data = "abcd"
self.channels = 1
self.bitspersample = 8
self.byterate = 8000
self.headers = [
("Chunk ID", Bytes(4, "RIFF", "big")),
("Chunk Data Size", Bytes(4, "", "little")), # filesize-8
("RIFF Type", Bytes(4, "WAVE", "big")),
("Subchunk1ID", Bytes(4, "fmt ", "big")),
("Subchunk1Size", Bytes(4, "\x16", "little")),
("AudioFormat", Bytes(2, "\x01", "little")),
("NumChannels", Bytes(2, "\x01", "little")), # 1= mono, 2=stereo...
("SampleRate", Bytes(4, numToAscii(self.byterate), "little")),
("ByteRate", Bytes(4, numToAscii(int(self.byterate*self.channels*self.bitspersample/8.0)), "little")), # == SampleRate * NumChannels * BitsPerSample/8
("BlockAlign", Bytes(4, numToAscii(int(1*self.bitspersample/8)), "little")), #== NumChannels * BitsPerSample/8
("BitsPerSample", Bytes(2, numToAscii(self.bitspersample), "little")),
("Subchunk2ID", Bytes(4, "data", "big")),
("Subchunk2Size", Bytes(4, numToAscii(self.samples * self.channels * self.bitspersample), "little")),
("Data", Bytes(self.samples, self.data, "little"))
]
def __str__(self):
ret = ""
for key, value in self.headers:
ret += str(value)
return ret
>>> f = Wav()
>>> str(f)
'RIFF\x00\x00\x00\x00WAVEfmt \x16\x00\x00\x00\x01\x00\x01\x00\xf4\x1f\x00\x00\xf4\x1f\x00\x00\x10\x00\x00\x00\x80\x00data \x00\x00\x00dcba'
>>> winsound.PlaySound('RIFF\x00\x00\x00\x00WAVEfmt \x16\x00\x00\x00\x01\x00\x01\x00\xf4\x1f\x00\x00\xf4\x1f\x00\x00\x10\x00\x00\x00\x80\x00data \x00\x00\x00dcba', winsound.SND_MEMORY|winsound.SND_NODEFAULT)
Traceback (most recent call last):
File "<pyshell#153>", line 1, in <module>
winsound.PlaySound('RIFF\x00\x00\x00\x00WAVEfmt \x16\x00\x00\x00\x01\x00\x01\x00\xf4\x1f\x00\x00\xf4\x1f\x00\x00\x10\x00\x00\x00\x80\x00data \x00\x00\x00dcba', winsound.SND_MEMORY|winsound.SND_NODEFAULT)
RuntimeError: Failed to play sound
Warum funktioniert das denn nicht?
Das sollte jetzt eine wav datei im memory bauen und die dann abspielen.
Edit:
Code: Alles auswählen
class Bytes:
def __init__(self, num=4, data="", endian="little"):
self.num = num
self.endian = endian
self.data = self.setData(data)
def __str__(self):
return self.data
def __repr__(self):
return self.data
def setData(self, data):
if len(data) > self.num:
raise ValueError, "data to long"
zeroBytes = "\x00"*(self.num-len(data))
data = zeroBytes + data
if self.endian == "little":
data = data[::-1]
return data
def numToAscii(num):
Hex = hex(num)[2:]
al = ""
if len(Hex) %2:
Hex += "0" + Hex
for i in xrange(len(Hex)/2):
exec "al += '\\x%s'" %(Hex[i:i+2])
return al
hab ich einfach nur so hingeklatscht.
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)