import audio RATE = 8192 # Initialize the audio stuff audio.setrate(3) audio.setoutgain(100) # for speaker play = audio.write def samp(n): savegain = audio.getoutgain() try: audio.setoutgain(0) x = raw_input('Hit Enter to sample ' + `n` + ' seconds: ') return audio.read(n*RATE) finally: audio.setoutgain(savegain) def echo(s, delay, gain): return s[:delay] + audio.add(s[delay:], audio.amplify(s, gain, gain)) def save(s, file): f = open(file, 'w') f.write(s) def load(file): return loadfp(open(file, 'r')) def loadfp(fp): s = '' while 1: buf = fp.read(16*1024) if not buf: break s = s + buf return s def unbias(s): if not s: return s a = audio.chr2num(s) sum = 0 for i in a: sum = sum + i bias = (sum + len(a)/2) / len(a) print 'Bias value:', bias if bias: for i in range(len(a)): a[i] = a[i] - bias s = audio.num2chr(a) return s # Stretch by a/b. # Think of this as converting the sampling rate from a samples/sec # to b samples/sec. Or, if the input is a bytes long, the output # will be b bytes long. # def stretch(s, a, b): y = audio.chr2num(s) m = len(y) out = [] n = m * b / a # i, j will walk through y and out (step 1) # ib, ja are i*b, j*a and are kept as close together as possible i, ib = 0, 0 j, ja = 0, 0 for j in range(n): ja = ja+a while ib < ja: i = i+1 ib = ib+b if i >= m: break if ib = ja: out.append(y[i]) else: out.append((y[i]*(ja-(ib-b)) + y[i-1]*(ib-ja)) / b) return audio.num2chr(out) def sinus(freq): # return a 1-second sine wave from math import sin, pi factor = 2.0*pi*float(freq)/float(RATE) list = range(RATE) for i in list: list[i] = int(sin(float(i) * factor) * 127.0) return audio.num2chr(list) def softclip(s): if '\177' not in s and '\200' not in s: return s num = audio.chr2num(s) extremes = (-128, 127) for i in range(1, len(num)-1): if num[i] in extremes: num[i] = (num[i-1] + num[i+1]) / 2 return audio.num2chr(num) def demo(): gday = load('gday')[1000:6000] save(gday, 'gday0') gg = [gday] for i in range(1, 10): for g in gg: play(g) g = stretch(gday, 10, 10-i) save(g, 'gday' + `i`) gg.append(g) while 1: for g in gg: play(g)