Files
-
blinds / hardware_design / pcb / blinds_v60.brd
-
blinds / hardware_design / pcb / blinds_v60.sch
-
braids / hardware_design / pcb / braids_v50.brd
-
braids / hardware_design / pcb / braids_v50.sch
-
branches / hardware_design / pcb / branches_v40.brd
-
branches / hardware_design / pcb / branches_v40.sch
-
clouds / hardware_design / pcb / clouds_v30.brd
-
clouds / hardware_design / pcb / clouds_v30.sch
-
ears / hardware_design / panel / ears_panel_v30.brd
-
ears / hardware_design / panel / ears_panel_v30.sch
-
ears / hardware_design / pcb / ears_v40.brd
-
ears / hardware_design / pcb / ears_v40.sch
-
edges / hardware_design / pcb / edges_expander_v01.brd
-
edges / hardware_design / pcb / edges_expander_v01.sch
-
edges / hardware_design / pcb / edges_v20.brd
-
edges / hardware_design / pcb / edges_v20.sch
-
elements / hardware_design / pcb / elements_v02.brd
-
elements / hardware_design / pcb / elements_v02.sch
-
frames / hardware_design / pcb / frames_v03.brd
-
frames / hardware_design / pcb / frames_v03.sch
-
grids / hardware_design / pcb / grids_v02.brd
-
grids / hardware_design / pcb / grids_v02.sch
-
kinks / hardware_design / pcb / kinks_v41.brd
-
kinks / hardware_design / pcb / kinks_v41.sch
-
links / hardware_design / pcb / links_v40.brd
-
links / hardware_design / pcb / links_v40.sch
-
marbles / hardware_design / pcb / marbles_v70.brd
-
marbles / hardware_design / pcb / marbles_v70.sch
-
peaks / hardware_design / pcb / peaks_v30.brd
-
peaks / hardware_design / pcb / peaks_v30.sch
-
plaits / hardware_design / pcb / plaits_v50.brd
-
plaits / hardware_design / pcb / plaits_v50.sch
-
rings / hardware_design / pcb / rings_v30.brd
-
rings / hardware_design / pcb / rings_v30.sch
-
ripples / hardware_design / pcb / ripples_v40.brd
-
ripples / hardware_design / pcb / ripples_v40.sch
-
shades / hardware_design / pcb / shades_v30.brd
-
shades / hardware_design / pcb / shades_v30.sch
-
shelves / hardware_design / pcb / shelves_expander_v10.brd
-
shelves / hardware_design / pcb / shelves_expander_v10.sch
-
shelves / hardware_design / pcb / shelves_v05.brd
-
shelves / hardware_design / pcb / shelves_v05.sch
-
stages / hardware_design / pcb / stages_v70.brd
-
stages / hardware_design / pcb / stages_v70.sch
-
streams / hardware_design / pcb / streams_v02_bargraph.brd
-
streams / hardware_design / pcb / streams_v02_bargraph.sch
-
streams / hardware_design / pcb / streams_v05.brd
-
streams / hardware_design / pcb / streams_v05.sch
-
tides / hardware_design / pcb / tides_v40.brd
-
tides / hardware_design / pcb / tides_v40.sch
-
veils / hardware_design / pcb / veils_v40.brd
-
veils / hardware_design / pcb / veils_v40.sch
-
volts / hardware_design / pcb / volts_v01.brd
-
volts / hardware_design / pcb / volts_v01.sch
-
warps / hardware_design / pcb / warps_v30.brd
-
warps / hardware_design / pcb / warps_v30.sch
-
yarns / hardware_design / pcb / yarns_v03.brd
-
yarns / hardware_design / pcb / yarns_v03.sch
Last update 6 years 3 months
by
Olivier Gillet
Filesbraidsresources | |
---|---|
.. | |
__init__.py | |
characters.py | |
lookup_tables.py | |
resources.py | |
waveforms.py | |
waveshapers.py |
waveshapers.py#!/usr/bin/python2.5 # # Copyright 2012 Olivier Gillet. # # Author: Olivier Gillet (ol.gillet@gmail.com) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # ----------------------------------------------------------------------------- # # Waveshaper lookup tables. import numpy waveshapers = [] def scale(x, min=-32766, max=32766, center=True): if center: x -= x.mean() mx = numpy.abs(x).max() x = (x + mx) / (2 * mx) x = x * (max - min) + min x = numpy.round(x) return x.astype(int) x = ((numpy.arange(0, 257) / 128.0 - 1.0)) x[-1] = x[-2] violent_overdrive = numpy.tanh(8.0 * x) overdrive = numpy.tanh(5.0 * x) moderate_overdrive = numpy.tanh(2.0 * x) # Wavefolder curves from the first version # tri_fold = numpy.abs(4.0 * x - numpy.round(4.0 * x)) * numpy.sign(x) # sine_fold = numpy.sin(5 * numpy.pi * x) tri_fold = numpy.sin(numpy.pi * (3 * x + (2 * x) ** 3)) # In v1.4 RC window = numpy.exp(-x * x * 4) ** 1.5 sine = numpy.sin(8 * numpy.pi * x) sine_fold = sine * window + numpy.arctan(3 * x) * (1 - window) sine_fold /= numpy.abs(sine_fold).max() # Another curve for the sine wavefolder inspired by the uFold response # frequency = 4 / (1 + (1.5 * x) ** 2) ** 2 # window = numpy.exp(-24 * numpy.maximum(numpy.abs(x) - 0.25, 0) ** 2) # sine = numpy.sin(2 * numpy.pi * frequency * x) * window # cubic = (x ** 3 + 0.5 * x ** 2 + 0.5 * x) / 3 # knee = numpy.minimum(x + 0.7, 0.0) # sine_fold = sine + cubic + knee waveshapers.append(('moderate_overdrive', scale(moderate_overdrive))) waveshapers.append(('violent_overdrive', scale(violent_overdrive))) waveshapers.append(('sine_fold', scale(sine_fold, center=False))) waveshapers.append(('tri_fold', scale(tri_fold)))