GNOME Bugzilla – Bug 698927
LADSPA improved port to gstreamer 1.0
Last modified: 2013-05-03 10:57:20 UTC
Created attachment 242525 [details] [review] LADSPA improved port to gstreamer 1.0 LADSPA improved port to gstreamer 1.0 --------------------------- Hi, i just wanted to share my LADSPA plugin for gstreamer 1.0. Perhaps the old implementation was just poorly documented, and just by that the implementation rendered not very usable, perhaps it was not really channel capable, i don't know, anyway it was not ported to 1.0 so i assume a big patch was expected. Still like a 50% of code is reused mainly for plugin detection, description LRDF tagging, gobject, and very basic LADSPA usage, that code was really nice, the other part is really big change, since it was basing in GstSignalProcessor, which i were told by ensonic to be broken, and better rebase the work on BaseSrc, BaseTransform and BaseSink. As special, the GstLADSPAModule is used because of the dynamic nature of this plugin of plugins and takes care of proper class finalization. At the usual elements level, the GstLADSPASrc is heavily based on audiotestsrc with carefull attention to what can be reused and what not, so is the GstLADSPASink heavily based on fakesink, GstLADSPAFilter is derived from AudioFilter and inspired in audioecho. All authors are keeping some credit in some way or another in the source files and the elements metadata. The patch itself is 139K, unreviewable, but as an apply result it looks good to review. Consider strongly, that almost 90% of the code is a copy of other accepted code. It is, it would be easier to just see the old, (discard, mainly as broken and not ported) and see the new implementation. Enjoy! --------------------------- IRC talk with ensonic starting the left of GstSignalProcessor in favour of BaseSource, BaseTransform and BaseSink: [21:11] <ensonic> juanmabc, whats up? [21:12] <ensonic> juanmabc, don't use the GstSignalprocessor baseclass in bad, it does not work well [21:12] <juanmabc> yeah, trying to port ladspa [21:13] <juanmabc> ensonic: alternatives ? [21:13] <ensonic> juanmabc, okay, I'll try to sumarize [21:14] <ensonic> juanmabc, gst signal processor is a single class subclassing basetransform, but also driving sources, that does not work well [21:14] <ensonic> juanmabc, we need separate baseclasses for sources, transforms/filters and sinks [21:15] <ensonic> this would basically replicat basesrc, basetransform and basesink, the reason we can't use the existing ones is, that some of the ladspa elements have multiple ports [21:16] <ensonic> now in many cases where they have multiple ports, those are e.g. stereo pairs (which is not query-able on the api) [21:17] <ensonic> so one (pragmatic) idea would be to actually use basesrc, basetransform and basesink and ignore elemnets that have multiple ports [21:18] <juanmabc> yeah [21:18] <ensonic> 2nd step would be to have a list of know port-pairs (e.g. that for ladspa plugin XYZ "in-left" and "in-right" actually form a stereo pair) [21:18] <ensonic> with this list we can support probably 90% of them [21:19] <ensonic> I think a list would work as ladspa is sort of superseeded with lv2 and in lv2 we can query channel groups [21:19] <juanmabc> could i get an stereo input and pass internally each channel to In_R and In_L? [21:19] <ensonic> I don't expect lots of new ladspa plugins [21:19] <ensonic> juanmabc, yes [21:19] <juanmabc> outputing Out_R Out_L again to a stereo output [21:19] <ensonic> juanmabc, in 1.0 we support non-interleaved audio [21:19] <juanmabc> that's something [21:20] <juanmabc> still you can switch the channels in ports, but perhaps on the pipeline? [21:20] <juanmabc> can't [21:20] <ensonic> what do you mean by that? [21:21] <juanmabc> if you want ladspa In_R to Out_L [21:21] <juanmabc> you do In_R to Out_R internally then some ! swap channels [21:21] <ensonic> btw. I am leaving in about 10 min, but I am online most of the time otherwise [21:21] <juanmabc> i thing that basesrc/trns/sink and that could do it [21:21] <juanmabc> thanks [21:22] <ensonic> juanmabc, I think the channel swapping could be done with a custom element, but I'd say for most elements we'd like to use the ports as advertised [21:24] <ensonic> cu [21:25] <juanmabc> bye, thanks I could have some issues because i do not really understand what ensonic was meaning with the channel multiport mapping, though it is said on the relevant file with a FIXME and assumed a LADSPA in -> out. The tests i've been running either are lucky or work really great. If all goes well, lv2 plugins could also take profit of this implementation. --------------------------- Documentation explaining some basics (i could not test the tagging): * SECTION:element-ladspa * @short_description: bridge for LADSPA (Linux Audio Developer's Simple Plugin API) * @see_also: #GstAudioConvert #GstAudioResample, #GstAudioTestSrc, #GstAutoAudioSink * * The LADSPA (Linux Audio Developer's Simple Plugin API) plugin is a bridge * for plugins using the <ulink url="http://www.ladspa.org/">LADSPA</ulink> API. * It scans all installed LADSPA plugins and registers them as gstreamer * elements. If available it can also parse LRDF files and use the metadata for * element classification. The functionality you get depends on the LADSPA plugins * you have installed. * * First off all you can apply not live LADSPA filters without this plugin: * * <refsect2> * <title>Example LADSPA line without this plugins</title> * |[ * (padsp) listplugins * (padsp) analyseplugin cmt.so amp_mono * gst-launch -e filesrc location="$myfile" ! decodebin ! audioconvert ! audioresample ! "audio/x-raw,format=S16LE,rate=48000,channels=1" ! wavenc ! filesink location="testin.wav" * (padsp) applyplugin testin.wav testout.wav cmt.so amp_mono 2 * gst-launch playbin uri=file://"$PWD"/testout.wav * ]| Decode any audio file into wav with the format expected for the specific ladspa plugin to be applied, apply the ladspa filter and play it. * </refsect2> * * Now with this plugin: * * <refsect2> * <title>Example LADSPA line with this plugins</title> * |[ * gst-launch autoaudiosrc ! ladspa-cmt-so-amp-mono gain=2 ! ladspa-caps-so-Plate ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! goom ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4 * ]| Get audio input, filter it through CAPS Plate and TAP Stereo Echo, play it and show a visualization (recommended hearphones). * </refsect2> * * In case you wonder the plugin naming scheme, quoting ladspa.h: * "Plugin types should be identified by file and label rather than by * index or plugin name, which may be changed in new plugin versions." * This is really the best way then, and so it is less prone to conflicts. * * Also it is worth noting that LADSPA provides a control in and out interface, * on top of the audio in and out one, so some parameters are readable too. * * You can see the listing of plugins available with: * <refsect2> * <title>Inspecting the plugins list</title> * |[ * gst-inspect ladspa * ]| List available LADSPA plugins on gstreamer. * </refsect2> * * You can see the parameters of any plugin with: * <refsect2> * <title>Inspecting the plugins</title> * |[ * gst-inspect ladspa-retro-flange-1208-so-retroFlange * ]| List details of the plugin, parameters, range and defaults included. * </refsect2> * * The elements categorize in: * <itemizedlist> * <listitem><para>Filter/Effect/Audio/LADSPA:</para> * <refsect2> * <title>Example Filter/Effect/Audio/LADSPA line with this plugins</title> * |[ * gst-launch filesrc location="$myfile" ! decodebin ! audioconvert ! audioresample ! ladspa-calf-so-Reverb decay-time=15 high-frq-damp=20000 room-size=5 diffusion=1 wet-amount=2 dry-amount=2 pre-delay=50 bass-cut=20000 treble-cut=20000 ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! autoaudiosink * ]| Decode any audio file, filter it through Calf Reverb LADSPA then TAP Stereo Echo, and play it. * </refsect2> * <refsect2> * </listitem> * <listitem><para>Source/Audio/LADSPA:</para> * <refsect2> * <title>Example Source/Audio/LADSPA line with this plugins</title> * |[ * gst-launch -e ladspasrc-sine-so-sine-fcac frequency=220 amplitude=100 ! audioconvert ! "audio/x-raw,rate=22050" ! autoaudiosink * ]| Generate a sine wave with Sine Oscillator (Freq:control, Amp:control), convert it to 22050 Hz and play it. * </refsect2> * <refsect2> * <title>Example Source/Audio/LADSPA line with this plugins</title> * |[ * gst-launch -e ladspasrc-caps-so-Click bpm=240 volume=1 ! autoaudiosink * ]| Generate clicks with CAPS Click - Metronome at 240 beats per minute and play it. * </refsect2> * <refsect2> * <title>Example Source/Audio/LADSPA line with this plugins</title> * |[ * gst-launch -e ladspasrc-random-1661-so-random-fcsc-oa ! ladspa-cmt-so-amp-mono gain=1.5 ! ladspa-caps-so-Plate ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! wavescope ! videoconvert ! autovideosink * ]| Generate random wave, filter it trhough Mono Amplifier and Versatile Plate Reverb, and play, while showing, it. * </refsect2> * </listitem> * <listitem><para>Sink/Audio/LADSPA:</para> * <refsect2> * <title>Example Sink/Audio/LADSPA line with this plugins</title> * |[ * gst-launch -e autoaudiosrc ! ladspa-cmt-so-amp-mono gain=2 ! ladspa-caps-so-Plate ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! tee name=myT myT. ! audioconvert ! audioresample ! queue ! ladspasink-cmt-so-null-ai dump=true myT. ! audioconvert ! audioresample ! queue ! goom ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4 * ]| Get audio input, filter it trhough Mono Amplifier, CAPS Plate LADSPA and TAP Stereo Echo, explicitily anulate audio with Null (Audio Input) dumping contents, and play a visualization (recommended hearphones). * </refsect2> * </listitem> * </itemizedlist> */ I use also for testing something huge like: export myfile="some.avi" GST_PLUGIN_PATH="." gst-launch-1.0 filesrc location="$myfile" ! decodebin ! audioconvert ! audioresample ! ladspa-caps-so-Plate bandwidth=0.999 tail=0.749 damping=1 blend=0.5 ! ladspa-tap-echo-so-tap-stereo-echo ! audioconvert ! ladspa-cmt-so-amp-mono gain=5 ! ladspa-cmt-so-delay-5s delay=3 ! ladspa-cmt-so-amp-mono gain=2 ! autoaudiosink # this is a super pipeline GST_PLUGIN_PATH="." gst-launch-1.0 ladspasrc-caps-so-Click bpm=60 volume=1 ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! wavescope ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4 GST_PLUGIN_PATH="." gst-launch-1.0 ladspasrc-random-1661-so-random-fcsc-oa ! "audio/x-raw,rate=48000" ! ladspa-cmt-so-amp-mono gain=2 ! ladspa-caps-so-Plate ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! goom ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4 GST_PLUGIN_PATH="." gst-launch-1.0 ladspasrc-cmt-so-pink-full-frequency ! ladspa-cmt-so-amp-mono gain=2 ! ladspa-caps-so-Plate ! ladspa-tap-echo-so-tap-stereo-echo l-delay=500 r-haas-delay=500 ! tee name=myT myT. ! queue ! autoaudiosink myT. ! queue ! audioconvert ! goom ! videoconvert ! xvimagesink pixel-aspect-ratio=3/4 --------------------------- The naming scheme was really needed since conflicts where happening on the background: $ gst-inspect-0.10 ladspa ... 344 elements $ gst-inspect-1.0 ladspa ... 357 elements note that now, this is in line with: $ padsp listplugins |grep -vE '\.so'|wc -l 357 The parameter beautification was also needed since it was not really near the user (yes, 0.10 required that ---- in the parameter name, and the description was missing stuff, happening more than one could expect): $ gst-inspect-0.10 ladspa-tap-stereo-echo ... R-Haas-Feedback---- : R-Haas-Feedback---- flags: readable, writable, controllable Float. Range: 0 - 100 Default: 0 ... $ gst-inspect-1.0 ladspa-tap-echo-so-tap-stereo-echo ... r-haas-feedback : R/Haas Feedback [%] flags: readable, writable, controllable Float. Range: 0 - 100 Default: 0 ... The element naming, ladspa-stuff ladspasrc-stuff and ladspasink-stuff is inspired in the GStreamer tendency (audiotestsrc, autoaudiosink, audioecho). --------------------------- Here is the listing on my computer for reference: $ gst-inspect-1.0 ladspa Plugin Details: Name: ladspa Description: LADSPA plugin Filename: ./.libs/libgstladspa.so Version: 1.0.6 License: LGPL Source module: gst-plugins-bad Source release date: 2013-03-22 Binary package: GStreamer Bad Plug-ins source release Origin URL: Unknown package origin ladspa-tape-delay-1211-so-tapeDelay: Tape Delay Simulation ladspa-guitarix-amp-so-guitarix-amp: guitarix_amp ladspa-retro-flange-1208-so-retroFlange: Retro Flanger ladspa-amp-1654-so-amp-gaia-oa: Amplifier (GAIA) ladspa-amp-1654-so-amp-gcia-oa: Amplifier (GCIA) ladspa-mvclpf24-so-Mvclpf-1: Mvclpf-1 Digital implementation of the VC filter invented by R.A.Moog ladspa-mvclpf24-so-Mvclpf-2: Mvclpf-2 Digital implementation of the VC filter invented by R.A.Moog ladspa-mvclpf24-so-Mvclpf-3: Mvclpf-3 Digital implementation of the VC filter invented by R.A.Moog ladspa-mvclpf24-so-Mvclpf-4: Mvclpf-4 Digital implementation of the VC filter invented by R.A.Moog ladspa-square-1643-so-square-fa-oa: Bandlimited Square Oscillator (FA) ladspasrc-square-1643-so-square-fc-oa: Bandlimited Square Oscillator (FC) ladspa-lcr-delay-1436-so-lcrDelay: L/C/R Delay ladspa-gong-beater-1439-so-gongBeater: Gong beater ladspa-filters-so-Parametric1: 4-band parametric filter ladspa-amp-so-amp-mono: Mono Amplifier ladspa-amp-so-amp-stereo: Stereo Amplifier ladspa-tap-reverb-so-tap-reverb: TAP Reverberator ladspa-wave-terrain-1412-so-waveTerrain: Wave Terrain Oscillator ladspa-harmonic-gen-1220-so-harmonicGen: Harmonic generator ladspa-se4-1883-so-se4: SE4 ladspa-guitarix-distortion-so-guitarix-distortion: guitarix_distortion ladspasrc-impulse-1885-so-impulse-fc: Nonbandlimited single-sample impulses (Frequency: Control) ladspa-cs-chorus-so-Chorus1: Chorus1 - Based on CSound orchestra by Sean Costello ladspa-cs-chorus-so-Chorus2: Chorus2 - Based on CSound orchestra by Sean Costello ladspa-cs-chorus-so-TripleChorus: Triple chorus ladspa-sequencer64-1675-so-sequencer64: Analogue Style 64 Step Sequencer ladspa-chebstortion-1430-so-chebstortion: Chebyshev distortion ladspa-vco-sawpulse-so-Pulse-VCO: Pulse-VCO -- Anti-aliased oscillator ladspa-vco-sawpulse-so-Saw-VCO: Saw-VCO -- Anti-aliased oscillator ladspa-vco-sawpulse-so-Rec-VCO: Rec-VCO -- Anti-aliased oscillator ladspa-hermes-filter-1200-so-hermesFilter: Hermes Filter ladspa-pitch-scale-1193-so-pitchScale: Pitch Scaler ladspa-pulse-1645-so-pulse-fapa-oa: Bandlimited Variable Width Pulse Oscillator (FAPA) ladspa-pulse-1645-so-pulse-fapc-oa: Bandlimited Variable Width Pulse Oscillator (FAPC) ladspa-pulse-1645-so-pulse-fcpa-oa: Bandlimited Variable Width Pulse Oscillator (FCPA) ladspasrc-pulse-1645-so-pulse-fcpc-oa: Bandlimited Variable Width Pulse Oscillator (FCPC) ladspa-quantiser20-2027-so-quantiser20: Quantiser (20 Steps) ladspa-tap-deesser-so-tap-deesser: TAP DeEsser ladspa-tap-pitch-so-tap-pitch: TAP Pitch Shifter ladspa-dj-eq-1901-so-dj-eq-mono: DJ EQ (mono) ladspa-dj-eq-1901-so-dj-eq: DJ EQ ladspa-mod-delay-1419-so-modDelay: Modulatable delay ladspa-sinus-wavewrapper-1198-so-sinusWavewrapper: Sinus wavewrapper ladspa-inv-1429-so-inv: Inverter ladspa-tap-vibrato-so-tap-vibrato: TAP Vibrato ladspa-bandpass-a-iir-1893-so-bandpass-a-iir: Glame Bandpass Analog Filter ladspa-foverdrive-1196-so-foverdrive: Fast overdrive ladspa-svf-1214-so-svf: State Variable Filter ladspa-freq-tracker-1418-so-freqTracker: Frequency tracker ladspa-dj-flanger-1438-so-djFlanger: DJ flanger ladspa-autotalent-so-autotalent: Autotalent ladspa-delay-1898-so-delay-n: Simple delay line, noninterpolating ladspa-delay-1898-so-delay-l: Simple delay line, linear interpolation ladspa-delay-1898-so-delay-c: Simple delay line, cubic spline interpolation ladspa-giant-flange-1437-so-giantFlange: Giant flange ladspa-comb-1887-so-comb-n: Comb delay line, noninterpolating ladspa-comb-1887-so-comb-l: Comb delay line, linear interpolation ladspa-comb-1887-so-comb-c: Comb delay line, cubic spline interpolation ladspa-sum-1665-so-sum-iaia-oa: Signal Sum (IAIA) ladspa-sum-1665-so-sum-iaic-oa: Signal Sum (IAIC) ladspasrc-sum-1665-so-sum-icic-oc: Signal Sum (ICIC) ladspa-adsr-1680-so-adsr-g+t: ADSR Envelope with Gate and Trigger ladspa-highpass-iir-1890-so-highpass-iir: Glame Highpass Filter ladspa-crossover-dist-1404-so-crossoverDist: Crossover distortion ladspa-libwasp-xshaper-so-XShaperM: X-Shaper (mono) ladspa-libwasp-xshaper-so-XShaperS: X-Shaper (stereo) ladspa-alias-1407-so-alias: Aliasing ladspa-valve-1209-so-valve: Valve saturation ladspa-tap-reflector-so-tap-reflector: TAP Reflector ladspa-latency-1914-so-artificialLatency: Artificial latency ladspa-dc-remove-1207-so-dcRemove: DC Offset Remover ladspa-comb-1190-so-comb: Comb Filter ladspa-sync-pulse-2023-so-syncpulse-fapaga-oa: Clock Pulse Oscillator with Gate (FAPAGA) ladspa-sync-pulse-2023-so-syncpulse-fcpcga-oa: Clock Pulse Oscillator with Gate (FCPCGA) ladspa-tap-dynamics-st-so-tap-dynamics-st: TAP Dynamics (St) ladspa-flanger-1191-so-flanger: Flanger ladspa-lowpass-iir-1891-so-lowpass-iir: Glame Lowpass Filter ladspasrc-noise-so-noise-white: White Noise Source ladspa-ambisonic3-so-Ambisonics-31-panner: AMB order 3,1 panner ladspa-ambisonic3-so-Ambisonics-31-rotator: AMB order 3,1 rotator ladspa-ambisonic3-so-Ambisonics-33-panner: AMB order 3,3 panner ladspa-ambisonic3-so-Ambisonics-33-rotator: AMB order 3,3 rotator ladspa-quantiser50-2028-so-quantiser50: Quantiser (50 Steps) ladspa-notch-iir-1894-so-notch-iir: Mag's Notch Filter ladspasrc-analogue-osc-1416-so-analogueOsc: Analogue Oscillator ladspa-zm1-1428-so-zm1: z-1 ladspa-sc4-1882-so-sc4: SC4 ladspa-step-muxer-1212-so-stepMuxer: Step Demuxer ladspa-quantiser100-2029-so-quantiser100: Quantiser (100 Steps) ladspa-adsr-1653-so-adsr: ADSR Envelope ladspa-caps-so-Eq: C* Eq - 10-band equalizer ladspa-caps-so-Eq2x2: C* Eq2x2 - stereo 10-band equalizer ladspa-caps-so-Compress: C* Compress - Mono compressor ladspa-caps-so-Pan: C* Pan - Pan and width ladspa-caps-so-PreampIII: C* PreampIII - Tube preamp emulation ladspa-caps-so-PreampIV: C* PreampIV - Tube preamp emulation + tone controls ladspa-caps-so-ToneStack: C* ToneStack - Tone stack emulation ladspa-caps-so-ToneStackLT: C* ToneStackLT - Tone stack emulation, lattice filter 44.1 ladspa-caps-so-AmpIII: C* AmpIII - Tube amp ladspa-caps-so-AmpIV: C* AmpIV - Tube amp + tone controls ladspa-caps-so-AmpV: C* AmpV - Tube amp ladspa-caps-so-AmpVTS: C* AmpVTS - Tube amp + Tone stack ladspa-caps-so-CabinetI: C* CabinetI - Loudspeaker cabinet emulation ladspa-caps-so-CabinetII: C* CabinetII - Refined loudspeaker cabinet emulation ladspa-caps-so-Clip: C* Clip - Hard clipper, 8x oversampled ladspa-caps-so-ChorusI: C* ChorusI - Mono chorus/flanger ladspa-caps-so-StereoChorusI: C* StereoChorusI - Stereo chorus/flanger ladspa-caps-so-ChorusII: C* ChorusII - Mono chorus/flanger modulated by a fractal ladspa-caps-so-StereoChorusII: C* StereoChorusII - Stereo chorus/flanger modulated by a fractal ladspa-caps-so-PhaserI: C* PhaserI - Mono phaser ladspa-caps-so-PhaserII: C* PhaserII - Mono phaser modulated by a Lorenz fractal ladspa-caps-so-SweepVFI: C* SweepVFI - Resonant filter swept by a Lorenz fractal ladspa-caps-so-SweepVFII: C* SweepVFII - Resonant filter, f and Q swept by a Lorenz fractal ladspa-caps-so-AutoWah: C* AutoWah - Resonant envelope-following filter ladspa-caps-so-Scape: C* Scape - Stereo delay + Filters ladspasrc-caps-so-VCOs: C* VCOs - Virtual 'analogue' oscillator ladspasrc-caps-so-VCOd: C* VCOd - Double VCO with detune and hard sync options ladspasrc-caps-so-CEO: C* CEO - Chief Executive Oscillator ladspasrc-caps-so-Sin: C* Sin - Sine wave generator ladspasrc-caps-so-White: C* White - White noise generator ladspasrc-caps-so-Lorenz: C* Lorenz - The sound of a Lorenz attractor ladspasrc-caps-so-Roessler: C* Roessler - The sound of a Roessler attractor ladspa-caps-so-JVRev: C* JVRev - Stanford-style reverb from STK ladspa-caps-so-Plate: C* Plate - Versatile plate reverb ladspa-caps-so-Plate2x2: C* Plate2x2 - Versatile plate reverb, stereo inputs ladspasrc-caps-so-Click: C* Click - Metronome ladspasrc-caps-so-Dirac: C* Dirac - One-sample impulse generator ladspa-caps-so-HRTF: C* HRTF - Head-related transfer function at elevation 0 ladspa-karaoke-1409-so-karaoke: Karaoke ladspa-sequencer16-1677-so-sequencer16: Analogue Style 16 Step Sequencer ladspa-diode-1185-so-diode: Diode Processor ladspa-xfade-1915-so-xfade: Crossfade ladspa-xfade-1915-so-xfade4: Crossfade (4 outs) ladspa-fast-lookahead-limiter-1913-so-fastLookaheadLimiter: Fast Lookahead limiter ladspa-tap-tremolo-so-tap-tremolo: TAP Tremolo ladspa-delayorama-1402-so-delayorama: Delayorama ladspa-shaper-1187-so-shaper: Wave shaper ladspa-tap-doubler-so-tap-doubler: TAP Fractal Doubler ladspa-const-1909-so-const: Constant Signal Generator ladspa-hard-limiter-1413-so-hardLimiter: Hard Limiter ladspa-matrix-ms-st-1421-so-matrixMSSt: Matrix: MS to Stereo ladspa-ls-filter-1908-so-lsFilter: LS Filter ladspa-gverb-1216-so-gverb: GVerb ladspa-am-pitchshift-1433-so-amPitchshift: AM pitchshifter ladspa-sifter-1210-so-sifter: Signal sifter ladspa-gsm-1215-so-gsm: GSM simulator ladspa-ambisonic2-so-Ambisonics-21-panner: AMB order 2,1 panner ladspa-ambisonic2-so-Ambisonics-21-rotator: AMB order 2,1 rotator ladspa-ambisonic2-so-Ambisonics-22-panner: AMB order 2,2 panner ladspa-ambisonic2-so-Ambisonics-22-rotator: AMB order 2,2 rotator ladspa-matrix-st-ms-1420-so-matrixStMS: Matrix: Stereo to MS ladspa-foldover-1213-so-foldover: Foldover distortion ladspa-satan-maximiser-1408-so-satanMaximiser: Barry's Satan Maximiser ladspa-tap-eq-so-tap-equalizer: TAP Equalizer ladspa-ambisonic1-so-Ambisonics-11-mono-panner: AMB order 1,1 mono panner ladspa-ambisonic1-so-Ambisonics-11-stereo-panner: AMB order 1,1 stereo panner ladspa-ambisonic1-so-Ambisonics-11-rotator: AMB order 1,1 rotator ladspa-ambisonic1-so-Ambisonics-11-square-decoder: AMB order 1,1 square decoder ladspa-ambisonic1-so-Ambisonics-11-hexagon-decoder: AMB order 1,1 hexagon decoder ladspa-ambisonic1-so-Ambisonics-11-cube-decoder: AMB order 1,1 cube decoder ladspa-guitarix-IR-so-guitarix-IR: guitarix_IR ladspa-g2reverb-so-G2reverb: Stereo reverb ladspa-bode-shifter-1431-so-bodeShifter: Bode frequency shifter ladspa-comb-splitter-1411-so-combSplitter: Comb Splitter ladspa-matrix-spatialiser-1422-so-matrixSpatialiser: Matrix Spatialiser ladspa-sync-square-1678-so-syncsquare-faga-oa: Clock Oscillator with Gate (FAGA) ladspa-sync-square-1678-so-syncsquare-fcga-oa: Clock Oscillator with Gate (FCGA) ladspa-pointer-cast-1910-so-pointerCastDistortion: Pointer cast distortion ladspa-fad-delay-1192-so-fadDelay: Fractionally Addressed Delay Line ladspa-tap-pinknoise-so-tap-pinknoise: TAP Pink/Fractal Noise ladspa-tap-dynamics-m-so-tap-dynamics-m: TAP Dynamics (M) ladspa-triple-para-1204-so-triplePara: Triple band parametric with shelves ladspa-tap-autopan-so-tap-autopan: TAP AutoPanner ladspa-decay-1886-so-decay: Exponential signal decay ladspa-tap-eqbw-so-tap-equalizer-bw: TAP Equalizer/BW ladspa-dyson-compress-1403-so-dysonCompress: Dyson compressor ladspa-tap-rotspeak-so-tap-rotspeak: TAP Rotary Speaker ladspa-delay-so-delay-5s: Simple Delay Line ladspa-guitarix-freeverb-so-guitarix-freeverb: guitarix_freeverb ladspa-sequencer32-1676-so-sequencer32: Analogue Style 32 Step Sequencer ladspa-gong-1424-so-gong: Gong model ladspa-revdelay-1605-so-revdelay: Reverse Delay (5s max) ladspa-declip-1195-so-declip: Declipper ladspa-dahdsr-2021-so-dahdsr-g+t-audio: DAHDSR Envelope with Gate and Trigger (Audio-Rate Inputs) ladspa-dahdsr-2021-so-dahdsr-g+t-control: DAHDSR Envelope with Gate and Trigger (Control Inputs) ladspasrc-dahdsr-2021-so-dahdsr-cg+t-control: DAHDSR Envelope with Control Gate and Trigger (Control Inputs) ladspa-cs-phaser-so-Phaser1: Phaser1 - Similar to CSound's phaser1 by Sean Costello ladspa-cs-phaser-so-Phaser1+LFO: Phaser1 with LFO ladspa-rate-shifter-1417-so-rateShifter: Rate shifter ladspa-guitarix-so-Simulators: guitarix ladspa-phasers-1217-so-lfoPhaser: LFO Phaser ladspa-phasers-1217-so-fourByFourPole: 4 x 4 pole allpass ladspa-phasers-1217-so-autoPhaser: Auto phaser ladspa-pitch-scale-1194-so-pitchScaleHQ: Higher Quality Pitch Scaler ladspa-difference-2030-so-difference-iama-oa: Signal Difference (IAMA) ladspa-difference-2030-so-difference-iamc-oa: Signal Difference (IAMC) ladspa-difference-2030-so-difference-icma-oa: Signal Difference (ICMA) ladspasrc-difference-2030-so-difference-icmc-oc: Signal Difference (ICMC) ladspa-cmt-so-bf2cube: Ambisonic Decoder (B-Format to Cube) ladspa-cmt-so-bf2quad: Ambisonic Decoder (B-Format to Quad) ladspa-cmt-so-bf2stereo: Ambisonic Decoder (B-Format to Stereo) ladspa-cmt-so-fmh2oct: Ambisonic Decoder (FMH-Format to Octagon) ladspa-cmt-so-encode-bformat: Ambisonic Encoder (B-Format) ladspa-cmt-so-encode-fmh: Ambisonic Encoder (FMH-Format) ladspa-cmt-so-bf-rotate-z: Ambisonic Rotation (B-Format, Horizontal) ladspa-cmt-so-fmh-rotate-z: Ambisonic Rotation (FMH-Format, Horizontal) ladspa-cmt-so-amp-mono: Amplifier (Mono) ladspa-cmt-so-amp-stereo: Amplifier (Stereo) ladspa-cmt-so-am: Amplitude Modulator ladspasrc-cmt-so-analogue: Analogue Voice ladspa-cmt-so-canyon-delay: Canyon Delay ladspa-cmt-so-disintegrator: Disintegrator ladspa-cmt-so-sledgehammer: Dynamic Sledgehammer ladspa-cmt-so-delay-0-01s: Echo Delay Line (Maximum Delay 0.01s) ladspa-cmt-so-delay-0-1s: Echo Delay Line (Maximum Delay 0.1s) ladspa-cmt-so-delay-1s: Echo Delay Line (Maximum Delay 1s) ladspa-cmt-so-delay-5s: Echo Delay Line (Maximum Delay 5s) ladspa-cmt-so-delay-60s: Echo Delay Line (Maximum Delay 60s) ladspasink-cmt-so-track-max-peak: Envelope Tracker (Maximum Peak) ladspasink-cmt-so-track-max-rms: Envelope Tracker (Maximum RMS) ladspasink-cmt-so-track-peak: Envelope Tracker (Peak) ladspasink-cmt-so-track-rms: Envelope Tracker (RMS) ladspa-cmt-so-fmh2bf: FMH-Format to B-Format (Discards RSTUV Channels) ladspa-cmt-so-fbdelay-0-01s: Feedback Delay Line (Maximum Delay 0.01s) ladspa-cmt-so-fbdelay-0-1s: Feedback Delay Line (Maximum Delay 0.1s) ladspa-cmt-so-fbdelay-1s: Feedback Delay Line (Maximum Delay 1s) ladspa-cmt-so-fbdelay-5s: Feedback Delay Line (Maximum Delay 5s) ladspa-cmt-so-fbdelay-60s: Feedback Delay Line (Maximum Delay 60s) ladspa-cmt-so-freeverb3: Freeverb (Version 3) ladspa-cmt-so-grain-scatter: Granular Scatter Processor ladspa-cmt-so-hard-gate: Hard Gate ladspa-cmt-so-hpf: High Pass Filter (One Pole) ladspa-cmt-so-identity-audio: Identity (Audio) ladspasrc-cmt-so-identity-control: Identity (Control) ladspa-cmt-so-lofi: Lo Fi ladspasrc-cmt-so-logistic: Logistic Map Control Generator ladspa-cmt-so-lpf: Low Pass Filter (One Pole) ladspa-cmt-so-mixer: Mixer (Stereo to Mono) ladspasrc-cmt-so-noise-source-white: Noise Source (White) ladspasink-cmt-so-null-ai: Null (Audio Input) ladspasrc-cmt-so-null-ao: Null (Audio Output) ladspasrc-cmt-so-null-ci: Null (Control Input) ladspasrc-cmt-so-null-co: Null (Control Output) ladspasrc-cmt-so-organ: Organ ladspasink-cmt-so-peak: Peak Monitor ladspasrc-cmt-so-phasemod: Phase Modulated Voice ladspasrc-cmt-so-pink-interpolated-audio: Pink Noise (Interpolated) ladspasrc-cmt-so-pink-full-frequency: Pink Noise (full frequency range) ladspasrc-cmt-so-pink-sh: Pink Noise (sample and hold) ladspa-cmt-so-compress-peak: Simple Compressor (Peak Envelope Tracking) ladspa-cmt-so-compress-rms: Simple Compressor (RMS Envelope Tracking) ladspa-cmt-so-expand-peak: Simple Expander (Peak Envelope Tracking) ladspa-cmt-so-expand-rms: Simple Expander (RMS Envelope Tracking) ladspa-cmt-so-limit-peak: Simple Limiter (Peak Envelope Tracking) ladspa-cmt-so-limit-rms: Simple Limiter (RMS Envelope Tracking) ladspa-cmt-so-sine-faaa: Sine Oscillator (Freq:audio, Amp:audio) ladspa-cmt-so-sine-faac: Sine Oscillator (Freq:audio, Amp:control) ladspa-cmt-so-sine-fcaa: Sine Oscillator (Freq:control, Amp:audio) ladspasrc-cmt-so-sine-fcac: Sine Oscillator (Freq:control, Amp:control) ladspasrc-cmt-so-syndrum: Syn Drum ladspa-cmt-so-vcf303: VCF 303 ladspa-cmt-so-wshape-sine: Wave Shaper (Sine-Based) ladspa-tap-limiter-so-tap-limiter: TAP Scaling Limiter ladspa-surround-encoder-1401-so-surroundEncoder: Surround matrix encoder ladspa-sc2-1426-so-sc2: SC2 ladspa-mvchpf24-so-Mvchpf-1: Mvchpf-1 Digital implementation of the VC HP filter invented by R.A. Moog ladspa-gate-1410-so-gate: Gate ladspa-bandpass-iir-1892-so-bandpass-iir: Glame Bandpass Filter ladspa-sc4m-1916-so-sc4m: SC4 mono ladspa-ladspa-guitarix-so-guitarix-amp: Guitarix Amp ladspa-ladspa-guitarix-so-guitarix-fx: Guitarix Stereo Fx ladspa-guitarix-echo-so-guitarix-echo: guitarix_echo ladspasrc-interpolator-1660-so-interpolator: Control to Audio Interpolator ladspa-ratio-2034-so-ratio-nada-oa: Signal Ratio (NADA) ladspa-ratio-2034-so-ratio-nadc-oa: Signal Ratio (NADC) ladspa-ratio-2034-so-ratio-ncda-oa: Signal Ratio (NCDA) ladspasrc-ratio-2034-so-ratio-ncdc-oc: Signal Ratio (NCDC) ladspa-filter-so-lpf: Simple Low Pass Filter ladspa-filter-so-hpf: Simple High Pass Filter ladspa-butterworth-1902-so-bwxover-iir: Glame Butterworth X-over Filter ladspa-butterworth-1902-so-buttlow-iir: GLAME Butterworth Lowpass ladspa-butterworth-1902-so-butthigh-iir: GLAME Butterworth Highpass ladspa-tracker-2025-so-tracker-gaaadaia-oa: Signal Tracker (Audio Rates) ladspa-tracker-2025-so-tracker-gaacdcia-oa: Signal Tracker (Control Rates) ladspa-mbeq-1197-so-mbeq: Multiband EQ ladspa-blvco-so-Pulse-VCO: Pulse-VCO -- Anti-aliased oscillator ladspa-blvco-so-Saw-VCO: Saw-VCO -- Anti-aliased oscillator ladspa-blvco-so-Rec-VCO: Rec-VCO -- Anti-aliased oscillator ladspa-tap-chorusflanger-so-tap-chorusflanger: TAP Chorus/Flanger ladspa-transient-1206-so-transient: Transient mangler ladspa-sine-so-sine-faaa: Sine Oscillator (Freq:audio, Amp:audio) ladspa-sine-so-sine-faac: Sine Oscillator (Freq:audio, Amp:control) ladspa-sine-so-sine-fcaa: Sine Oscillator (Freq:control, Amp:audio) ladspasrc-sine-so-sine-fcac: Sine Oscillator (Freq:control, Amp:control) ladspa-vynil-1905-so-vynil: VyNil (Vinyl Effect) ladspa-lp4pole-1671-so-lp4pole-faraia-oa: 4 Pole Low-Pass Filter with Resonance (FARAIA) ladspa-lp4pole-1671-so-lp4pole-fcrcia-oa: 4 Pole Low-Pass Filter with Resonance (FCRCIA) ladspa-ringmod-1188-so-ringmod-2i1o: Ringmod with two inputs ladspa-ringmod-1188-so-ringmod-1i1o1l: Ringmod with LFO ladspa-random-1661-so-random-fasa-oa: Random Wave Generator (FASA) ladspa-random-1661-so-random-fasc-oa: Random Wave Generator (FASC) ladspa-random-1661-so-random-fcsa-oa: Random Wave Generator (FCSA) ladspasrc-random-1661-so-random-fcsc-oa: Random Wave Generator (FCSC) ladspa-libwasp-noisifier-so-NoisifierM: Noisifier (mono) ladspa-libwasp-noisifier-so-NoisifierS: Noisifier (stereo) ladspa-multivoice-chorus-1201-so-multivoiceChorus: Multivoice Chorus ladspasrc-sin-cos-1881-so-sinCos: Sine + cosine oscillator ladspa-sawtooth-1641-so-sawtooth-fa-oa: Bandlimited Sawtooth Oscillator (FA) ladspasrc-sawtooth-1641-so-sawtooth-fc-oa: Bandlimited Sawtooth Oscillator (FC) ladspa-sc1-1425-so-sc1: SC1 ladspa-split-1406-so-split: Mono to Stereo splitter ladspa-tap-sigmoid-so-tap-sigmoid: TAP Sigmoid Booster ladspa-fmod-1656-so-fmod-fama-oa: Frequency Modulator (FAMA) ladspa-fmod-1656-so-fmod-famc-oa: Frequency Modulator (FAMC) ladspa-fmod-1656-so-fmod-fcma-oa: Frequency Modulator (FCMA) ladspasrc-fmod-1656-so-fmod-fcmc-oc: Frequency Modulator (FCMC) ladspa-hilbert-1440-so-hilbert: Hilbert transformer ladspa-bode-shifter-cv-1432-so-bodeShifterCV: Bode frequency shifter (CV) ladspa-sc3-1427-so-sc3: SC3 ladspa-branch-1673-so-branch-ia-oaoa: Signal Branch (IA) ladspasrc-branch-1673-so-branch-ic-ococ: Signal Branch (IC) ladspa-ambisonic0-so-Tricardioid-to-AMB: Three cardioids to AMB matrix ladspa-ambisonic0-so-Virtualmic: Virtual stereo microphone ladspa-triangle-1649-so-triangle-fasa-oa: Bandlimited Variable Slope Triangle Oscillator (FASA) ladspa-triangle-1649-so-triangle-fasc-oa: Bandlimited Variable Slope Triangle Oscillator (FASC) ladspa-triangle-1649-so-triangle-fcsa-oa: Bandlimited Variable Slope Triangle Oscillator (FCSA) ladspasrc-triangle-1649-so-triangle-fcsc-oa: Bandlimited Variable Slope Triangle Oscillator (FCSC) ladspa-valve-rect-1405-so-valveRect: Valve rectifier ladspa-tap-echo-so-tap-stereo-echo: TAP Stereo Echo ladspa-plate-1423-so-plate: Plate reverb ladspa-guitarix-compressor-so-guitarix-compressor: guitarix_compressor ladspa-product-1668-so-product-iaia-oa: Signal Product (IAIA) ladspa-product-1668-so-product-iaic-oa: Signal Product (IAIC) ladspasrc-product-1668-so-product-icic-oc: Signal Product (ICIC) ladspa-tap-tubewarmth-so-tap-tubewarmth: TAP TubeWarmth ladspa-calf-so-Filter: Calf Filter LADSPA ladspa-calf-so-Filterclavier: Calf Filterclavier LADSPA ladspa-calf-so-Flanger: Calf Flanger LADSPA ladspa-calf-so-Reverb: Calf Reverb LADSPA ladspa-calf-so-VintageDelay: Calf Vintage Delay LADSPA ladspa-calf-so-RotarySpeaker: Calf Rotary Speaker LADSPA ladspa-calf-so-Phaser: Calf Phaser LADSPA ladspa-calf-so-MultiChorus: Calf MultiChorus LADSPA ladspa-calf-so-Compressor: Calf Compressor LADSPA ladspa-single-para-1203-so-singlePara: Single band parametric ladspa-smooth-decimate-1414-so-smoothDecimate: Smooth Decimator ladspa-fm-osc-1415-so-fmOsc: FM Oscillator ladspa-divider-1186-so-divider: Audio Divider (Suboctave Generator) ladspa-decimator-1202-so-decimator: Decimator ladspa-imp-1199-so-imp: Impulse convolver ladspa-amp-1181-so-amp: Simple amplifier ladspa-libwasp-booster-so-BoosterM: Clipping Booster (mono) ladspa-libwasp-booster-so-BoosterS: Clipping Booster (stereo) ladspa-guitarix-crybaby-so-guitarix-crybaby: guitarix_crybaby ladspa-allpass-1895-so-allpass-n: Allpass delay line, noninterpolating ladspa-allpass-1895-so-allpass-l: Allpass delay line, linear interpolation ladspa-allpass-1895-so-allpass-c: Allpass delay line, cubic spline interpolation 357 features: +-- 357 elements Here is the listing of one filter for reference too, this one is even special cause does a mono to stereo, and not just keeps the channels and filters, it works great: $ gst-inspect-1.0 ladspa-caps-so-Plate Factory Details: Rank: none (0) Long-name: C* Plate - Versatile plate reverb Klass: Filter/Effect/Audio/LADSPA Description: C* Plate - Versatile plate reverb Author: Tim Goetze <tim@quitte.de>, Juan Manuel Borges Caño <juanmabcmail@gmail.com>, Andy Wingo <wingo at pobox.com>, Steve Baker <stevebaker_org@yahoo.co.uk>, Erik Walthinsen <omega@cse.ogi.edu>, Stefan Kost <ensonic@users.sf.net> (audiotestsrc), Wim Taymans <wim@fluendo.com> (fakesink) Plugin Details: Name: ladspa Description: LADSPA plugin Filename: ./.libs/libgstladspa.so Version: 1.0.6 License: LGPL Source module: gst-plugins-bad Source release date: 2013-03-22 Binary package: GStreamer Bad Plug-ins source release Origin URL: Unknown package origin GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstBaseTransform +----GstAudioFilter +----ladspa-caps-so-Plate Pad Templates: SRC template: 'src' Availability: Always Capabilities: audio/x-raw format: F32LE channels: 2 rate: [ 1, 2147483647 ] layout: interleaved SINK template: 'sink' Availability: Always Capabilities: audio/x-raw format: F32LE channels: 1 rate: [ 1, 2147483647 ] layout: interleaved Element Flags: no flags set Element Implementation: Has change_state() function: gst_audio_filter_change_state Element has no clocking capabilities. Element has no indexing capabilities. Element has no URI handling capabilities. Pads: SINK: 'sink' Implementation: Has chainfunc(): gst_base_transform_chain Has custom eventfunc(): gst_base_transform_sink_event Has custom queryfunc(): gst_base_transform_query Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default Pad Template: 'sink' SRC: 'src' Implementation: Has getrangefunc(): gst_base_transform_getrange Has custom eventfunc(): gst_base_transform_src_event Has custom queryfunc(): gst_base_transform_query Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default Pad Template: 'src' Element Properties: name : The name of the object flags: readable, writable String. Default: "ladspa-caps-so-plate0" parent : The parent of the object flags: readable, writable Object of type "GstObject" qos : Handle Quality-of-Service events flags: readable, writable Boolean. Default: false bandwidth : bandwidth flags: readable, writable, controllable Float. Range: 0.005 - 0.999 Default: 0.502 tail : tail flags: readable, writable, controllable Float. Range: 0 - 0.749 Default: 0.3745 damping : damping flags: readable, writable, controllable Float. Range: 0.0005 - 1 Default: 0.250375 blend : blend flags: readable, writable, controllable Float. Range: 0 - 1 Default: 0.25 --------------------------- I don't know if you should take the time to review it, which could take long, assuming you are also not idle, so perhaps this and the openal port that i submitted recenlty proves that i could deserve git access and so keep working fluidly. The openal port is gonna really be enforced with what i learned with this plugin, src, transforms and sinks all of them + dynamic (hopefully), though i could for sure learn better yet. I will be glad anyway too. As so, to hear your corrections. As a final remark if accepted, consider too moving to -good. Thanks, hoping people enjoy as much as i enjoyed programming it. juanmabc ---------------------------
Created attachment 242657 [details] [review] make consistency of strdown everywhere (elements) This unneeded, small and clean, purely consistency fix, on top of the first patch, makes all the elements lowercase, in line with the parameters, that were allready lower-case. This makes the element determination more intuitive and less random, and makes the work with ladspa elements more expected. Keeps the premise of no collisions (357 elements here yet), and ends any incompatible access break, freezed, for keeping the users sane. I could have waited for review and commit, yet since so small, consider yourself. I determine it both as one compound patch. Thanks.
Consistency fixed output: $ gst-inspect-1.0 ladspa: Plugin Details: Name: ladspa Description: LADSPA plugin Filename: ./.libs/libgstladspa.so Version: 1.0.6 License: LGPL Source module: gst-plugins-bad Source release date: 2013-03-22 Binary package: GStreamer Bad Plug-ins source release Origin URL: Unknown package origin ladspa-tape-delay-1211-so-tapedelay: Tape Delay Simulation ladspa-guitarix-amp-so-guitarix-amp: guitarix_amp ladspa-retro-flange-1208-so-retroflange: Retro Flanger ladspa-amp-1654-so-amp-gaia-oa: Amplifier (GAIA) ladspa-amp-1654-so-amp-gcia-oa: Amplifier (GCIA) ladspa-mvclpf24-so-mvclpf-1: Mvclpf-1 Digital implementation of the VC filter invented by R.A.Moog ladspa-mvclpf24-so-mvclpf-2: Mvclpf-2 Digital implementation of the VC filter invented by R.A.Moog ladspa-mvclpf24-so-mvclpf-3: Mvclpf-3 Digital implementation of the VC filter invented by R.A.Moog ladspa-mvclpf24-so-mvclpf-4: Mvclpf-4 Digital implementation of the VC filter invented by R.A.Moog ladspa-square-1643-so-square-fa-oa: Bandlimited Square Oscillator (FA) ladspasrc-square-1643-so-square-fc-oa: Bandlimited Square Oscillator (FC) ladspa-lcr-delay-1436-so-lcrdelay: L/C/R Delay ladspa-gong-beater-1439-so-gongbeater: Gong beater ladspa-filters-so-parametric1: 4-band parametric filter ladspa-amp-so-amp-mono: Mono Amplifier ladspa-amp-so-amp-stereo: Stereo Amplifier ladspa-tap-reverb-so-tap-reverb: TAP Reverberator ladspa-wave-terrain-1412-so-waveterrain: Wave Terrain Oscillator ladspa-harmonic-gen-1220-so-harmonicgen: Harmonic generator ladspa-se4-1883-so-se4: SE4 ladspa-guitarix-distortion-so-guitarix-distortion: guitarix_distortion ladspasrc-impulse-1885-so-impulse-fc: Nonbandlimited single-sample impulses (Frequency: Control) ladspa-cs-chorus-so-chorus1: Chorus1 - Based on CSound orchestra by Sean Costello ladspa-cs-chorus-so-chorus2: Chorus2 - Based on CSound orchestra by Sean Costello ladspa-cs-chorus-so-triplechorus: Triple chorus ladspa-sequencer64-1675-so-sequencer64: Analogue Style 64 Step Sequencer ladspa-chebstortion-1430-so-chebstortion: Chebyshev distortion ladspa-vco-sawpulse-so-pulse-vco: Pulse-VCO -- Anti-aliased oscillator ladspa-vco-sawpulse-so-saw-vco: Saw-VCO -- Anti-aliased oscillator ladspa-vco-sawpulse-so-rec-vco: Rec-VCO -- Anti-aliased oscillator ladspa-hermes-filter-1200-so-hermesfilter: Hermes Filter ladspa-pitch-scale-1193-so-pitchscale: Pitch Scaler ladspa-pulse-1645-so-pulse-fapa-oa: Bandlimited Variable Width Pulse Oscillator (FAPA) ladspa-pulse-1645-so-pulse-fapc-oa: Bandlimited Variable Width Pulse Oscillator (FAPC) ladspa-pulse-1645-so-pulse-fcpa-oa: Bandlimited Variable Width Pulse Oscillator (FCPA) ladspasrc-pulse-1645-so-pulse-fcpc-oa: Bandlimited Variable Width Pulse Oscillator (FCPC) ladspa-quantiser20-2027-so-quantiser20: Quantiser (20 Steps) ladspa-tap-deesser-so-tap-deesser: TAP DeEsser ladspa-tap-pitch-so-tap-pitch: TAP Pitch Shifter ladspa-dj-eq-1901-so-dj-eq-mono: DJ EQ (mono) ladspa-dj-eq-1901-so-dj-eq: DJ EQ ladspa-mod-delay-1419-so-moddelay: Modulatable delay ladspa-sinus-wavewrapper-1198-so-sinuswavewrapper: Sinus wavewrapper ladspa-inv-1429-so-inv: Inverter ladspa-tap-vibrato-so-tap-vibrato: TAP Vibrato ladspa-bandpass-a-iir-1893-so-bandpass-a-iir: Glame Bandpass Analog Filter ladspa-foverdrive-1196-so-foverdrive: Fast overdrive ladspa-svf-1214-so-svf: State Variable Filter ladspa-freq-tracker-1418-so-freqtracker: Frequency tracker ladspa-dj-flanger-1438-so-djflanger: DJ flanger ladspa-autotalent-so-autotalent: Autotalent ladspa-delay-1898-so-delay-n: Simple delay line, noninterpolating ladspa-delay-1898-so-delay-l: Simple delay line, linear interpolation ladspa-delay-1898-so-delay-c: Simple delay line, cubic spline interpolation ladspa-giant-flange-1437-so-giantflange: Giant flange ladspa-comb-1887-so-comb-n: Comb delay line, noninterpolating ladspa-comb-1887-so-comb-l: Comb delay line, linear interpolation ladspa-comb-1887-so-comb-c: Comb delay line, cubic spline interpolation ladspa-sum-1665-so-sum-iaia-oa: Signal Sum (IAIA) ladspa-sum-1665-so-sum-iaic-oa: Signal Sum (IAIC) ladspasrc-sum-1665-so-sum-icic-oc: Signal Sum (ICIC) ladspa-adsr-1680-so-adsr-g+t: ADSR Envelope with Gate and Trigger ladspa-highpass-iir-1890-so-highpass-iir: Glame Highpass Filter ladspa-crossover-dist-1404-so-crossoverdist: Crossover distortion ladspa-libwasp-xshaper-so-xshaperm: X-Shaper (mono) ladspa-libwasp-xshaper-so-xshapers: X-Shaper (stereo) ladspa-alias-1407-so-alias: Aliasing ladspa-valve-1209-so-valve: Valve saturation ladspa-tap-reflector-so-tap-reflector: TAP Reflector ladspa-latency-1914-so-artificiallatency: Artificial latency ladspa-dc-remove-1207-so-dcremove: DC Offset Remover ladspa-comb-1190-so-comb: Comb Filter ladspa-sync-pulse-2023-so-syncpulse-fapaga-oa: Clock Pulse Oscillator with Gate (FAPAGA) ladspa-sync-pulse-2023-so-syncpulse-fcpcga-oa: Clock Pulse Oscillator with Gate (FCPCGA) ladspa-tap-dynamics-st-so-tap-dynamics-st: TAP Dynamics (St) ladspa-flanger-1191-so-flanger: Flanger ladspa-lowpass-iir-1891-so-lowpass-iir: Glame Lowpass Filter ladspasrc-noise-so-noise-white: White Noise Source ladspa-ambisonic3-so-ambisonics-31-panner: AMB order 3,1 panner ladspa-ambisonic3-so-ambisonics-31-rotator: AMB order 3,1 rotator ladspa-ambisonic3-so-ambisonics-33-panner: AMB order 3,3 panner ladspa-ambisonic3-so-ambisonics-33-rotator: AMB order 3,3 rotator ladspa-quantiser50-2028-so-quantiser50: Quantiser (50 Steps) ladspa-notch-iir-1894-so-notch-iir: Mag's Notch Filter ladspasrc-analogue-osc-1416-so-analogueosc: Analogue Oscillator ladspa-zm1-1428-so-zm1: z-1 ladspa-sc4-1882-so-sc4: SC4 ladspa-step-muxer-1212-so-stepmuxer: Step Demuxer ladspa-quantiser100-2029-so-quantiser100: Quantiser (100 Steps) ladspa-adsr-1653-so-adsr: ADSR Envelope ladspa-caps-so-eq: C* Eq - 10-band equalizer ladspa-caps-so-eq2x2: C* Eq2x2 - stereo 10-band equalizer ladspa-caps-so-compress: C* Compress - Mono compressor ladspa-caps-so-pan: C* Pan - Pan and width ladspa-caps-so-preampiii: C* PreampIII - Tube preamp emulation ladspa-caps-so-preampiv: C* PreampIV - Tube preamp emulation + tone controls ladspa-caps-so-tonestack: C* ToneStack - Tone stack emulation ladspa-caps-so-tonestacklt: C* ToneStackLT - Tone stack emulation, lattice filter 44.1 ladspa-caps-so-ampiii: C* AmpIII - Tube amp ladspa-caps-so-ampiv: C* AmpIV - Tube amp + tone controls ladspa-caps-so-ampv: C* AmpV - Tube amp ladspa-caps-so-ampvts: C* AmpVTS - Tube amp + Tone stack ladspa-caps-so-cabineti: C* CabinetI - Loudspeaker cabinet emulation ladspa-caps-so-cabinetii: C* CabinetII - Refined loudspeaker cabinet emulation ladspa-caps-so-clip: C* Clip - Hard clipper, 8x oversampled ladspa-caps-so-chorusi: C* ChorusI - Mono chorus/flanger ladspa-caps-so-stereochorusi: C* StereoChorusI - Stereo chorus/flanger ladspa-caps-so-chorusii: C* ChorusII - Mono chorus/flanger modulated by a fractal ladspa-caps-so-stereochorusii: C* StereoChorusII - Stereo chorus/flanger modulated by a fractal ladspa-caps-so-phaseri: C* PhaserI - Mono phaser ladspa-caps-so-phaserii: C* PhaserII - Mono phaser modulated by a Lorenz fractal ladspa-caps-so-sweepvfi: C* SweepVFI - Resonant filter swept by a Lorenz fractal ladspa-caps-so-sweepvfii: C* SweepVFII - Resonant filter, f and Q swept by a Lorenz fractal ladspa-caps-so-autowah: C* AutoWah - Resonant envelope-following filter ladspa-caps-so-scape: C* Scape - Stereo delay + Filters ladspasrc-caps-so-vcos: C* VCOs - Virtual 'analogue' oscillator ladspasrc-caps-so-vcod: C* VCOd - Double VCO with detune and hard sync options ladspasrc-caps-so-ceo: C* CEO - Chief Executive Oscillator ladspasrc-caps-so-sin: C* Sin - Sine wave generator ladspasrc-caps-so-white: C* White - White noise generator ladspasrc-caps-so-lorenz: C* Lorenz - The sound of a Lorenz attractor ladspasrc-caps-so-roessler: C* Roessler - The sound of a Roessler attractor ladspa-caps-so-jvrev: C* JVRev - Stanford-style reverb from STK ladspa-caps-so-plate: C* Plate - Versatile plate reverb ladspa-caps-so-plate2x2: C* Plate2x2 - Versatile plate reverb, stereo inputs ladspasrc-caps-so-click: C* Click - Metronome ladspasrc-caps-so-dirac: C* Dirac - One-sample impulse generator ladspa-caps-so-hrtf: C* HRTF - Head-related transfer function at elevation 0 ladspa-karaoke-1409-so-karaoke: Karaoke ladspa-sequencer16-1677-so-sequencer16: Analogue Style 16 Step Sequencer ladspa-diode-1185-so-diode: Diode Processor ladspa-xfade-1915-so-xfade: Crossfade ladspa-xfade-1915-so-xfade4: Crossfade (4 outs) ladspa-fast-lookahead-limiter-1913-so-fastlookaheadlimiter: Fast Lookahead limiter ladspa-tap-tremolo-so-tap-tremolo: TAP Tremolo ladspa-delayorama-1402-so-delayorama: Delayorama ladspa-shaper-1187-so-shaper: Wave shaper ladspa-tap-doubler-so-tap-doubler: TAP Fractal Doubler ladspa-const-1909-so-const: Constant Signal Generator ladspa-hard-limiter-1413-so-hardlimiter: Hard Limiter ladspa-matrix-ms-st-1421-so-matrixmsst: Matrix: MS to Stereo ladspa-ls-filter-1908-so-lsfilter: LS Filter ladspa-gverb-1216-so-gverb: GVerb ladspa-am-pitchshift-1433-so-ampitchshift: AM pitchshifter ladspa-sifter-1210-so-sifter: Signal sifter ladspa-gsm-1215-so-gsm: GSM simulator ladspa-ambisonic2-so-ambisonics-21-panner: AMB order 2,1 panner ladspa-ambisonic2-so-ambisonics-21-rotator: AMB order 2,1 rotator ladspa-ambisonic2-so-ambisonics-22-panner: AMB order 2,2 panner ladspa-ambisonic2-so-ambisonics-22-rotator: AMB order 2,2 rotator ladspa-matrix-st-ms-1420-so-matrixstms: Matrix: Stereo to MS ladspa-foldover-1213-so-foldover: Foldover distortion ladspa-satan-maximiser-1408-so-satanmaximiser: Barry's Satan Maximiser ladspa-tap-eq-so-tap-equalizer: TAP Equalizer ladspa-ambisonic1-so-ambisonics-11-mono-panner: AMB order 1,1 mono panner ladspa-ambisonic1-so-ambisonics-11-stereo-panner: AMB order 1,1 stereo panner ladspa-ambisonic1-so-ambisonics-11-rotator: AMB order 1,1 rotator ladspa-ambisonic1-so-ambisonics-11-square-decoder: AMB order 1,1 square decoder ladspa-ambisonic1-so-ambisonics-11-hexagon-decoder: AMB order 1,1 hexagon decoder ladspa-ambisonic1-so-ambisonics-11-cube-decoder: AMB order 1,1 cube decoder ladspa-guitarix-ir-so-guitarix-ir: guitarix_IR ladspa-g2reverb-so-g2reverb: Stereo reverb ladspa-bode-shifter-1431-so-bodeshifter: Bode frequency shifter ladspa-comb-splitter-1411-so-combsplitter: Comb Splitter ladspa-matrix-spatialiser-1422-so-matrixspatialiser: Matrix Spatialiser ladspa-sync-square-1678-so-syncsquare-faga-oa: Clock Oscillator with Gate (FAGA) ladspa-sync-square-1678-so-syncsquare-fcga-oa: Clock Oscillator with Gate (FCGA) ladspa-pointer-cast-1910-so-pointercastdistortion: Pointer cast distortion ladspa-fad-delay-1192-so-faddelay: Fractionally Addressed Delay Line ladspa-tap-pinknoise-so-tap-pinknoise: TAP Pink/Fractal Noise ladspa-tap-dynamics-m-so-tap-dynamics-m: TAP Dynamics (M) ladspa-triple-para-1204-so-triplepara: Triple band parametric with shelves ladspa-tap-autopan-so-tap-autopan: TAP AutoPanner ladspa-decay-1886-so-decay: Exponential signal decay ladspa-tap-eqbw-so-tap-equalizer-bw: TAP Equalizer/BW ladspa-dyson-compress-1403-so-dysoncompress: Dyson compressor ladspa-tap-rotspeak-so-tap-rotspeak: TAP Rotary Speaker ladspa-delay-so-delay-5s: Simple Delay Line ladspa-guitarix-freeverb-so-guitarix-freeverb: guitarix_freeverb ladspa-sequencer32-1676-so-sequencer32: Analogue Style 32 Step Sequencer ladspa-gong-1424-so-gong: Gong model ladspa-revdelay-1605-so-revdelay: Reverse Delay (5s max) ladspa-declip-1195-so-declip: Declipper ladspa-dahdsr-2021-so-dahdsr-g+t-audio: DAHDSR Envelope with Gate and Trigger (Audio-Rate Inputs) ladspa-dahdsr-2021-so-dahdsr-g+t-control: DAHDSR Envelope with Gate and Trigger (Control Inputs) ladspasrc-dahdsr-2021-so-dahdsr-cg+t-control: DAHDSR Envelope with Control Gate and Trigger (Control Inputs) ladspa-cs-phaser-so-phaser1: Phaser1 - Similar to CSound's phaser1 by Sean Costello ladspa-cs-phaser-so-phaser1+lfo: Phaser1 with LFO ladspa-rate-shifter-1417-so-rateshifter: Rate shifter ladspa-guitarix-so-simulators: guitarix ladspa-phasers-1217-so-lfophaser: LFO Phaser ladspa-phasers-1217-so-fourbyfourpole: 4 x 4 pole allpass ladspa-phasers-1217-so-autophaser: Auto phaser ladspa-pitch-scale-1194-so-pitchscalehq: Higher Quality Pitch Scaler ladspa-difference-2030-so-difference-iama-oa: Signal Difference (IAMA) ladspa-difference-2030-so-difference-iamc-oa: Signal Difference (IAMC) ladspa-difference-2030-so-difference-icma-oa: Signal Difference (ICMA) ladspasrc-difference-2030-so-difference-icmc-oc: Signal Difference (ICMC) ladspa-cmt-so-bf2cube: Ambisonic Decoder (B-Format to Cube) ladspa-cmt-so-bf2quad: Ambisonic Decoder (B-Format to Quad) ladspa-cmt-so-bf2stereo: Ambisonic Decoder (B-Format to Stereo) ladspa-cmt-so-fmh2oct: Ambisonic Decoder (FMH-Format to Octagon) ladspa-cmt-so-encode-bformat: Ambisonic Encoder (B-Format) ladspa-cmt-so-encode-fmh: Ambisonic Encoder (FMH-Format) ladspa-cmt-so-bf-rotate-z: Ambisonic Rotation (B-Format, Horizontal) ladspa-cmt-so-fmh-rotate-z: Ambisonic Rotation (FMH-Format, Horizontal) ladspa-cmt-so-amp-mono: Amplifier (Mono) ladspa-cmt-so-amp-stereo: Amplifier (Stereo) ladspa-cmt-so-am: Amplitude Modulator ladspasrc-cmt-so-analogue: Analogue Voice ladspa-cmt-so-canyon-delay: Canyon Delay ladspa-cmt-so-disintegrator: Disintegrator ladspa-cmt-so-sledgehammer: Dynamic Sledgehammer ladspa-cmt-so-delay-0-01s: Echo Delay Line (Maximum Delay 0.01s) ladspa-cmt-so-delay-0-1s: Echo Delay Line (Maximum Delay 0.1s) ladspa-cmt-so-delay-1s: Echo Delay Line (Maximum Delay 1s) ladspa-cmt-so-delay-5s: Echo Delay Line (Maximum Delay 5s) ladspa-cmt-so-delay-60s: Echo Delay Line (Maximum Delay 60s) ladspasink-cmt-so-track-max-peak: Envelope Tracker (Maximum Peak) ladspasink-cmt-so-track-max-rms: Envelope Tracker (Maximum RMS) ladspasink-cmt-so-track-peak: Envelope Tracker (Peak) ladspasink-cmt-so-track-rms: Envelope Tracker (RMS) ladspa-cmt-so-fmh2bf: FMH-Format to B-Format (Discards RSTUV Channels) ladspa-cmt-so-fbdelay-0-01s: Feedback Delay Line (Maximum Delay 0.01s) ladspa-cmt-so-fbdelay-0-1s: Feedback Delay Line (Maximum Delay 0.1s) ladspa-cmt-so-fbdelay-1s: Feedback Delay Line (Maximum Delay 1s) ladspa-cmt-so-fbdelay-5s: Feedback Delay Line (Maximum Delay 5s) ladspa-cmt-so-fbdelay-60s: Feedback Delay Line (Maximum Delay 60s) ladspa-cmt-so-freeverb3: Freeverb (Version 3) ladspa-cmt-so-grain-scatter: Granular Scatter Processor ladspa-cmt-so-hard-gate: Hard Gate ladspa-cmt-so-hpf: High Pass Filter (One Pole) ladspa-cmt-so-identity-audio: Identity (Audio) ladspasrc-cmt-so-identity-control: Identity (Control) ladspa-cmt-so-lofi: Lo Fi ladspasrc-cmt-so-logistic: Logistic Map Control Generator ladspa-cmt-so-lpf: Low Pass Filter (One Pole) ladspa-cmt-so-mixer: Mixer (Stereo to Mono) ladspasrc-cmt-so-noise-source-white: Noise Source (White) ladspasink-cmt-so-null-ai: Null (Audio Input) ladspasrc-cmt-so-null-ao: Null (Audio Output) ladspasrc-cmt-so-null-ci: Null (Control Input) ladspasrc-cmt-so-null-co: Null (Control Output) ladspasrc-cmt-so-organ: Organ ladspasink-cmt-so-peak: Peak Monitor ladspasrc-cmt-so-phasemod: Phase Modulated Voice ladspasrc-cmt-so-pink-interpolated-audio: Pink Noise (Interpolated) ladspasrc-cmt-so-pink-full-frequency: Pink Noise (full frequency range) ladspasrc-cmt-so-pink-sh: Pink Noise (sample and hold) ladspa-cmt-so-compress-peak: Simple Compressor (Peak Envelope Tracking) ladspa-cmt-so-compress-rms: Simple Compressor (RMS Envelope Tracking) ladspa-cmt-so-expand-peak: Simple Expander (Peak Envelope Tracking) ladspa-cmt-so-expand-rms: Simple Expander (RMS Envelope Tracking) ladspa-cmt-so-limit-peak: Simple Limiter (Peak Envelope Tracking) ladspa-cmt-so-limit-rms: Simple Limiter (RMS Envelope Tracking) ladspa-cmt-so-sine-faaa: Sine Oscillator (Freq:audio, Amp:audio) ladspa-cmt-so-sine-faac: Sine Oscillator (Freq:audio, Amp:control) ladspa-cmt-so-sine-fcaa: Sine Oscillator (Freq:control, Amp:audio) ladspasrc-cmt-so-sine-fcac: Sine Oscillator (Freq:control, Amp:control) ladspasrc-cmt-so-syndrum: Syn Drum ladspa-cmt-so-vcf303: VCF 303 ladspa-cmt-so-wshape-sine: Wave Shaper (Sine-Based) ladspa-tap-limiter-so-tap-limiter: TAP Scaling Limiter ladspa-surround-encoder-1401-so-surroundencoder: Surround matrix encoder ladspa-sc2-1426-so-sc2: SC2 ladspa-mvchpf24-so-mvchpf-1: Mvchpf-1 Digital implementation of the VC HP filter invented by R.A. Moog ladspa-gate-1410-so-gate: Gate ladspa-bandpass-iir-1892-so-bandpass-iir: Glame Bandpass Filter ladspa-sc4m-1916-so-sc4m: SC4 mono ladspa-ladspa-guitarix-so-guitarix-amp: Guitarix Amp ladspa-ladspa-guitarix-so-guitarix-fx: Guitarix Stereo Fx ladspa-guitarix-echo-so-guitarix-echo: guitarix_echo ladspasrc-interpolator-1660-so-interpolator: Control to Audio Interpolator ladspa-ratio-2034-so-ratio-nada-oa: Signal Ratio (NADA) ladspa-ratio-2034-so-ratio-nadc-oa: Signal Ratio (NADC) ladspa-ratio-2034-so-ratio-ncda-oa: Signal Ratio (NCDA) ladspasrc-ratio-2034-so-ratio-ncdc-oc: Signal Ratio (NCDC) ladspa-filter-so-lpf: Simple Low Pass Filter ladspa-filter-so-hpf: Simple High Pass Filter ladspa-butterworth-1902-so-bwxover-iir: Glame Butterworth X-over Filter ladspa-butterworth-1902-so-buttlow-iir: GLAME Butterworth Lowpass ladspa-butterworth-1902-so-butthigh-iir: GLAME Butterworth Highpass ladspa-tracker-2025-so-tracker-gaaadaia-oa: Signal Tracker (Audio Rates) ladspa-tracker-2025-so-tracker-gaacdcia-oa: Signal Tracker (Control Rates) ladspa-mbeq-1197-so-mbeq: Multiband EQ ladspa-blvco-so-pulse-vco: Pulse-VCO -- Anti-aliased oscillator ladspa-blvco-so-saw-vco: Saw-VCO -- Anti-aliased oscillator ladspa-blvco-so-rec-vco: Rec-VCO -- Anti-aliased oscillator ladspa-tap-chorusflanger-so-tap-chorusflanger: TAP Chorus/Flanger ladspa-transient-1206-so-transient: Transient mangler ladspa-sine-so-sine-faaa: Sine Oscillator (Freq:audio, Amp:audio) ladspa-sine-so-sine-faac: Sine Oscillator (Freq:audio, Amp:control) ladspa-sine-so-sine-fcaa: Sine Oscillator (Freq:control, Amp:audio) ladspasrc-sine-so-sine-fcac: Sine Oscillator (Freq:control, Amp:control) ladspa-vynil-1905-so-vynil: VyNil (Vinyl Effect) ladspa-lp4pole-1671-so-lp4pole-faraia-oa: 4 Pole Low-Pass Filter with Resonance (FARAIA) ladspa-lp4pole-1671-so-lp4pole-fcrcia-oa: 4 Pole Low-Pass Filter with Resonance (FCRCIA) ladspa-ringmod-1188-so-ringmod-2i1o: Ringmod with two inputs ladspa-ringmod-1188-so-ringmod-1i1o1l: Ringmod with LFO ladspa-random-1661-so-random-fasa-oa: Random Wave Generator (FASA) ladspa-random-1661-so-random-fasc-oa: Random Wave Generator (FASC) ladspa-random-1661-so-random-fcsa-oa: Random Wave Generator (FCSA) ladspasrc-random-1661-so-random-fcsc-oa: Random Wave Generator (FCSC) ladspa-libwasp-noisifier-so-noisifierm: Noisifier (mono) ladspa-libwasp-noisifier-so-noisifiers: Noisifier (stereo) ladspa-multivoice-chorus-1201-so-multivoicechorus: Multivoice Chorus ladspasrc-sin-cos-1881-so-sincos: Sine + cosine oscillator ladspa-sawtooth-1641-so-sawtooth-fa-oa: Bandlimited Sawtooth Oscillator (FA) ladspasrc-sawtooth-1641-so-sawtooth-fc-oa: Bandlimited Sawtooth Oscillator (FC) ladspa-sc1-1425-so-sc1: SC1 ladspa-split-1406-so-split: Mono to Stereo splitter ladspa-tap-sigmoid-so-tap-sigmoid: TAP Sigmoid Booster ladspa-fmod-1656-so-fmod-fama-oa: Frequency Modulator (FAMA) ladspa-fmod-1656-so-fmod-famc-oa: Frequency Modulator (FAMC) ladspa-fmod-1656-so-fmod-fcma-oa: Frequency Modulator (FCMA) ladspasrc-fmod-1656-so-fmod-fcmc-oc: Frequency Modulator (FCMC) ladspa-hilbert-1440-so-hilbert: Hilbert transformer ladspa-bode-shifter-cv-1432-so-bodeshiftercv: Bode frequency shifter (CV) ladspa-sc3-1427-so-sc3: SC3 ladspa-branch-1673-so-branch-ia-oaoa: Signal Branch (IA) ladspasrc-branch-1673-so-branch-ic-ococ: Signal Branch (IC) ladspa-ambisonic0-so-tricardioid-to-amb: Three cardioids to AMB matrix ladspa-ambisonic0-so-virtualmic: Virtual stereo microphone ladspa-triangle-1649-so-triangle-fasa-oa: Bandlimited Variable Slope Triangle Oscillator (FASA) ladspa-triangle-1649-so-triangle-fasc-oa: Bandlimited Variable Slope Triangle Oscillator (FASC) ladspa-triangle-1649-so-triangle-fcsa-oa: Bandlimited Variable Slope Triangle Oscillator (FCSA) ladspasrc-triangle-1649-so-triangle-fcsc-oa: Bandlimited Variable Slope Triangle Oscillator (FCSC) ladspa-valve-rect-1405-so-valverect: Valve rectifier ladspa-tap-echo-so-tap-stereo-echo: TAP Stereo Echo ladspa-plate-1423-so-plate: Plate reverb ladspa-guitarix-compressor-so-guitarix-compressor: guitarix_compressor ladspa-product-1668-so-product-iaia-oa: Signal Product (IAIA) ladspa-product-1668-so-product-iaic-oa: Signal Product (IAIC) ladspasrc-product-1668-so-product-icic-oc: Signal Product (ICIC) ladspa-tap-tubewarmth-so-tap-tubewarmth: TAP TubeWarmth ladspa-calf-so-filter: Calf Filter LADSPA ladspa-calf-so-filterclavier: Calf Filterclavier LADSPA ladspa-calf-so-flanger: Calf Flanger LADSPA ladspa-calf-so-reverb: Calf Reverb LADSPA ladspa-calf-so-vintagedelay: Calf Vintage Delay LADSPA ladspa-calf-so-rotaryspeaker: Calf Rotary Speaker LADSPA ladspa-calf-so-phaser: Calf Phaser LADSPA ladspa-calf-so-multichorus: Calf MultiChorus LADSPA ladspa-calf-so-compressor: Calf Compressor LADSPA ladspa-single-para-1203-so-singlepara: Single band parametric ladspa-smooth-decimate-1414-so-smoothdecimate: Smooth Decimator ladspa-fm-osc-1415-so-fmosc: FM Oscillator ladspa-divider-1186-so-divider: Audio Divider (Suboctave Generator) ladspa-decimator-1202-so-decimator: Decimator ladspa-imp-1199-so-imp: Impulse convolver ladspa-amp-1181-so-amp: Simple amplifier ladspa-libwasp-booster-so-boosterm: Clipping Booster (mono) ladspa-libwasp-booster-so-boosters: Clipping Booster (stereo) ladspa-guitarix-crybaby-so-guitarix-crybaby: guitarix_crybaby ladspa-allpass-1895-so-allpass-n: Allpass delay line, noninterpolating ladspa-allpass-1895-so-allpass-l: Allpass delay line, linear interpolation ladspa-allpass-1895-so-allpass-c: Allpass delay line, cubic spline interpolation 357 features: +-- 357 elements
Could you move the function from: ext/ladspa/gstmyutils.c | 93 ++++ ext/ladspa/gstmyutils.h | 46 ++ to ext/ladspa/gstladspautils.c | 847 +++++++++++++++++++++++++++++++++++++++++++ ext/ladspa/gstladspautils.h | 194 +++++++++ to spare the extra two files. Also I can't yet test it for my self. I get: (gst-plugin-scanner:25055): GStreamer-WARNING **: Failed to load plugin '/usr/lib/gstreamer-1.0/libgstladspa.so': /usr/lib/gstreamer-1.0/libgstladspa.so: undefined symbol: gst_ladspa_source_get_type gst_ladspa_source_get_type() is indeed not defined. Same for the filter and sink types. I wonder why you use a typemodule? In gstreamer we never unload plugins (and therefore types). Could you elaborate? The ladspamodule is he only component accessing the gst_ladspa_{source,filter,sink}_get_type() functions.
Created attachment 242875 [details] [review] _get_type problems and corrrect derivation First of all, the patch is very trivial despite the quantity of lines modified, like 3 batch substitutions for rename collision, real, like 9 line modifications. Anyway, still better to look at the result that at the patch. Hoping it works, btw. Weird, cause here this was not giving it, i indeed find it weird anyway that the _get_type was not needed, so reported my tests, some theory indicates that they should be provided, i don't know what kind of cache issue (even on reboot?) or thing is going on to work here in my 1.0.6 build tests. Anyway as soon as i tried to derive more theorethically correctly from the GstLADSPA* classes and not hook directly, your error was exactly happening. While trying to G_DEFINE_ABSTRACT, a name collision is happening, hence this _instance_ fix everywhere, also the clean of the interface exposed since is never needed, and allows now to G_DEFINE_ABSTRACT_TYPE with it's corresponding _get_type. Here is a picture of the new, i think better, graph: GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstBaseSrc +----GstLADSPASource +----ladspasrc-caps-so-click I've been said that if the class itself does not have an implementation, it could be an interface, i would have to research about that, but i would like to notice it for future (FIXME potential). I still does not control interfaces but having data et all is perhaps not good candidate for interface, and the current approach is then the better and good in my opinion. The move of gstmyutils to gstladspautils is not in my opinion really good, if you take a look at gstladspautils, *all* the functions take a GtsLADSPA or GtsLADSPAClass as parameter, this is so that a gstlv2utils would mimic this behaviour, the gstmyutils would remain intact. In fact, gstmyutils is a suggestion to gstreamer base api itself, as it is direclty interfacing with basesrc, audiofilter and basesink, and are so generic, perhaps makes sense to move them there. Anyway, this could move if it causes such a trouble (which doesn't to me). I use/require the type module because the classes *does allocate (and need currently to) some stuff*, that stuff needs to be deallocated, i noticed that class_finalize though correctly defined never was getting called, hence i moved to a typemodule. I fail to understand how when you say gstreamer never unload plugins memory would remain in good state in this case. Else we could go to the register_static old style, though i never faced a malloc's, without free's approach. Here you are the knowledgeable.
_get_type() function are normally needed if you instantiate GObjects through a know GType (e.g. g_object_new(GST_LADSPA_SOURCE, ...); ). This is not the case in GStreamer. All the plugins register elements into a name:gtype map. Later elements can be created from the GstElementFactory by name. In the ladspa case, we would need a new get_type() function for each element that we wrap. This does not scale. Thus in ladspa_describe_source_plugin() we create a new gtype and register it. This we can repeat for many <name,gtype> pairs. Regarding gstmyutils: It contains 3 functions. Please move them to gstladspa{source,filter,sink}.c as static helpers respectively. Regarding the module: It is okay for plugins to 'leak' a one-time allocation. This will be freed when the application exits. When the plugins are scanned for the first time, this is done from a separate process to not impose the memory overhead on the calling application (among other reasons). Please remove the use of the type module. You can add a comment to such allocations and tell that it is a one time allocation that is not freed. We do have this in other wrapper plugins too.
Created attachment 242919 [details] [review] myutils merge and register static Regarding gstmyutils: The 3 functions were moved to gstladspa{source,filter,sink}.c respectively, there they make some sense. Hence gstmyutils.{hc} are unneeded, the files are dropped. Regarding the module: then there is enough to g_type_register_static. Hence gstladspamodule.{hc} are unneeded, the files are dropped. To summarize, now there is only: * gstladspautils * gstladspafilter * gstladspasource * gstladspasink * gstladspa
Much better! I noticed that you name the src/sink ladspasrc and ladspasink. Can we just all name them ladpsa. The names itself are unique already and this will keep compatibility with the gst-0.10 names. Also could you squash the patches and add this as a new patch here.
I'm not a fan of such a go back, though. The list of elements is pretty huge, to find something could take time, that was made with two intentions, one differentiate the kind of element (in 0.10 i was crazy), and second be consistent with audiotestsrc,pulsesrc,... (ends in src), audioecho,audiodelay,... (filter, no special ending), and audiosink,pulsesink,... (ends in sink). This is perhaps one of the only moments to make such an uncompatible user change (as you correctly say) since gstreamer is moving from 0.10 to 1.0. Just my point is, i used it all the time in my tests, to find a src to test, or a sink, else i would have to read the whole list(?). I'll expect your thought opinion with what i said (to include or not), and squash the 1 patch either way. Thanks.
Review of attachment 242525 [details] [review]: Okay, lets keep the "src", "sink" names. ::: ext/ladspa/gstladspautils.c @@ +26,3 @@ + * + * FIXME: + * Assigning channel orders could be tricky since LADSPA seems to not LADSPA has no channel order. All we could do is to parse the port names for "(Left)/(Right)", "-L/-R" or ":l/:r" - these are the 3 patterns I see most of the time. @@ +28,3 @@ + * Assigning channel orders could be tricky since LADSPA seems to not + * specify order of channels in a really nice computer parseable way, + * stereo is probably wrong, more than stereo is crazy. By now, it justs typo: s/justs/just @@ +32,3 @@ + * channel-masks and/or channel positions correctly, if this is needed + * and expected, users will tell (this affects mainly interleaving). + * I think, you could mention, that right now, you just interleave all input port and output ports. This is the right thing in 90% of the cases, but will e.g. create a 4 channel out for a plugin that has 2 stereo 'pairs'. @@ +47,3 @@ +#define GST_CAT_DEFAULT ladspa_debug + +/* FYI: GStreamer-1.0 also supports not-interleaved audio, where you just memcpy each channel after each other: c1...c1c2....c2 and so on.
- gst_ladspa_source_instance_class_init leak comment, but I can't see the alloc? - ladspa_describe_source_plugin There is common code in all 3 base classes for the type name creating. This could be move to another util func (which also check for the already regsitered and ev. warns). - ladspa_sink - fakesink was maybe not the ideal base for picking the code from - drop the handoff and preroll-handoff signals, fakesink uses them for debugging, normal sink don't need them - drop the "state-error", "last-error", "signal-handoff", "silent", "dump" properties
Created attachment 243033 [details] [review] polishing * Notes: fixed from comments #9 (& #10). * Common code: register_plugin in all 3 base classes rebased. * Sink dropped signals handoff and preroll-handoff, cleaned of properties state-error, last-message, signal-handoff, silent & dump. * Leaks: might happen because most surely base_finalize does not get called as well. (GObject recommends external alloc/dealloc in base_). Single patch is coming.
Created attachment 243035 [details] [review] ladspa improved port to gstreamer 1.0 (single patch) Last current state of the patch, obsoleting/merging 5 previous ones, for convenience.
Created attachment 243063 [details] [review] ladspa improved port to gstreamer 1.0 (single, polished) Moves the leak comment to near base_init/_finalize, applying to class_init/_finalize too. This should make much clear what is going on with that. Resolves the collision of names with _type_ instead of the quick, not really well thought, _instance_, this is pure cosmetic, yet makes more sense and does not hurt the eyes. Type instance (?) type, let's leave instance for objects. Keeps the comments of gstladspautils.c more grammatically correct.
Review of attachment 243063 [details] [review]: I think this is the last review and then we can commit it. Thanks for all the work! Please check all the functions in gstladspautils. If you only call them from gstladspautils, please make those static and remove from the gstladspautils.h to keep them private. ::: ext/ladspa/Makefile.am @@ +3,3 @@ +libgstladspa_la_SOURCES = gstladspautils.c gstladspafilter.c gstladspasource.c gstladspasink.c gstladspa.c +libgstladspa_la_CFLAGS = -I$(top_srcdir)/gst-libs $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LRDF_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS) +libgstladspa_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) $(LRDF_LIBS) $(GST_LIBS) Please rewrap CFLAGS and LIBADD to avoid super long lines. ::: ext/ladspa/gstladspautils.c @@ +73,3 @@ + for (j = 0; j < samples; j++) + outdata[i * samples + j] = + ((LADSPA_Data *) indata)[j * ladspa->klass->count.audio.in + i]; I would move ladspa->klass->count.audio.in and ladspa->klass->count.audio.in into two local vars. This allows the compiler to know that they won't change during the nested loops. Also in the next function. @@ +125,3 @@ + +/* + * Do it. :) Maybe write "Process a block of audio with the ladspa plugin". @@ +142,3 @@ + LADSPA_Data *in, *out; + + //GST_DEBUG ("LADSPA transform for %i samples, %i->%i channels", samples, ladspa->klass->count.audio.in, ladspa->klass->count.audio.out); no // comments. Either uncomment or remove. You can use GST_LOG to lower the prio. @@ +337,3 @@ +} + +GParamSpec * If you only call this from here make it static and make sure there is no prototype in the .h file. @@ +553,3 @@ + longname = g_strdup ("no LADSPA description available"); + + //FIXME: no plugin author field different from element author field please use /* */ style comments @@ +836,3 @@ +} + +void static ?
Created attachment 243156 [details] [review] final touches Makes all that fixes, plus a very little author clean for the user.
Created attachment 243158 [details] [review] ladspa improved port to gstreamer 1.0 (single) Last state, :)
Awesome! Committing now. If you are interested in some followup work, in the buzzmachine wrapper (a plugin similiar to this one) I use the registry_cache to avoid rescanning all the plugin whe plugin_init is called: https://github.com/Buzztrax/gst-buzztrax/blob/master/src/bml/plugin.c#L563 The ideas is to store all the ladspa descriptors in a GstStructure and store that in the registry. When calling plugin_init: 1) you check for that cached structure and if it is not there, you scan the plugins and build the structure. 2) Then you register the elements from the structure.
Bug #678207 might also be of interest btw :)