[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-users] mdaPiano and non realtime rendering (LADSPA)



Fredrik,

Thanks for following up on this. I’ll take a look next week. Appreciate the thought.

…edN


> On Dec 23, 2015, at 10:00 AM, Fredrik Olofsson <f@xxxxxxxxxxxxxxxxxxx> wrote:
> 
> (sorry for resurrecting such an old thread…)
> 
> but i was very wrong.  LADSPA (still) works great under osx with sc3.7.  the trick is to get hold of prebuilt 64bit plugins.  one way is to install the free program lmms.  it comes with ~100 plugs that you can load in sc.
> 
> below i spent some time trying out and making small examples for many of them.  quite good stuff in there actually.
> have fun,
> _f
> 
> //--notes:
> //* install sc3-plugins
> //* download and install https://lmms.io (by mouting the diskimage and dragging it to the Applications folder)
> //* where it says cutoff '0.0001 to 0.45' usually you will need 1/x
> //* none of the plugs with 'latency' seems to work (memory alloc error?)
> //* if a plug is crashing try changing the number of channels first (from 1 to 2)
> //* careful with volume - dont use headphones as plugs might explode in your ears
> 
> "LADSPA_PATH".setenv("/Applications/LMMS.app/Contents/lib/lmms/ladspa"); //for osx (edit for win and linux)
> LADSPA.listPlugins;  //should post a long list of plugins
> s.boot
> s.scope
> 
> /*
> # 1202 Decimator
>> k: Bit depth (1 to 24)
>> k: Sample rate (Hz) (0.001 to 1)
>> a: Input (-1 to 1)
> < a: Output (-1 to 1)
> */
> {LADSPA.ar(1, 1202, MouseX.kr(1, 24), MouseY.kr(0, SampleRate.ir/2), Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1402 Delayorama
>> k: Random seed (0 to 1000)
>> k: Input gain (dB) (-96 to 24)
>> k: Feedback (%) (0 to 100)
>> k: Number of taps (2 to 128)
>> k: First delay (s) (0 to 5)
>> k: Delay range (s) (0.0001 to 6)
>> k: Delay change (0.2 to 5)
>> k: Delay random (%) (0 to 100)
>> k: Amplitude change (0.2 to 5)
>> k: Amplitude random (%) (0 to 100)
>> k: Dry/wet mix (0 to 1)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1402, RandSeed.ir(1000), 0, MouseX.kr(0, 100), 30, MouseY.kr(0, 5), 0.3, 1, 50, 0.4, 50, 0.5, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1185 Diode Processor
>> k: Mode (0 for none, 1 for half wave, 2 for full wave) (0 to 3)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1186, MouseX.kr(0, 3).round, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1186 Audio Divider (Suboctave Generator)
>> k: Denominator (1 to 8)
>> a: Input
> < a: Output (-1 to 1)
> */
> {LADSPA.ar(1, 1186, MouseX.kr(1, 8).round, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1438 DJ flanger
>> k: LFO sync
>> k: LFO period (s) (0.1 to 32)
>> k: LFO depth (ms) (1 to 5)
>> k: Feedback (%) (-100 to 100)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1438, Impulse.kr(0.1), MouseX.kr(0.1, 32), MouseY.kr(1, 5), 0, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1403 Dyson compressor
>> k: Peak limit (dB) (-30 to 0)
>> k: Release time (s) (0 to 1)
>> k: Fast compression ratio (0 to 1)
>> k: Compression ratio (0 to 1)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1403, MouseX.kr(-30, 0), MouseY.kr(0, 1), 0.5, 0.5, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1192 Fractionally Addressed Delay Line
>> k: Delay (seconds) (0.1 to 10)
>> k: Feedback (dB) (-70 to 0)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1192, MouseX.kr(0.1, 10), MouseY.kr(-70, 0), Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1191 Flanger
>> k: Delay base (ms) (0.1 to 25)
>> k: Max slowdown (ms) (0 to 10)
>> k: LFO frequency (Hz) (0.05 to 100)
>> k: Feedback (-1 to 1)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1191, MouseX.kr(0.1, 25), MouseY.kr(0, 10), 3, 0.5, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1213 Foldover distortion
>> k: Drive (0 to 1)
>> k: Skew (0 to 1)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1213, MouseX.kr(0, 1), MouseY.kr(0, 1), Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1196 Fast overdrive
>> k: Drive level (1 to 3)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1196, MouseX.kr(1, 3), Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1216 GVerb
>> k: Roomsize (m) (1 to 300)
>> k: Reverb time (s) (0.1 to 30)
>> k: Damping (0 to 1)
>> k: Input bandwidth (0 to 1)
>> k: Dry signal level (dB) (-70 to 0)
>> k: Early reflection level (dB) (-70 to 0)
>> k: Tail level (dB) (-70 to 0)
>> a: Input
> < a: Left output
> < a: Right output
> */
> {LADSPA.ar(2, 1216, MouseX.kr(1, 300), MouseY.kr(0.1, 30), 0.5, 0.5, -30, -30, -30, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1413 Hard Limiter
>> k: dB limit (-50 to 0)
>> k: Wet level (0 to 1)
>> k: Residue level (0 to 1)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1413, MouseX.kr(-50, 0), 1, MouseY.kr(0, 1), SoundIn.ar)!2*0.5}.play
> 
> /*
> # 1890 Glame Highpass Filter
>> k: Cutoff Frequency (0.0001 to 0.45)
>> k: Stages(2 poles per stage) (1 to 10)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1890, 1/MouseX.kr(0.0001, 0.45, 1), MouseY.kr(1, 10), Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1885 Nonbandlimited single-sample impulses (Frequency: Control)
>> k: Frequency (Hz) (0 to ...)
> < a: Output
> */
> {LADSPA.ar(1, 1885, MouseX.kr(1, 1000, 1))!2*0.5}.play
> 
> /*
> # 1409 Karaoke
>> k: Vocal volume (dB) (-70 to 0)
>> a: Left in
>> a: Right in
> < a: Left out
> < a: Right out
> */
> {LADSPA.ar(2, 1409, MouseX.kr(-70, 0), *Limiter.ar(SoundIn.ar([0, 1])))}.play
> 
> /*
> # 1891 Glame Lowpass Filter
>> k: Cutoff Frequency (0.0001 to 0.45)
>> k: Stages(2 poles per stage) (1 to 10)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1891, 1/MouseX.kr(0.0001, 0.45, 1), MouseY.kr(1, 10), Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1201 Multivoice Chorus
>> k: Number of voices (1 to 8)
>> k: Delay base (ms) (10 to 40)
>> k: Voice separation (ms) (0 to 2)
>> k: Detune (%) (0 to 5)
>> k: LFO frequency (Hz) (2 to 30)
>> k: Output attenuation (dB) (-20 to 0)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1201, 6, 20, MouseX.kr(0, 2), MouseY.kr(0, 5), 10, 0, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1894 Mag's Notch Filter
>> k: Center Frequency (Hz) (0.0001 to 0.45)
>> k: Bandwidth (Hz) (0.0001 to 0.45)
>> k: Stages(2 poles per stage) (1 to 10)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1894, 1/MouseX.kr(0.0001, 0.45, 1), 1/MouseY.kr(0.0001, 0.45, 1), 5, Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1217 LFO Phaser
>> k: LFO rate (Hz) (0 to 100)
>> k: LFO depth (0 to 1)
>> k: Feedback (-1 to 1)
>> k: Spread (octaves) (0 to 2)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1217, MouseX.kr(0, 100), MouseY.kr(0, 1), 0.75, 1, Saw.ar(200)*LFPulse.ar(1))!2*0.5}.play
> 
> /*
> # 1219 Auto phaser
>> k: Attack time (s) (0 to 1)
>> k: Decay time (s) (0 to 1)
>> k: Modulation depth (0 to 1)
>> k: Feedback (-1 to 1)
>> k: Spread (octaves) (0 to 2)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1219, MouseX.kr(0, 1), MouseY.kr(0, 1), 1, 0.75, 1, Saw.ar(200)*LFPulse.ar(1))!2*0.5}.play
> 
> /*
> # 1423 Plate reverb
>> k: Reverb time (0.01 to 8.5)
>> k: Damping (0 to 1)
>> k: Dry/wet mix (0 to 1)
>> a: Input
> < a: Left output
> < a: Right output
> */
> {LADSPA.ar(2, 1423, MouseX.kr(0.01, 8.5), MouseY.kr(0, 1), 0.5, Limiter.ar(SoundIn.ar))}.play
> 
> /*
> # 1910 Pointer cast distortion
>> k: Effect cutoff freq (Hz) (0.0001 to 0.3)
>> k: Dry/wet mix (0 to 1)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1910, MouseX.kr(0.0001, 0.3), 0.5, Limiter.ar(SoundIn.ar))!2}.play
> 
> /*
> # 1417 Rate shifter
>> k: Rate (-4 to 4)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1417, MouseX.kr(-4, 4), Limiter.ar(SoundIn.ar))!2}.play
> 
> /*
> # 1208 Retro Flanger
>> k: Average stall (ms) (0 to 10)
>> k: Flange frequency (Hz) (0.5 to 8)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1208, MouseX.kr(0, 10), MouseY.kr(0.5, 8), Limiter.ar(SoundIn.ar))!2}.play
> 
> /*
> # 1605 Reverse Delay (5s max)
>> a: Input
> < a: Output
>> k: Delay Time (s) (0 to 5)
>> k: Dry Level (dB) (-70 to 0)
>> k: Wet Level (dB) (-70 to 0)
>> k: Feedback (0 to 1)
>> k: Crossfade samples (0 to 5000)
> */
> {LADSPA.ar(1, 1605, Limiter.ar(SoundIn.ar), MouseX.kr(0, 5), 0, 0, MouseY.kr(0, 1), 200)!2}.play
> 
> /*
> # 1408 Barry's Satan Maximiser
>> k: Decay time (samples) (2 to 30)
>> k: Knee point (dB) (-90 to 0)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1408, MouseX.kr(2, 30), MouseY.kr(-30, 0), Limiter.ar(SoundIn.ar))!2*0.5}.play
> 
> /*
> # 1198 Sinus wavewrapper
>> k: Wrap degree (0 to 10)
>> a: Input (-1 to 1)
> < a: Output (-1 to 1)
> */
> {LADSPA.ar(1, 1198, MouseX.kr(0, 10), Limiter.ar(SoundIn.ar))!2}.play
> 
> /*
> # 2146 TAP AutoPanner
>> k: Frequency [Hz] (0 to 20)
>> k: Depth [%] (0 to 100)
>> k: Gain [dB] (-70 to 20)
>> a: Input L
>> a: Input R
> < a: Output L
> < a: Output R
> */
> {LADSPA.ar(2, 2146, MouseX.kr(0, 20), MouseY.kr(0, 100), 0, *Limiter.ar(SoundIn.ar([0, 1])))}.play
> 
> /*
> # 2159 TAP Chorus/Flanger
>> k: Frequency [Hz] (0 to 5)
>> k: L/R Phase Shift [deg] (0 to 180)
>> k: Depth [%] (0 to 100)
>> k: Delay [ms] (0 to 100)
>> k: Contour [Hz] (20 to 20000)
>> k: Dry Level [dB] (-90 to 20)
>> k: Wet Level [dB] (-90 to 20)
>> a: Input_L
>> a: Input_R
> < a: Output_L
> < a: Output_R
> */
> {LADSPA.ar(2, 2159, MouseX.kr(0, 5), 90, MouseY.kr(0, 100), 50, 500, 0, 0, *Limiter.ar(SoundIn.ar([0, 1])))}.play
> 
> /*
> # 2156 TAP Fractal Doubler
>> k: Time Tracking (0 to 1)
>> k: Pitch Tracking (0 to 1)
>> k: Dry Level [dB] (-90 to 20)
>> k: Dry Left Position (0 to 1)
>> k: Dry Right Position (0 to 1)
>> k: Wet Level [dB] (-90 to 20)
>> k: Wet Left Position (0 to 1)
>> k: Wet Right Position (0 to 1)
>> a: Input_L
>> a: Input_R
> < a: Output_L
> < a: Output_R
> */
> {LADSPA.ar(2, 2156, MouseX.kr(0, 1), MouseY.kr(0, 1), 0, 0.75, 0.25, 0, 0.25, 0.75, *Limiter.ar(SoundIn.ar([0, 1])))}.play
> 
> /*
> # 2155 TAP Pink/Fractal Noise
>> k: Fractal Dimension (0 to 1)
>> k: Signal Level [dB] (-90 to 20)
>> k: Noise Level [dB] (-90 to 20)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 2155, MouseX.kr(0, 1), 0, MouseY.kr(-90, 20), Limiter.ar(SoundIn.ar(0)))!2}.play
> 
> /*
> # 2154 TAP Reflector
>> k: Fragment Length [ms] (20 to 1600)
>> k: Dry Level [dB] (-90 to 20)
>> k: Wet Level [dB] (-90 to 20)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 2154, MouseX.kr(20, 1600), 0, 0, Limiter.ar(SoundIn.ar(0)))!2}.play
> 
> /*
> # 2142 TAP Reverberator
>> k: Decay [ms] (0 to 10000)
>> k: Dry Level [dB] (-70 to 10)
>> k: Wet Level [dB] (-70 to 10)
>> k: Comb Filters
>> k: Allpass Filters
>> k: Bandpass Filter
>> k: Enhanced Stereo
>> k: Reverb Type (0 to 42.1)
>> a: Input Left
> < a: Output Left
>> a: Input Right
> < a: Output Right
> */
> {LADSPA.ar(2, 2142, MouseX.kr(0, 10000), 0, 0, 0.5, 0.5, 0.5, 0.5, MouseY.kr(0, 42.1, 0, 0), *Limiter.ar(SoundIn.ar([0, 1])))}.play
> 
> /*
> # 2157 TAP Sigmoid Booster
>> k: Pre Gain [dB] (-90 to 20)
>> k: Post Gain [dB] (-90 to 20)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 2157, MouseX.kr(-30, 6), MouseY.kr(-30, 6), SinOsc.ar)!2*0.5}.play
> 
> /*
> # 2144 TAP Tremolo
>> k: Frequency [Hz] (0 to 20)
>> k: Depth [%] (0 to 100)
>> k: Gain [dB] (-70 to 20)
>> a: Input_0
> < a: Output_0
> */
> {LADSPA.ar(1, 2144, MouseX.kr(0, 20), MouseY.kr(0, 100), 0, SinOsc.ar)!2*0.5}.play
> 
> /*
> # 2158 TAP TubeWarmth
>> k: Drive (0.1 to 10)
>> k: Tape--Tube Blend (-10 to 10)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 2158, MouseX.kr(0.1, 10), MouseY.kr(-10, 10), Limiter.ar(SoundIn.ar))!2}.play
> 
> /*
> # 1211 Tape Delay Simulation
>> k: Tape speed (inches/sec, 1=normal) (0 to 10)
>> k: Dry level (dB) (-90 to 0)
>> k: Tap 1 distance (inches) (0 to 4)
>> k: Tap 1 level (dB) (-90 to 0)
>> k: Tap 2 distance (inches) (0 to 4)
>> k: Tap 2 level (dB) (-90 to 0)
>> k: Tap 3 distance (inches) (0 to 4)
>> k: Tap 3 level (dB) (-90 to 0)
>> k: Tap 4 distance (inches) (0 to 4)
>> k: Tap 4 level (dB) (-90 to 0)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1211, MouseX.kr(0.5, 10), MouseY.kr(-90, 0), 1, -3, 2, -6, 3, -9, 4, -12, Limiter.ar(SoundIn.ar))!2}.play
> 
> /*
> # 1206 Transient mangler
>> k: Attack speed (-1 to 1)
>> k: Sustain time (-1 to 1)
>> a: Input (-1 to 1)
> < a: Output (-1 to 1)
> */
> {LADSPA.ar(1, 1206, MouseX.kr(-1, 1), MouseY.kr(-1, 1), LFPulse.ar(1)*SinOsc.ar)!2*0.5}.play
> 
> /*
> # 1209 Valve saturation
>> k: Distortion level (0 to 1)
>> k: Distortion character (0 to 1)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1209, MouseX.kr(0, 1), MouseY.kr(0, 1), Limiter.ar(SinOsc.ar))!2*0.5}.play
> 
> /*
> # 1405 Valve rectifier
>> k: Sag level (0 to 1)
>> k: Distortion (0 to 1)
>> a: Input
> < a: Output
> */
> {LADSPA.ar(1, 1405, MouseX.kr(0, 1), MouseY.kr(0, 1), Limiter.ar(SinOsc.ar))!2*0.5}.play
> 
> /*
> # 1337 Vocoder for LMMS
>> a: Formant-in
>> a: Carrier-in
> < a: Output-out
> < a: Output2-out
>> k: Number of bands (1 to 16)
>> k: Left/Right (-100 to 100)
>> k: Band 1 Level (0 to 1)
>> k: Band 2 Level (0 to 1)
>> k: Band 3 Level (0 to 1)
>> k: Band 4 Level (0 to 1)
>> k: Band 5 Level (0 to 1)
>> k: Band 6 Level (0 to 1)
>> k: Band 7 Level (0 to 1)
>> k: Band 8 Level (0 to 1)
>> k: Band 9 Level (0 to 1)
>> k: Band 10 Level (0 to 1)
>> k: Band 11 Level (0 to 1)
>> k: Band 12 Level (0 to 1)
>> k: Band 13 Level (0 to 1)
>> k: Band 14 Level (0 to 1)
>> k: Band 15 Level (0 to 1)
>> k: Band 16 Level (0 to 1)
> */
> {LADSPA.ar(2, 1337, Limiter.ar(SoundIn.ar), BLowPass4.ar(Saw.ar(MouseY.kr(50, 5000, 1)), 5000), 0, 0, 16, 0, *{1.0.linrand}!16)}.play
> 
> /*
> # 1905 VyNil (Vinyl Effect)
>> k: Year (1900 to 1990)
>> k: RPM (33 to 78)
>> k: Surface warping (0 to 1)
>> k: Crackle (0 to 1)
>> k: Wear (0 to 1)
>> a: Input L
>> a: Input R
> < a: Output L
> < a: Output R
> */
> {LADSPA.ar(2, 1905, 1920, 33, 0.5, MouseX.kr(0, 1), MouseY.kr(0, 1), *Limiter.ar(SoundIn.ar([0, 1])))}.play
> 
> /*
> # 1412 Wave Terrain Oscillator
>> a: x
>> a: y
> < a: z
> */
> {LADSPA.ar(1, 1412, SinOsc.ar(MouseX.kr(1, 1000, 1)), SinOsc.ar(MouseY.kr(1, 1000, 1)))!2}.play
> 
> 
> 
> 
>> 17 aug 2015 kl. 15:58 skrev Edward Nixon <ed.nixon@xxxxxxxxxxxx>:
>> 
>> OK. Thanks for the time saver.                  …edN
>> 
>> 
>>> On Aug 17, 2015, at 9:40 AM, Fredrik Olofsson <f@xxxxxxxxxxxxxxxxxxx> wrote:
>>> 
>>>> I’ve been curious about the LADSPA plugins as well. As I understand the README file in the Extensions directory, you copy in two files (from the distribution I assume); however those two files are already present in the Extensions hierarchy. The README also says that, e.g., on OS X, SC will search /Library/Audio/Plug-Ins/LADSPA for plugins.
>>>> 
>>>> What does it mean when SC, on server boot up, says it doesn’t find any LADSPA plugins when there are a raft of them in that folder? And the example code snippet fails?
>>>> 
>>>> …edN
>>> 
>>> i doubt you can use the LADSPA ugen with sc3.7 on osx these days.  besides the whole ladspa project seems dead.
>>> http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/LADSPA-amp-OS-X-SC-td7611340.html
>>> _f
> 
> 
>  #|
>     fredrikolofsson.com     musicalfieldsforever.com
>  |#
> 
> 
> _______________________________________________
> sc-users mailing list
> 
> info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
> archive: https://listarc.bham.ac.uk/marchives/sc-users/
> search: https://listarc.bham.ac.uk/lists/sc-users/search/
> 

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail