Rendering 1 Second of Audio Data
python
posted: Apr, 28th 2010 | jump to bottom
#!/usr/bin/env python # Copyright (c) 2010 Jacob Joaquin, jacobjoaquin@gmail.com # Slipmat -- http://slipmat.noisepages.com/ import math import itertools sr = 44100 ksmps = 10 class Mixer: '''A simple mixer.''' def __init__(self, source1, source2): self.s1 = source1 self.s2 = source2 def __iter__(self): self.index = 0 self.iter_1 = (i for i in self.s1) self.iter_2 = (i for i in self.s2) return self def next(self): if self.index >= ksmps: raise StopIteration self.index += 1 return self.iter_1.next() + self.iter_2.next() class Run: '''Render frames over time.''' def __init__(self, dur=1.0): self.dur = dur def __iter__(self): self.index = 0 return self def next(self): if self.index >= (self.dur * sr) / ksmps: raise StopIteration self.index += 1 return self.index class Sine: '''A sine wave oscillator.''' def __init__(self, amp=1.0, freq=440, phase=0.0): self.amp = amp self.freq = float(freq) self.phase = phase def __iter__(self): self.index = 0 return self def next(self): if self.index >= ksmps: raise StopIteration self.index += 1 v = math.sin(self.phase * 2 * math.pi) self.phase += self.freq / sr return v * self.amp if __name__ == "__main__": a1 = Sine(0.5, 440) a2 = Sine(0.5, 440 * 2 ** (7 / 12.0)) amix = Mixer(a1, a2) for frame in Run(1.0): print frame, ':' for sample in amix: print '\t', sample
172 views




