// A corpus of parts from Palestrina masses.

 

(

c = ();


c.p2 = [

14, 1, 14, 1, 14, 1, 16, 1,     

17, 1.5, 16, 0.5, 14, 0.5, 12, 0.5, 14, 2, 12, 0.5, 10, 0.5, 9, 1.5, 7, 0.5,     

9, 1, 10, 1, 9, 1, 14, 2,  13, 1, 14, 1, 10, 1,     

10, 1, 12, 1, 14, 1.5, 12, 0.5,     

10, 0.5, 9, 0.5, 10, 1, 7, 2].clump(2);


c.p3 = [    

14, 2, 14, 2,

14, 1, 16, 1, 17, 1.5, 16, 0.5,

14, 0.5, 12, 0.5, 14, 2, 12, 0.5, 10, 0.5,

9, 1.5, 7, 0.5, 9, 1, 10, 1.5,   9, 0.5, 7, 2, 6, 1,

7, 1, 10, 1, 10, 1, 12, 1,

14, 1.5, 12, 0.5, 10, 0.5, 9, 0.5, 10, 1,

7, 2, 14, 2].clump(2);


c.p4=[

14, 2, 14, 1, 16, 1,

17, 1.5, 16, 0.5, 14, 0.5, 12, 0.5, 14, 2,   12, 0.5, 10, 0.5, 9, 1.5, 7, 0.5,

9, 1, 10, 1.5, 9, 0.5, 7, 2,   6, 1, 

7, 4].clump(2);


c.p5=[

14, 2, 14, 3, 7, 1,

14, 0.5, 16, 0.5, 17, 0.5, 14, 0.5, 16, 1, 17, 1.5,   16, 0.5, 14, 0.5, 12, 0.5, 10, 1.5, 9, 0.5,

10, 0.5, 12, 0.5, 14, 2, 13, 1,

14, 1.5, 12, 0.5, 10, 1, 9, 1,

10, 2, 9, 2].clump(2);


c.p6=[

14, 2, 14, 3,   7, 1, 10, 1, 12, 2,   10, 1, 7, 1.5, 9, 0.5,

10, 1, 9, 1.5, 7, 0.5, 5, 0.5, 4, 0.5,

2, 1, 14, 2, 17, 1.5,   16, 0.5, 14, 2, 12, 1,

10, 1, 9, 1, 10, 1.5, 9, 0.25, 7, 0.25,

10, 1, 9, 2, 7, 1,

9, 2, 14, 2].clump(2);



c.p7=[

14, 3,   14, 2, 7, 1, 14, 1.5, 12, 0.5,

10, 1, 10, 1, 9, 1.5, 10, 0.5, 

12, 1, 14, 1, 12, 1, 17, 1.5,   16, 0.5, 14, 0.5, 12, 0.5, 14, 1, 12, 2,   10, 1.5, 9, 0.5, 7, 2,   5, 1, 10, 1.5, 12, 0.5,

14, 2, 14, 2].clump(2); 


c.p8=[

14, 3, 14, 2,   7, 1, 14, 1.5, 12, 0.5, 10, 1, 10, 1, 9, 1.5, 10, 0.5,

12, 1, 14, 1, 12, 1, 17, 1.5,   16, 0.5, 14, 0.5, 12, 0.5, 14, 1, 12, 2,   10, 1.5, 9, 0.5, 7, 2,   6, 1,

7, 4, 14, 2].clump(2);


c.p10=[

14, 1, 14, 1, 14, 1, 16, 1,

17, 1.5, 16, 0.5, 14, 1, 12, 0.5, 10, 0.5,

9, 1, 14, 2, 12, 1, 

14, 1, 14, 1, 10, 1.5, 9, 0.5, 

7, 2, 9, 4, 14, 2].clump(2);


c.p11=[

14, 3, 14, 1, 

14, 1, 16, 1, 17, 1.5, 16, 0.5,

14, 0.5, 12, 0.5, 14, 1.5, 12, 0.5, 10, 1,

9, 4].clump(2);


c.p16=[

14, 1, 14, 2, 13, 1,

14, 1, 9, 1, 12, 1, 10, 1, 

9, 0.5, 10, 0.5, 12, 0.5, 9, 0.5, 10, 0.5, 12, 0.5, 14, 0.5, 16, 0.5, 

17, 1, 16, 1, 14, 0.5, 16, 0.5, 17, 0.5, 12, 0.5,

16, 1, 14, 2, 13, 1, 14, 4].clump(2);


c.p17=[

14, 3, 14, 2,   12, 1, 17, 3,   16, 1, 12, 1, 14, 1, 16, 1, 17, 1.5, 16, 0.5, 14, 2,   12, 1, 14, 1, 10, 2,   10, 1, 10, 2, 

14, 2, 12, 2, 

10, 3, 12, 1,

10, 1, 10, 1, 9, 2].clump(2);



c.p19=[

14, 1, 14, 1.5, 14, 0.5, 7, 1,

14, 2, 12, 1, 10, 1,

9, 1.5, 7, 0.5, 9, 1, 10, 1.5,   9, 0.5, 9, 2, 7, 1,

9, 4].clump(2);


c.p26=[

14, 3, 14, 1.5,   12, 0.25, 11, 0.25, 13, 1, 14, 1, 9, 1,

10, 1, 10, 1, 9, 1.5, 7, 0.25, 9, 0.25,

10, 2, 9, 4, 14, 2].clump(2);


c.p27=[

14, 3, 14, 2,   13, 1, 14, 1, 9, 1,

12, 1, 10, 1, 9, 1, 16, 1, 17, 1.5, 16, 0.25, 14, 0.25, 16, 1, 14, 2,   13, 1, 14, 2,

12, 4,

10, 2, 9, 3,   7, 0.5, 5, 0.5, 7, 2,

9, 6, 14, 2].clump(2);


c.p31=[

14, 2, 12, 3,   10, 1, 15, 2,

14, 1.5, 12, 0.5, 10, 1, 12, 1,

9, 2, 12, 1.5, 10, 0.5,

9, 0.5, 7, 0.5, 10, 2, 9, 0.5, 7, 0.5,

5, 1, 17, 1.5, 16, 0.5, 14, 1.5,    12, 0.5, 12, 2, 10, 0.5, 9, 0.5,

10, 1, 9, 1.5, 7, 0.5, 7, 2,   6, 1, 7, 4, 14, 2].clump(2);



c.p33=[

14, 3, 14, 1.5,   14, 0.5, 16, 1, 17, 1.5, 16, 0.5,

14, 0.5, 12, 0.5, 14, 2, 12, 0.5, 10, 0.5,

9, 2, 9, 2,

14, 2, 12, 1.5, 10, 0.5,

9, 0.5, 7, 0.5, 9, 2, 7, 0.5, 5, 0.5,

4, 1, 4, 1, 2, 4, 14, 2].clump(2);  


c.p34=[

14, 1, 14, 1.5, 14, 0.5, 16, 1,

17, 1.5, 16, 0.5, 14, 0.5, 12, 0.5, 14, 1.5,   12, 0.5, 10, 1, 9, 2,

10, 1, 12, 1, 9, 2,

7, 2, 14, 2].clump(2);



c.p37=[

14, 1, 14, 2, 13, 1,

14, 1.5, 12, 0.5, 10, 1, 12, 1,

9, 2, 7, 1, 10, 2,   9, 1, 7, 2,

12, 2, 17, 3,   15, 1, 14, 1.5, 12, 0.5, 

10, 1, 9, 1, 10, 1, 9, 1.5,   7, 0.5, 7, 2, 6, 1,

7, 4].clump(2);


c.pAll=[c.p2 ,c.p3 ,c.p4 ,c.p5 ,c.p6 , c.p7, c.p8, c.p10, c.p11, c.p16, c.p17, c.p19, c.p26, c.p27, c.p31, c.p33, c.p34, c.p37]; 

)



Examples of use: 


// play all palestrina melodies in random order

(

Pdefn(\mel, Plazy({ Pseq(c.pAll.choose) }));


Pdef(\pale, Pbind(

\amp, 0.2,

\octave, 4, 

[\note, \dur], Pn(Pseq([ [\a, 0], Pdefn(\mel), [\o, 4]], inf)).trace, 

\tempo, 2

)).play;

);



// prepare and test a context snake with that corpus

(

c.snake = ContextSnake(c.pAll);

c.snake.asStream.all;

c.snake.dump;

)

// switch to the context snake - can you tell the diference?

Pdefn(\mel, Plazy({ "\nsnake.".postln; c.snake.randStarter }));


// switch back to orig.

Pdefn(\mel, Plazy({ "\norig.".postln; Pseq(c.pAll.choose) }));



( // choose randomly between orig and snake.

Pdefn(\snake, Plazy({ "\nsnake.".postln; c.snake.randStarter }));

Pdefn(\orig, Plazy({ "\norig.".postln; Pseq(c.pAll.choose) }));

Pdefn(\mel, Prand([Pdefn(\snake), Pdefn(\orig)]));

)