mirror of
https://github.com/nucular/sfxrlua.git
synced 2024-12-24 18:44:20 +00:00
Initialization stuff
This commit is contained in:
parent
92c364c146
commit
4a6bf880ec
107
sfxr.lua
107
sfxr.lua
@ -22,10 +22,113 @@ SOFTWARE.
|
|||||||
]]--
|
]]--
|
||||||
|
|
||||||
local sfxr = {}
|
local sfxr = {}
|
||||||
|
sfxr.__index = sfxr
|
||||||
|
|
||||||
local function new()
|
local function new()
|
||||||
return setmetatable({}, vector)
|
local obj = setmetatable({}, sfxr)
|
||||||
|
obj:__init()
|
||||||
|
return obj
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Constants
|
||||||
|
|
||||||
|
sfxr.SQUARE = 0
|
||||||
|
sfxr.SAWTOOTH = 1
|
||||||
|
sfxr.SINE = 2
|
||||||
|
sfxr.NOISE = 3
|
||||||
|
|
||||||
|
-- Utilities
|
||||||
|
|
||||||
|
local function trunc(n)
|
||||||
|
return math.floor(n - 0.5)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function random(low, high)
|
||||||
|
return low + math.random() * (high - low)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function maybe(n)
|
||||||
|
return trunc(random(0, n or 1)) == 0
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Class functions
|
||||||
|
|
||||||
|
function sfxr:__init()
|
||||||
|
-- Build tables to store the parameters in
|
||||||
|
self.volume = {}
|
||||||
|
self.envelope = {}
|
||||||
|
self.frequency = {}
|
||||||
|
self.vibrato = {}
|
||||||
|
self.change = {}
|
||||||
|
self.duty = {}
|
||||||
|
self.phaser = {}
|
||||||
|
self.lowpass = {}
|
||||||
|
self.highpass = {}
|
||||||
|
|
||||||
|
-- Phaser and noise buffers
|
||||||
|
self.phaserBuffer = {}
|
||||||
|
self.noiseBuffer = {}
|
||||||
|
|
||||||
|
self:resetParameters()
|
||||||
|
self:resetBuffers()
|
||||||
|
end
|
||||||
|
|
||||||
|
function sfxr:resetParameters()
|
||||||
|
-- Set all parameters to the default values
|
||||||
|
self.repeatSpeed = 0.0
|
||||||
|
self.waveType = sfxr.SQUARE
|
||||||
|
self.superSamples = 8
|
||||||
|
|
||||||
|
self.volume.master = 0.5
|
||||||
|
self.volume.sound = 0.5
|
||||||
|
|
||||||
|
self.envelope.attack = 0.0
|
||||||
|
self.envelope.sustain = 0.3
|
||||||
|
self.envelope.punch = 0.0
|
||||||
|
self.envelope.decay = 0.4
|
||||||
|
|
||||||
|
self.frequency.start = 0.3
|
||||||
|
self.frequency.min = 0.0
|
||||||
|
self.frequency.slide = 0.0
|
||||||
|
self.frequency.deltaSlide = 0.0
|
||||||
|
|
||||||
|
self.vibrato.depth = 0.0
|
||||||
|
self.vibrato.speed = 0.0
|
||||||
|
self.vibrato.delay = 0.0
|
||||||
|
|
||||||
|
self.change.amount = 0.0
|
||||||
|
self.change.speed = 0.0
|
||||||
|
|
||||||
|
self.duty.ratio = 0.5
|
||||||
|
self.duty.sweep = 0.0
|
||||||
|
|
||||||
|
self.phaser.offset = 0.0
|
||||||
|
self.phaser.sweep = 0.0
|
||||||
|
|
||||||
|
self.lowpass.cutoff = 1.0
|
||||||
|
self.lowpass.sweep = 0.0
|
||||||
|
self.lowpass.resonance = 0.0
|
||||||
|
self.highpass.cutoff = 0.0
|
||||||
|
self.highpass.sweep = 0.0
|
||||||
|
end
|
||||||
|
|
||||||
|
function sfxr:resetBuffers()
|
||||||
|
-- Fill the sample buffers with zeroes
|
||||||
|
for i=1, 1025 do
|
||||||
|
self.phaserBuffer[i] = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
for i=1, 33 do
|
||||||
|
self.noiseBuffer[i] = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
sfxr:__init()
|
||||||
|
|
||||||
return setmetatable({new = new},
|
return setmetatable({new = new},
|
||||||
{__call = function(_, ...) return new(...) end})
|
{
|
||||||
|
__call = function(_, ...)
|
||||||
|
return new(...)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user