1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
08-table-lookup.py - Table as transfer function.
============================================================================================================================================
In computer science, a lookup table is an array that replaces runtime computation
with a simpler array indexing operation. The savings in terms of processing time
can be significant, since retrieving a value from memory is often faster than
undergoing an "expensive" computation.
This technic is also used a lot in audio synthesis, where the waveform can be
pre-computed and stored in a table, then simply readed with a ramp at the desired
frequency.
.. code-block:: python
from pyo import *
s = Server().boot()
src = SfPlayer("../snds/flute.aif", loop=True)
# Arctangent transfer function table.
table = AtanTable(slope=0.5, size=512)
table.view()
# A signal to dynamically control the drive of the transfer function.
drive = Sig(0.5)
# We give it True to the dataonly argument when opening the sliders window,
# otherwise the table would be rewrite way too often.
drive.ctrl([SLMap(0, 1, "lin", "value", 0.5, dataOnly=True)], title="Transfer fonction slope")
# Lookup reads a table given an audio index lying between -1 and 1.
# It is especially designed to scan a transfer function with an audio signal.
look = Lookup(table, index=src, mul=0.5).out()
# Function called to redraw the transfer function.
def redraw():
table.slope = drive.get()
# We call the "redraw" function every time the "drive" value changes.
trig = TrigFunc(Change(drive), function=redraw)
sc = Scope(look)
s.gui(locals())
|