Skip to content

Multi-canonic Structures #8

@AFrancoB

Description

@AFrancoB

By using Ptpar class it is possible to create multiple canon structures embedded in Pdefs. It would be great if it wouldn´t look so horrible when live coding with it:

(
~config1 = (
	cp: 10,
	melody:
	~makeMelody.(
		(4..16).reciprocal.scramble,
		[60, 67, [68, 65], [63, 55], [62, 59, 53], [58, 70, 82], [36,48,60,72]].mirror.reverse
		),
	voices:
	~makeConvVoices.(
		Array.series(7,   50,  15)*0.5,             // tempos
		Array.series(7,  -30,  8.3).scramble        // transp
	)
);
~config2 = (
	baseTempo: 20,
	voices:
	~makeDivVoices.(
		Array.series(13, 0, 0.1)++[-20]             // transp
	),
	melody:
	~makeMelody.(
		(4..7).stutter(2).reciprocal.scramble,
		[60, 67.5, 68, 63, 62.3, 58.5, 60]
		),

	tempos:
	~makeDivTempos.(
		Array.series(14, 30, 13),                     // tempos
		[1, 2, 5, 7, 8, 10, 9, 3, 3, 5, 4, 3, 2, 3],  // percentages
		normalize: true
	)
);

~canon1= ~convCanon.(~config1);
~c1= ~canon1
.canon
.collect(~instrument.([\pianola], amp: 1, repeat: 1));

~c2= ~divCanon.(~config2)
.canon
.collect(~instrument.([\pianola], amp: 1, repeat: 1));

Pdef(\myCanonLoop, Ptpar(

	[0, Ppar(~c1, 1), ~canon1.canon[6].durs.sum*0.75, Ppar(~c2, 1)]

	, inf ));

);
Pdef(\myCanonLoop).play

The key issue here is how to design an API that could allow a better and clearer interface for the onset time of each canon. Even further, how to correlate each canon by creating a convergence between them like: 7thnote-1stvoice-1stcanon converging with 11thnote-2ndvoice-2ndcanon.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions