Skip to content

SuperCollider sound streams and operation sequences. Models for shaping algorithmic processes and sharing information are partially inspired by data transformation pipelines and signal flows.

bjarnig/OF

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OF

A small SuperCollider framework that consists of four main process categories:

  • Synthesis processes with dynamic waveform generation
  • Atomic sound transformations that adapt to incoming signals
  • Operation pipelines and algorithms to control and generate them
  • Direct access, observers and reactions for content-based triggers and actions
/* Install OF */

Quarks.install("https://github.com/bjarnig/OF")


/*
    Dynamic waveform generation and transformations.

*/

(

// Initialize OF
o = OF(this);

// Parameters for waveform duration size and minimum and maximum duration
a = o.waveform.opca(\op, 100); a.play;

// Runtime parameters for cycle duration and modulation
a.set(\sdm, rrand(0.1,0.5),\mod, rrand(1,10));

// Modulate a parameter
a.modulate(\sdm, { LFNoise1.kr(10, 0.1, 0.2) } );

// Append a transformation operation
a.transform( o.processing.foldorm() );

// Parameter movement for amplitude
a.control( o.control.brownian(\amp, 0.2, 0.01, 1.2 ));

// Another transformation
a.transform( o.processing.dualdist() );

// Interrump through an action
o.action.interrupt(\op);

)


/*

   Transformation sequences and pipelines

*/

( /* Stacking transformations */

o = OF(this); a = o.waveform.hectn(\pl);
a.stack([\clip, \minsaw, \bfold, \minsaw].scramble, o).play;

)

( /* Transformations and intervals */

o = OF(this); a = o.waveform.hectn(\ti);
a.stackd([\clip, \clip, \minsaw, \minsaw, \minsaw, \bfold], o, 3, 5).play;

)

( /* Parameters, processing and random order */

o = OF(this);
a = o.waveform.hectn(\encore);
a.stackprand([
	[\drift, (\drfreqh: 2, \drfreql:8)],
	[\wloss, (\wldrop: 25)],
	[\bfold, (\bffreq: 20, \bfstop: 100)]
], o, 20, 2);

a.transform(o.pr.diffuse).play

)


( /* Nested pipelines with parameters and duration */

o = OF(this);

a = o.waveform.costa(\co);

a.stackpd([
	[\bfold, 3, (\bffreq: 20, \bfstop: 100)],
	[\drift, 14, ()],
	[\wloss, 21, ()],
	[\nmod, 12, (\nfreq: 1000)]
], o);

b = o.waveform.hectn(\pl);
b.stack([\clip, \minsaw, \bfold, \minsaw].scramble, o);

c = o.waveform.dramp(\dramp);
c.stackd([\clip, \clip, \minsaw, \minsaw, \minsaw, \bfold], o, 3, 5);

// Submit the three pipelines to a switching algorithm
o.behaviour.switchx( OFPool[a,b,c] ).play

)



/*

  Direct access, observers and reactions for content-based triggers and actions.

*/

( /* Pipelines and Observers */

// Start OF
o = OF(this);

// Generate a waveform
a = o.waveform.foral(\fo); a.play;

// Couple an observer
o.observe.adapt(\fo);

// Apply disturbance
o.action.disturb(\fo);

// Attach a behaviour
o.behaviour.mfb(\fo).play

)



( /* 10 random pipelines with 4 processes and overlap behaviour */

o = OF(this); 
o.bh.overlap(10.collect{ c=o.wf.dramp( OF.key(nil,"x") ); c.stack(o.choosePr(4),o)})

)

About

SuperCollider sound streams and operation sequences. Models for shaping algorithmic processes and sharing information are partially inspired by data transformation pipelines and signal flows.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published