User:Elleke Hageman/Python: Sound and Image
< User:Elleke Hageman
Revision as of 10:41, 14 October 2013 by Elleke Hageman (talk | contribs)
Sound #1
import wave, struct
filename = "sound.wav"
nframes=0
nchannels=1
sampwidth=1 # in bytes so 2=16bit, 1=8bit
framerate=44100
bufsize=2048
w = wave.open(filename, 'w')
w.setparams((nchannels, sampwidth, framerate, nframes, 'NONE', 'not compressed'))
max_amplitude = float(int((2 ** (sampwidth * 8)) / 2) - 1)
# split the samples into chunks (to reduce memory consumption and improve performance)
#for chunk in grouper(bufsize, samples):
# frames = ''.join(''.join(struct.pack('h', int(max_amplitude * sample)) for sample in channels) for channels in chunk if channels is not None)
# w.writeframesraw(frames)
freq = 15000
# this means that FREQ times a second, we need to complete a cycle
# there are FRAMERATE samples per second
# so FRAMERATE / FREQ = CYCLE LENGTH
cycle = framerate / freq
data = ''
for i in range(10):
for x in range(20000):
data += struct.pack('h', int(0.4 * max_amplitude))
for x in range(1000):
data += struct.pack('h', int(-0.8 * max_amplitude))
w.writeframesraw(data)
w.close()
Sound #2
import wave, struct
filename = "sound2.wav"
nframes=0
nchannels=1
sampwidth=2
framerate=44100
bufsize=2048
w = wave.open(filename, 'w')
w.setparams((nchannels, sampwidth, framerate, nframes, 'NONE', 'not compressed'))
max_amplitude = float(int((2 ** (sampwidth * 8)) / 2) - 1)
freq = 1200
cycle = framerate / freq
data = ''
for i in range(500):
for _ in range(cycle/1):
data += struct.pack('h', int(0.5 * max_amplitude))
for _ in range(cycle/1):
data += struct.pack('h', int(-0.5 * max_amplitude))
freq = 200
cycle = framerate / freq
for _ in range(100):
data = ''
cycle = framerate / freq
for _ in range(190):
for _ in range(cycle/2):
data += struct.pack('h', int(0.5 * max_amplitude))
data += struct.pack('h', 0)
for _ in range(cycle/2):
data += struct.pack('h', int(-0.5 * max_amplitude))
data += struct.pack('h', 0)
w.writeframesraw(data)
w.close()