573 / ziva

Live coding with SuperCollider patterns made easy (hopefully)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Živa

Live coding with SuperCollider patterns made easy (hopefully).

A set of tools and syntax sugar for easy live coding with synthdef and sample patterns in SuperCollider.

Živa was developed in a residency at Ljudmila (in Ljubljana, Slovenia) as part of the On-the-fly project.

Regular SuperCollider pattern and Ndef syntax can be used as parameters inside Živa functions.

WARNING: This software is still under heavy development and might considerably change in future versions.

Requirements

All OS

Windows

Windows users also need to install git: https://gitforwindows.org/

Installation from SuperCollider

Quarks.install("https://github.com/loopier/ziva");

if you have already installed it before, and simply want to update:

Quarks.update("ziva");

License

(C) 2022- Roger Pibernat

Živa is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses/.

Example

Ziva.boot;
~acid = Psynth(\acid);
~kick = Psample(\aekick);
~delia = Psample(\delia);

Ziva.track(0, \chorus, \reverbS);

(
[
	~acid.faster.deg([0,2,4,7].choosen(16).tumbao.pseq).scale(\harmonicMinor).randpan,
	~acid.fast.pizz.bj(7,12).deg([2,4]).oct(7).scale(\harmonicMinor) >> 0,
	~acid.fast.deg([0,4,7,0].montuno.pseq).oct(3),

	~delia.f.fast.n((..26).prand).chop(4,8).tape(0.4),

	~kick.f.bpm(115),
].ziva;
)

Quick Start

Server

boot the server

Ziva.boot;

optionally add custom samples – some are loaded by default

Ziva.loadSamples("path/to/your/samples/parent/directory"); // $HOME is prepended automatically

list available synths

Ziva.synths;

list avialable sounds (samples)

Ziva.sounds;

list available fx

Ziva.fx;

list available rhythms

Ziva.rhythms;

list available controls of a synth

Ziva.controls(\acid);

Setup and basics

create a synth player

~nala = Psynth(\acid);

create a sample player

~lola = Psample(\aekick);

create a band – placeholder for sound players

(
[
	~nala,
	~lola
].ziva;
)

stop everything

(
[
	// ~nala,
	// ~lola
	nil
].ziva;
)

or

Ziva.stop;

Playing

play an eighth-note arpeggio with the synth

(
[
	~nala.deg([0,2,4].pseq),
	~lola,
].ziva;
)

play same arpeggio in another scale

(
[
	~nala.deg([0,2,4].pseq).scale(\diminished),
	~lola,
].ziva;
)

play the synth faster than the kick drum

– other options are: slowest, slower, slow, fast, faster, fastest

(
[
	~nala.fast.deg([0,2,4].pseq),
	~lola,
].ziva;
)

play a rhythm with the kick drum

(
[
	// ~nala.fast.deg([0,2,4].pseq),
	~lola.faster.r([0].cascara.pseq), // *
	nil
].ziva;
)

add a preset rhtythm to the arpegiated synth

(see Ziva.rhythms for available rhythms)

(
[
	~nala.faster.deg([0,2,4].tumbao.pseq), // *
	~lola.faster.r([0].cascara.pseq),
	nil
].ziva;
)

euclidean rhythms

(
[
	~nala.faster.bj(5,8),
	~lola.faster.bj(3,8),
	nil
].ziva;
)

add a bass line with the same synth

(
[
	~nala.faster.deg([0,2,4].tumbao.pseq),
	~nala.faster.deg([0,4,7].montuno.pseq).oct(3), // *
	~lola.faster.r([0].cascara.pseq),
	nil
].ziva;
)

dynamics – play louder or softer

– options are: fff, ff, f, p, pp, ppp (from fortissimo to pianissimo)

.amp([0.0 .. 1.0]) for custom loudness – BE CAREFUL with values > 1.0

(
[
	~nala.fast.p.oct(6),
	~nala.ff.oct(3),
	~nala.faster.amp([0.1,0.3].pseq),
].ziva;
)

add a pizzicato chord comp

– other options are:

  • stass: staccatissimo
  • stacc: staccato
  • tenuto
  • legato (or leg)
  • pedal
  • legato(value)
(
[
	~nala.faster.pizz.deg([0,2,4]).r([0].clave.pseq).oct(6), // *
	~nala.faster.deg([0,2,4].tumbao.pseq),
	~nala.faster.deg([0,4,7].montuno.pseq).oct(3),
	~lola.faster.r([0].cascara),
	nil
].ziva;
)

pan things around with:

  • right or left
  • randpan
  • pan([-1.0 .. 1.0])
(
[
	~nala.faster.pizz.deg([0,2,4]).r([0].clave.pseq).oct(6).randpan, // *
	~nala.faster.deg([0,2,4].tumbao.pseq).right, // *
	~nala.faster.deg([0,4,7].montuno.pseq).oct(3).pan(-0.2), // *
	~lola.faster.r([0].cascara).pan(0.2),
	nil
].ziva;
)

create a melody of any length from a note list (will change every time you evaluate)

(
[
	~nala.faster.deg([0,2,4].choosen(8).tumbao.pseq),
	nil
].ziva;
)

create a melody with a different approach using legato and rests (r)

(
[
	~nala.fast.deg([0,2,4,r].choosen(8).pseq).legato([0.1,0.5,1].choosen(8).pseq),
	nil
].ziva;
)

create a melody with yet another approach using dur

(
[
	~nala.dur([1,1/2,1/4].choosen(4).pseq).deg([0,2,4,7].choosen(8).pseq),
	nil
].ziva;
)

play a longer sample

~del = Psample(\delia);
(
[
	~del,
	nil
].ziva;
)

play it for a longer time

(
[
	~del.slow,
	nil
].ziva;
)

choose a different sample

(
[
	~del.dur(6).n(4),
	nil
].ziva;
)

choose a random sample everytime

(
[
	~del.slow.n((..8).prand),
	nil
].ziva;
)

change the playing rate

(
[
	~del.slow.n(4).speed(0.5),
	nil
].ziva;
)

play the sample in a random sequence of speeds

  • first argument is the length of the sequence
  • second argument is the list of speeds to choose from
(
[
	~del.fast.n(4).randspeeds(4,[-1,1,-0.5,0.5,2,-2]),
	nil
].ziva;
)

old broken cassette tape effect

  • 0.0 no effect
  • the higher the crazier
(
[
	~del.slow.n(4).tape(0.5),
	nil
].ziva;
)

start playing halfway in the sample

(
[
	~del.slow.n(4).start(0.5),
	nil
].ziva;
)

chop the sample and rearange the slices

  • first argument is the number of slices used (randomly chosen from the chopped sample)
  • second argument is the number of slices the sampled is chopped in
(
[
	~del.fast.n(4).chop(4,8),
	nil
].ziva;
)

change the tempo

  • this changes the GLOBAL tempo. So changing it to any sound will affect all the others
(
[
	~del.fast.n(4).chop(8,8).bpm(120),
	~lola,
	nil
].ziva;
)

combine them all

comment lines to mute them, and uncomment them to unmute them

(
[
	~nala.faster.stacc.deg([0,2,4].choosen(8).tumbao.pseq).oct([4,5,6,7].choosen(8).pseq),
	~nala.fast.deg([0,7].choosen(8).montuno.pseq).oct(3),
	~lola.f.n((..4).choosen(4).pseq),
	~del.f.fast.legato([0.5,1,2].choosen(8).pseq).n((..7).choosen(8).pseq).chop(8).randspeeds(5,[-1,-2,1,2]),
	nil
].ziva;
)

Effects

Effects are set on tracks. Sounds can then be routed to those tracks using >>

Syntax: Ziva.track(nameOrNumber, effect1, effect2, ...);. Order matters!

To list available effects: Ziva.fx

Ziva.track(0, \delay, \reverb);

(
[
    ~nala >> 0,
    nil
].ziva;
)

About

Live coding with SuperCollider patterns made easy (hopefully)

License:GNU General Public License v2.0


Languages

Language:SuperCollider 100.0%