Thomas Kolb
3fda457f09
This is the pulsetunnel.lua script with a common maximum value derived from the three color channels. Channels can be weighted using constants in the lua script. The new script generates more saturated colors in most musical situations.
94 lines
1.9 KiB
Lua
94 lines
1.9 KiB
Lua
COOLDOWN_FACTOR = 0.995
|
|
|
|
BALANCE_RED = 7.0
|
|
BALANCE_GREEN = 2.0
|
|
BALANCE_BLUE = 1.5
|
|
|
|
num_modules = 20
|
|
center_module = 10
|
|
|
|
-- maximum energy value
|
|
maxEnergy = 1
|
|
|
|
-- output color buffers
|
|
red = {}
|
|
green = {}
|
|
blue = {}
|
|
|
|
tmpRed = {}
|
|
tmpGreen = {}
|
|
tmpBlue = {}
|
|
|
|
function weighted_avg(array, centerIndex)
|
|
return 0.2 * array[centerIndex - 1] +
|
|
0.6 * array[centerIndex] +
|
|
0.2 * array[centerIndex + 1]
|
|
end
|
|
|
|
function periodic()
|
|
local redEnergy = get_energy_in_band(0, 400) * BALANCE_RED
|
|
local greenEnergy = get_energy_in_band(400, 5000) * BALANCE_GREEN
|
|
local blueEnergy = get_energy_in_band(5000, 22000) * BALANCE_BLUE
|
|
local centerIndex = 2 * center_module + 1;
|
|
|
|
maxEnergy = maxEnergy * COOLDOWN_FACTOR
|
|
if redEnergy > maxEnergy then
|
|
maxEnergy = redEnergy
|
|
end
|
|
|
|
if greenEnergy > maxEnergy then
|
|
maxEnergy = greenEnergy
|
|
end
|
|
|
|
if blueEnergy > maxEnergy then
|
|
maxEnergy = blueEnergy
|
|
end
|
|
|
|
-- move the color buffers on by one in each direction
|
|
for i = 2,centerIndex,1 do
|
|
tmpRed[i-1] = tmpRed[i]
|
|
tmpGreen[i-1] = tmpGreen[i]
|
|
tmpBlue[i-1] = tmpBlue[i]
|
|
end
|
|
|
|
for i = #tmpRed-1,centerIndex,-1 do
|
|
tmpRed[i+1] = tmpRed[i]
|
|
tmpGreen[i+1] = tmpGreen[i]
|
|
tmpBlue[i+1] = tmpBlue[i]
|
|
end
|
|
|
|
-- set the new value for the center module
|
|
tmpRed[centerIndex] = redEnergy / maxEnergy
|
|
tmpGreen[centerIndex] = greenEnergy / maxEnergy
|
|
tmpBlue[centerIndex] = blueEnergy / maxEnergy
|
|
|
|
for i = 1,num_modules do
|
|
red[i] = weighted_avg(tmpRed, 2*i)
|
|
green[i] = weighted_avg(tmpGreen, 2*i)
|
|
blue[i] = weighted_avg(tmpBlue, 2*i)
|
|
end
|
|
|
|
-- return the 3 color arrays
|
|
return red, green, blue
|
|
end
|
|
|
|
function init(nmod, cmod)
|
|
num_modules = nmod
|
|
center_module = cmod
|
|
|
|
for i = 1,nmod do
|
|
red[i] = 0
|
|
green[i] = 0
|
|
blue[i] = 0
|
|
end
|
|
|
|
for i = 1,2*(nmod+1) do
|
|
tmpRed[i] = 0
|
|
tmpGreen[i] = 0
|
|
tmpBlue[i] = 0
|
|
end
|
|
|
|
-- don't use fading
|
|
return 0
|
|
end
|