-- -- melisma - extensible and scriptable audio engine -- Copyright (C) 2026 Ludvig Gunne Lindström -- -- 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 . -- local m_ladspa = require 'melisma.ladspa' local M = {} function M.init(spec,...) local interface = {} local info = m_ladspa.info(spec) local instance = m_ladspa.load(spec,...) local audio_index = 1 local control_index = 1 for _,port in ipairs(info.ports) do if port.type == 'control' and port.direction == 'input' then local control_index_copy = control_index interface[port.name] = function(self,value) if port.hints.upper_bound and value > port.hints.upper_bound then value = port.hints.upper_bound end if port.hints.lower_bound and value < port.hints.lower_bound then value = port.hints.lower_bound end instance:control(control_index_copy,value) return self end if port.hints.default then interface[port.name](nil,port.hints.default) end control_index = control_index + 1 end if port.type == 'audio' and port.direction == 'output' then interface[port.name] = instance(audio_index) audio_index = audio_index + 1 end end return interface end return M