aboutsummaryrefslogtreecommitdiffhomepage
path: root/ladspa.lua
AgeCommit message (Collapse)AuthorFilesLines
2017-01-26added DSSI supportRobin Haberkorn1-519/+0
* The LADSPA module has been extended to support DSSI plugins as well. If DSSI support is detected, the first input stream is considered a MIDI event stream. * The MIDI event handling must be updated to allow streams of MIDI messages for this to be useful. * ladspa.lua has been subsequently renamed to dssi.lua
2016-09-26LADSPAStream: limited DSSI supportRobin Haberkorn1-8/+103
* only really useful for DSSI plugins that do not expose a LADSPA entry point and do not need MIDI NOTE commands (ie. effects). * full DSSI support might be added in a subclass that adds a MIDI command stream. Applause's MIDI handling could be extended to directly provide such streams (ie. by having a queue of these events and producing 0 if they are empty) with MIDICCStream and MIDIVelocityStream being refactored into pure Lua classes which extract the relevant information and cache the previous value.
2016-09-26LADSPAStream: fixed input port mappingRobin Haberkorn1-1/+4
* User-provided arguments should correspond to the n'th input port instead of the n'th overall port. This failed if output ports were mixed with input ports (or come first) in the list of ports that the LADSPA plugin defines.
2016-09-26LADSPAStream: limited support for multi-channel input streamsRobin Haberkorn1-0/+24
* When specified as part of a port-mapping array or list, they are automatically expanded. I.e. if `stream` is stereo, LADSPAStream(..., stream) is equivalent to LADSPAStream(..., stream:demux(1), stream:demux(2)) * This is often handy because stereo input ports are usually defined consecutively by LADSPA plugins.
2016-09-26LADSPAStream: Special optimization for constant input port mappingsRobin Haberkorn1-26/+52
* Constants were converted to infinite streams. This allows them to be handled specially. They are stored in their own input buffer now, initialized and connected once but need no ticking. * In contrast to the Applause primitives, this can be done centrally and for all possible LADSPA plugins. * This gives a speed increase of up to 20% if all input ports are mapped to constants (measured with the "sine" plugin).
2016-09-26added LADSPA plugin host (LADSPAStream and Stream:LADSPA())Robin Haberkorn1-0/+371
* E.g. LADSPAStream("sine", 880):play(). The sine plugin is currently twice as fast as the native Applause implementation even though a block size of 1 sample is used (ie. compared to Stream.SinOsc). * all LADSPA features should be supported * Takes arbitrary Streams as input and produces a normal Applause stream. * multi-channel output plugins supported * LADSPA port mapping is possible by array, by name and by argument list. * Even though LADSPAStream is not muxable (it is more like SndfileStream), every input stream or default value is currently converted to a Stream. This can be optimized by storing scalars in their own arrays. They don't have to be ticked.