Showing the changes to python (1 of 1 file). Show all
Unified · Split
| @@ -0,0 +1,38 @@ | ||
| 1 | +#! /usr/bin/env python | |
| 2 | + | |
| 3 | +import sys | |
| 4 | +from math import sin, pi | |
| 5 | +from aubio import sink | |
| 6 | +from numpy import array | |
| 7 | + | |
| 8 | +if len(sys.argv) != 2: | |
| 9 | + print 'usage: %s <outputfile>' % sys.argv[0] | |
| 10 | + sys.exit(1) | |
| 11 | + | |
| 12 | +samplerate = 44100 # in Hz | |
| 13 | +pitch = 2200 # in Hz | |
| 14 | +blocksize = 256 # in samples | |
| 15 | +duration = 0.02 # in seconds | |
| 16 | + | |
| 17 | +twopi = pi * 2. | |
| 18 | + | |
| 19 | +duration = int ( 44100 * duration ) # convert to samples | |
| 20 | +attack = 3 | |
| 21 | + | |
| 22 | +period = int ( float(samplerate) / pitch ) | |
| 23 | +sinetone = [ 0.7 * sin(twopi * i/ period) for i in range(period) ] | |
| 24 | +sinetone *= int ( duration / period ) | |
| 25 | +sinetone = array(sinetone, dtype = 'float32') | |
| 26 | + | |
| 27 | +from math import exp, e | |
| 28 | +for i in range(len(sinetone)): | |
| 29 | + sinetone[i] *= exp( - e * float(i) / len(sinetone)) | |
| 30 | +for i in range(attack): | |
| 31 | + sinetone[i] *= exp( e * (float(i) / attack - 1 ) ) | |
| 32 | + | |
| 33 | +my_sink = sink(sys.argv[1], 44100) | |
| 34 | + | |
| 35 | +i = 0 | |
| 36 | +while i + blocksize < duration: | |
| 37 | + my_sink(sinetone[i:i+blocksize], blocksize) | |
| 38 | + i += blocksize | |