eurorack/stereo_mix/resources/lookup_tables.py

50 lines
1.2 KiB
Python

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
lookup_tables_u16 = []
lookup_tables_u8 = []
ADC_RESOLUTION = 4096
OUTPUT_RESOLUTION = 2 ** 16 - 1
# linear to exponential conversion
space = np.linspace(0, 1, num=ADC_RESOLUTION)
values = np.power(space, 2) * OUTPUT_RESOLUTION
lookup_tables_u16.append(('linear_to_exp', values))
fig, ax = plt.subplots()
ax.plot(space, values)
other_values = OUTPUT_RESOLUTION - np.flip(values)
ax.plot(space, OUTPUT_RESOLUTION - (np.flip(values)))
ax.plot(space, values / 2 + other_values / 2)
ax.set(xlabel='space', ylabel='values')
ax.grid()
#plt.show()
# Left pan Lookup table
l_pan = np.linspace(0, 1, num=ADC_RESOLUTION)
r_pan = np.linspace(0, 1, num=ADC_RESOLUTION)
l_pan = np.sin(l_pan * (np.pi / 2.0))
r_pan = np.cos(r_pan * (np.pi / 2.0))
l_pan = np.round(l_pan * OUTPUT_RESOLUTION)
r_pan = np.round(r_pan * OUTPUT_RESOLUTION)
lookup_tables_u16.append(('left_sin_pan', l_pan))
lookup_tables_u16.append(('right_cos_pan', r_pan))
# led gamma correction
gamma = 2.4
max_in = 255
max_out = 511
input_vals = np.linspace(0, max_in, num=max_in + 1)
gamma_correction = ((input_vals / max_in) ** gamma) * max_out + 0.5
lookup_tables_u16.append(('led_gamma', np.floor(gamma_correction)))