[signals] First pass at signal module -- it doesn't import???
This commit is contained in:
parent
1375af7a07
commit
7ccf343f33
2 changed files with 49 additions and 0 deletions
0
signal/__init__.py
Normal file
0
signal/__init__.py
Normal file
49
signal/waves.py
Normal file
49
signal/waves.py
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# waves.py
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
'''
|
||||||
|
Several functions for creating audio waves.
|
||||||
|
'''
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
__default_num_harmonics = 10
|
||||||
|
|
||||||
|
def sine(domain, freq=1.0):
|
||||||
|
'''Render a sine wave in the given domain with the specified frequency.'''
|
||||||
|
return np.sin(2.0 * np.pi * freq * domain)
|
||||||
|
|
||||||
|
def saw(domain, freq=1.0, num_harmonics=__default_num_harmonics):
|
||||||
|
'''
|
||||||
|
Render a saw wave in the given domain at the specified frequency.
|
||||||
|
|
||||||
|
This function produces a saw wave by computing the first `harmonics` terms of the
|
||||||
|
infinite series defining its shape.
|
||||||
|
'''
|
||||||
|
harmonics = np.asarray([1.0 / h * sine(domain, freq=freq * h) for h in range(1, num_harmonics)])
|
||||||
|
wave = np.sum(harmonics, axis=0)
|
||||||
|
return wave
|
||||||
|
|
||||||
|
def square(domain, freq=1, num_harmonics=__default_num_harmonics):
|
||||||
|
'''
|
||||||
|
Render a square wave in the given domain at the specified frequency.
|
||||||
|
|
||||||
|
This function produces a saw wave by computing the first `harmonics` terms of the
|
||||||
|
infinite series defining its shape.
|
||||||
|
'''
|
||||||
|
harmonics = np.asarray([1.0 / h * sine(domain, freq=freq * h) for h in range(1, num_harmonics, 2)])
|
||||||
|
wave = np.sum(harmonics, axis=0)
|
||||||
|
return wave
|
||||||
|
|
||||||
|
def triangle(domain, freq=1, num_harmonics=__default_num_harmonics):
|
||||||
|
'''
|
||||||
|
Render a triangle wave in the given domain at the specified frequency.
|
||||||
|
|
||||||
|
This function produces a saw wave by computing the first `num_harmonics` terms of the
|
||||||
|
infinite series defining its shape.
|
||||||
|
'''
|
||||||
|
def label(i):
|
||||||
|
return 2.0 * i + 1.0
|
||||||
|
harmonics = np.asarray([((-1) ** h) * (label(h) ** -2) * sine(domain, freq=freq * label(h)) for h in
|
||||||
|
range(num_harmonics)])
|
||||||
|
wave = np.sum(harmonics, axis=0)
|
||||||
|
return wave
|
Loading…
Add table
Add a link
Reference in a new issue