rendered paste body{\rtf1\ansi\deff0{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\lang1033\f0\fs20\par
import math\par
from numpy import zeros, empty, array, append\par
from snd_io import read_wav_file, save_wav_file, play\par
\par
# Helpful constants\par
WAVE_MAX = 32767 # Max sample value\par
WAVE_MIN = -32768 # Min sample value\par
SAMPLE_FREQUENCY = 22050 # Sampling frequency in Hz\par
\par
data = zeros(50)\par
for i in range(len(data)):\par
data[i] = i**2\par
print data\par
\par
\par
def scale_volume(data, factor):\par
global WAVE_MIN\par
global WAVE_MAX\par
\par
data = factor * data\par
data = map(int, data)\par
\par
for i in range(len(data)):\par
if data[i] > WAVE_MAX:\par
data[i] = WAVE_MAX\par
if data[i] < WAVE_MIN:\par
data[i] = WAVE_MIN\par
\par
return data\par
\par
def normalize(data):\par
global WAVE_MAX\par
global WAVE_MIN\par
\par
if max(data) > abs(min(data)):\par
if max(data) == 0:\par
return data\par
else:\par
scale_max = WAVE_MAX / max(data)\par
data = scale_volume(data, scale_max)\par
else:\par
if min(data) == 0:\par
return data\par
else:\par
scale_min = WAVE_MIN / min(data)\par
data = scale_volume(data, scale_min)\par
\par
return data\par
\par
def echo(data, delay, level):\par
global SAMPLE_FREQUENCY\par
\par
delay_samples = int(delay*SAMPLE_FREQUENCY)\par
z = zeros(delay_samples)\par
output = empty(len(data), dtype=numpy.int16) \par
\par
orig_sample = append(data, z)\par
echo_sample = append(z, data)\par
\par
for n in range(len(output)):\par
result = (1-level) * orig_sample[n] + level * echo_sample[n]\par
output[n] = result \par
\par
return output\par
\par
def sin_sample(freq, amp, dur):\par
global SAMPLE_FREQUENCY\par
\par
output = empty(int(dur*SAMPLE_FREQUENCY), dtype=numpy.int16)\par
\par
for i in range(dur):\par
for j in range(freq):\par
output[i * freq + j] = amp * math.sin(j / float(freq))\par
\par
return output\par
\par
def combine(wavs):\par
n = len(wavs)\par
total = 0\par
output = zeros(len(wavs[0]), dtype=numpy.int16)\par
\par
for i in range(len(wavs[0])):\par
for j in range(n):\par
total = total + wavs[j][i]\par
\par
output[i] = total / n\par
total = 0\par
\par
return output\par
\par
def silence(dur):\par
return zeros(int(dur*SAMPLE_FREQUENCY), dtype=numpy.int16)\par
\par
def equal_scale(freq, amp, dur, sampler=sin_sample):\par
result = empty(0,dtype=numpy.int16)\par
\par
return result\par
\par
}