lamination

the lamination of some noiz…
running it along Cheat Codes 2 and Dronecaster.

3 Likes

thank you so much for sharing!! I love seeing things I made put to cool uses :slight_smile:

2 Likes

Version 0.3 Changelog

New engine! FormantPerc is a drop-in replacement for PolyPerc based on a new UGen, FormantTriPTR, which is a formant oscillator inspired by Mangrove. The script will automatically install the new UGen the first time it is run after the update; using the UGen will require a SYSTEM > RESTART (for a total of two restarts; sorry)

Experiment with FormantPerc’s params in the Params menu!

13 Likes

This looks amazing! Unfortunately I can’t get any sounds out. All levels are up. Am I doing something stupid?

Matron

new script

matron

supercollider

script clear

calling: clear the matrix for the next script

calling: toolkit post clean

script load: /home/we/dust/code/lamination/lamination.lua

including /home/we/dust/code/lamination/…/awake/lib/halfsecond.lua

including /home/we/dust/code/lamination/lib/formantperc_engine.lua

calling: my init hacks

calling: choukanzu_script_pre_init

calling: toolkit pre init

pre-init

calling: install matrix post-init hooks

script run

loading engine: FormantPerc

reading PMAP /home/we/dust/data/lamination/lamination.pmap

m.read: /home/we/dust/data/lamination/lamination.pmap not read, using defaults.

Engine.register_commands; count: 11

___ engine commands ___

am f

cutoff f

formant f

formant_amp f

gain f

hz f

mode f

pan f

release f

slope f

square_amp f

___ polls ___

amp_in_l

amp_in_r

amp_out_l

amp_out_r

cpu_avg

cpu_peak

pitch_in_l

pitch_in_r

script init

starting halfsecond

no matrix file; not loading matrix

pset >> read: /home/we/dust/data/lamination/lamination-01.pset

pset :: /home/we/dust/data/lamination/lamination-01.pset not read.

no matrix file; not loading matrix

pset >> read: /home/we/dust/data/lamination/lamination-01.pset

pset :: /home/we/dust/data/lamination/lamination-01.pset not read.

after the first run, Lamination now requires a restart of SuperCollider to make sound—this is an unfortunate side-effect of how it installs UGens. does the problem persist after you do a SYSTEM > RESTART?

Another thing to check is the outs params? it should be set to Audio by default but maybe somehow you’ve changed it?

1 Like

Ok, a restart got it running. That’s embarrassing but thanks and having great fun with it now.

2 Likes

glad you got it running :smiley:

3 Likes

lamination is a LOT of fun and sounds fab - thank you!!! I am just getting started here. I have a question about the formant oscillator: with some minor changes in the params, it gets very “squelchy” occasionally. Is that a part of how the FormantPerc engine works as you dial in or is it something else? Here’s an example of the “squelch” (resonance?) where it starts with squelch sound and I begin adjusting the slope to move away from the squelch sound. Thanks for any insight you can provide!

1 Like

I believe the squelch is a “feature” of the design—if you’ve played with Mangrove you’ll know that at certain settings the oscillator will exhibit somewhat chaotic behavior as it struggles to decide which division of the incoming frequency to oscillate at. I believe the same thing is what’s happening when you hear the squelching here. As you noticed, moving Slope or Formant will avoid them.

3 Likes

Ah - got it - thanks! I’ve not played with Mangrove so this is new to me. Thanks so much for the insights here =)

1 Like

Hi! I highly recommend updating the script. I significantly improved how Lamination manages FormantTriPTR, which will allow future scripts using this UGen to more easily coexist with Lamination.

1 Like

I’m missing the bin directory from where FormantTriPTR is copied from after installing. Or something.

Looking forward to trying out the new version =) I’ve just updated lamination via maiden and it’s hanging out on the loading... message. Here’s the supercollider output in maiden:

Summary
>>> /crone/ready
a CroneAudioContext
Execution warning: Class 'FormantTriPTR' not found
ERROR: Message 'ar' not understood.
RECEIVER:
   nil
ARGS:
Instance of OutputProxy {    (0x1716e30, gc=DC, fmt=00, flg=00, set=04)
  instance variables [11]
    synthDef : instance of SynthDef (0x74f097b0, size=16, set=4)
    inputs : nil
    rate : Symbol 'control'
    synthIndex : Integer 0
    specialIndex : Integer 0
    antecedents : nil
    descendants : nil
    widthFirstAntecedents : nil
    source : instance of Control (0x17178d0, size=10, set=4)
    outputIndex : Integer 1
    name : Symbol 'freq'
}
Instance of BinaryOpUGen {    (0x1711cf0, gc=DC, fmt=00, flg=00, set=04)
  instance variables [9]
    synthDef : instance of SynthDef (0x74f097b0, size=16, set=4)
    inputs : instance of Array (0x161bb50, size=2, set=3)
    rate : Symbol 'control'
    synthIndex : Integer 3
    specialIndex : Integer 0
    antecedents : nil
    descendants : nil
    widthFirstAntecedents : nil
    operator : Symbol '+'
}
Instance of OutputProxy {    (0x1716750, gc=DC, fmt=00, flg=00, set=04)
  instance variables [11]
    synthDef : instance of SynthDef (0x74f097b0, size=16, set=4)
    inputs : nil
    rate : Symbol 'control'
    synthIndex : Integer 0
    specialIndex : Integer 0
    antecedents : nil
    descendants : nil
    widthFirstAntecedents : nil
    source : instance of Control (0x17178d0, size=10, set=4)
    outputIndex : Integer 4
    name : Symbol 'slope'
}
PROTECTED CALL STACK:
	Meta_MethodError:new	0x8663a0
		arg this = DoesNotUnderstandError
		arg what = nil
		arg receiver = nil
	Meta_DoesNotUnderstandError:new	0x8677a0
		arg this = DoesNotUnderstandError
		arg receiver = nil
		arg selector = ar
		arg args = [ an OutputProxy, a BinaryOpUGen, an OutputProxy ]
	Object:doesNotUnderstand	0x41d2a0
		arg this = nil
		arg selector = ar
		arg args = nil
	a FunctionDef	0xf105a0
		sourceCode = "{
            arg out, freq = 440, formant = formant, mode = mode, slope = slope, formant_amp = formant_amp, square_amp = square_amp, gain = gain, am = am, cutoff = cutoff, pan = pan, release =release;
            var form = FormantTriPTR.ar(freq, formant + (0.5 * mode * freq), slope);
            var square = Pulse.ar(freq);
            var snd = 0.0;
            var filt = 0.0;
            var env = Env.perc(releaseTime: release).kr(2);
            form = SineShaper.ar(Clip.ar(MulAdd.new(s...etc..."
		arg out = an OutputProxy
		arg freq = an OutputProxy
		arg formant = an OutputProxy
		arg mode = an OutputProxy
		arg slope = an OutputProxy
		arg formant_amp = an OutputProxy
		arg square_amp = an OutputProxy
		arg gain = an OutputProxy
		arg am = an OutputProxy
		arg cutoff = an OutputProxy
		arg pan = an OutputProxy
		arg release = an OutputProxy
		var form = nil
		var square = nil
		var snd = 0.0
		var filt = 0.0
		var env = nil
	SynthDef:buildUgenGraph	0x1365c20
		arg this = a SynthDef
		arg func = a Function
		arg rates = nil
		arg prependArgs = [  ]
		var result = nil
		var saveControlNames = nil
	a FunctionDef	0x1364ce0
		sourceCode = "<an open Function>"
	Function:prTry	0x8f4520
		arg this = a Function
		var result = nil
		var thread = a Routine
		var next = nil
		var wasInProtectedFunc = false
	
CALL STACK:
	DoesNotUnderstandError:reportError
		arg this = <instance of DoesNotUnderstandError>
	Nil:handleError
		arg this = nil
		arg error = <instance of DoesNotUnderstandError>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of DoesNotUnderstandError>
	Thread:handleError
		arg this = <instance of Routine>
		arg error = <instance of DoesNotUnderstandError>
	Object:throw
		arg this = <instance of DoesNotUnderstandError>
	Function:protect
		arg this = <instance of Function>
		arg handler = <instance of Function>
		var result = <instance of DoesNotUnderstandError>
	SynthDef:build
		arg this = <instance of SynthDef>
		arg ugenGraphFunc = <instance of Function>
		arg rates = nil
		arg prependArgs = nil
	Engine_FormantPerc:alloc
		arg this = <instance of Engine_FormantPerc>
	< FunctionDef in Method CroneEngine:init >  (no arguments or variables)
	Routine:prStart
		arg this = <instance of Routine>
		arg inval = 399.629747518
^^ ERROR: Message 'ar' not understood.
RECEIVER: nil
engines: [ EmissionSpectrum, Oomph, Marimba, PolySub, FormantPerc, Bline_Synth, FM7, Snowflake, Krill, SimpleDelay, Sines, Moonraker, Grd, SimplePassThru, Timber_Gridstep, Dronecaster, SimpleDelayKolor, EasyGlut, Pedalboard, MollyThePoly, TheMachine, LorenzosDrums, PolyPerc, Sampswap, Orgn, Thebangs, Timber, Autumn, Odashodasho, MxSamples, Amen, Passersby, Timber_Takt, MarimbaMxSamples, mpcgrain, Acrostic, Impact, AcidTest, MxSynths, TestSine, ChaosOp, MxSamples2, Why, BandSaw, None, Splnkr, Thresher, HereThere ]
>>> /crone/ready
engines: [ EmissionSpectrum, Oomph, Marimba, PolySub, FormantPerc, Bline_Synth, FM7, Snowflake, Krill, SimpleDelay, Sines, Moonraker, Grd, SimplePassThru, Timber_Gridstep, Dronecaster, SimpleDelayKol

hmm. will you try giving your norns a System > Restart and then loading Lamination again? I thought I avoided this weird semi-working failure state, but I may not have

1 Like

The new update removes the bin directory in favor of an ignore directory. Are things not working?

2 Likes

I copied the engine manually over SSH from ignore into the ~/.local subdirectory, now everything is working fine. I think i might have had the target directory, but empty, so if-condition on line 72 was not reached and files not copied on lines 73 and 74.

@mmryspace 's error above looks like the one I had.

2 Likes

This didn’t resolve the loading... message

Here’s what things look like at the moment:

Hope this helps troubleshoot!

oh I see, this is my mistake; I had solved this chicken-egg problem and then not pushed the result. there are two solutions possible: one is to copy FormantTriPTR.sc from /ignore to the Extensions/FormantTriPTR folder manually, and the other is to update the script in Maiden and try again

1 Like

Ok, all set! Thank you! For some reason, the update from Maiden produced a jack fail message after restart from the Norns. I had to hard reset with the button on the bottom of the Norns. When I copied FormantTriPTR.sc from /ignore to the Extensions/FormantTriPTR folder manually, that did the trick.

1 Like

hmm, the jack fail is probably unrelated: I occasionally get that when I do SYSTEM > RESTART, particularly when I have a lot of peripherals plugged in. Glad to hear things are working :slight_smile:

2 Likes