|
|
(4 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| ==generate sound by python ==
| | *:[[20131017:raw sound/image]] |
| <source lang="python">
| | *:[[20131104]] |
| import wave, struct
| |
| | |
| filename = "output.wav"
| |
| nframes=0
| |
| nchannels=1
| |
| sampwidth=2 # 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 = 440
| |
| # 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(100):
| |
| data += struct.pack('h', int(0.5 * max_amplitude))
| |
| for x in range(100):
| |
| data += struct.pack('h', int(-0.5 * max_amplitude))
| |
| | |
| w.writeframesraw(data)
| |
| | |
| w.close()
| |
| </source>
| |
| | |
| == Generating "Raw" Images ==
| |
| {{:Raw image}}
| |