{\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 }