the lamination of some noiz…
running it along Cheat Codes 2 and Dronecaster.
thank you so much for sharing!! I love seeing things I made put to cool uses
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!
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?
Ok, a restart got it running. That’s embarrassing but thanks and having great fun with it now.
glad you got it running
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!
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.
Ah - got it - thanks! I’ve not played with Mangrove so this is new to me. Thanks so much for the insights here =)
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.
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
The new update removes the bin
directory in favor of an ignore
directory. Are things not working?
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.
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
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.
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