# opmo

Janusz Podrazik

1,178

• #### Days Won

178

opmo had the most liked content!

• Rank

## Contact Methods

• Website URL
https://opusmodus.com
• Skype
opusmodus

• Gender
Male

## Recent Profile Visitors

3,634 profile views

1. ## Saving Plots and Piano Rolls to PDF Vectorial Graphics ETC

This will save a PNG file in the Opusmodus/Graphs folder: (setf length '(q e = s = = = -q e - = s = = -e.) pitch '(c4 cs5 d4 ds5 e4 f5 fs4 g5 gs4 a5 as4 b5)) (length-pitch-list-plot length pitch :file "length-pitch-plot.png") As for the piano roll you will need to create a screenshot with cmd/shift/4.
2. ## Pcs: how to retrieve inverted forms from this function ?

Congratulation to your book, looks very good. JP
3. ## Pcs: how to retrieve inverted forms from this function ?

of course: (pcs '3-11b) => (0 4 7) INTERVAL-CLASS: (interval-class '(0 1 2 11 10 9 5 4 3 6 7 8)) => (1 1 3 1 1 4 1 1 3 1 1) (interval-class '(0 1 3 8 4 9 10 7 6 5 11 2)) => (1 2 5 4 5 1 3 1 1 6 3) (interval-class '(0 11 5 7 6 1 3 4 2 9 8 10)) => (1 6 2 1 5 2 1 2 5 1 2)
4. ## Pcs: how to retrieve inverted forms from this function ?

The PCS-ANALYSIS function returns two more results: inverted-form and interval-class: (pcs-analysis '(4 1 8 10 3 7)) => Sequence: (4 1 8 10 3 7) Set: 6-z29 Prime Form: (0 2 3 6 7 9) Inverted Form: nil Pitch: (c4 d4 eb4 fs4 g4 a4) Normal Order: (1 3 4 7 8 10) Complement: (0 2 5 6 9 11) Inversion: (8 11 4 2 9 5) Vector: (2 2 4 2 3 2) Interval Class: (3 5 2 5 4) (pcs-analysis '(0 3 7)) => Sequence: (0 3 7) Set: 3-11 Prime Form: (0 3 7) Inverted Form: (0 4 7) Pitch: (c4 eb4 g4) Normal Order: (0 3 7) Complement: (1 2 4 5 6 8 9 10 11) Inversion: (0 9 5) Vector: (0 0 1 1 1 0) Interval Class: (3 4) (pcs-analysis '(0 4 7)) => Sequence: (0 4 7) Set: 3-11b Prime Form: (0 3 7) Inverted Form: (0 4 7) Pitch: (c4 e4 g4) Normal Order: (0 4 7) Complement: (1 2 3 5 6 8 9 10 11) Inversion: (0 8 5) Vector: (0 0 1 1 1 0) Interval Class: (4 3) The new function PCS-FORMS takes care of both forms: prime-form and inverted-form. The inverted form set ends with letter b: (pcs-forms '((0 4 7) (0 3 7)) :type :set) => (3-11b 3-11)
5. ## tutorial guide

Next - which will take some time - I will add all Opusmodus System Function with examples to our forum.
6. ## Pcs: how to retrieve inverted forms from this function ?

I will add the inverted form into to the system with the next update.
7. ## Pcs: how to retrieve inverted forms from this function ?

To do this I would need to rewrite the pitch class set functions. The functions where based on Allen Forte 'The Structure of Atonal Music' book.
8. ## Pcs: how to retrieve inverted forms from this function ?

(pcs-analysis '(0 3 7)) ? pcs-analysis Sequence: (0 3 7) Set: 3-11 Prime Form: (0 3 7) Pitch: (c4 eb4 g4) Normal Order: (0 3 7) Complement: (1 2 4 5 6 8 9 10 11) Inversion: (0 9 5) Vector: (0 0 1 1 1 0) (pcs-analysis '(0 4 7)) ? pcs-analysis Sequence: (0 4 7) Set: 3-11 Prime Form: (0 3 7) Pitch: (c4 eb4 g4) Normal Order: (0 4 7) Complement: (1 2 3 5 6 8 9 10 11) Inversion: (0 8 5) Vector: (0 0 1 1 1 0) Note: The pitch output form PCS-ANALYSIS is the pitch form prime form.
9. ## Midi In Collect

Ver 2. will be able to import musicXML files and convert to omn.
10. ## OMN Examples

Play and display snippets in Opusmodus Place the mouse cursor at the end of each expression and press ⌘1 for audition and notation, ⌘2 for audition or ⌘3 for notation. You can stop audition at anytime by pressing ⌘ESC keys. Contents G. Ph. Telemann, 12 Fantasie per clavicembalo TWV 33, n.1, 1732 D. Scarlatti, Sonata B-Dur, 1736 F. Chopin, Etudes, Op. 10, No. 5, 1833 J. S. Bach, Brandenburg Concerto No.4 in G major, BWV 1049, 1720 I. Strawinsky, Petruschka, 1911/21 L. Janáček, In the Mists, 1914 J. Podrazik, Piano Study No.3, 2013 J. S. Bach, Goldberg-Variationen, Variato 18 a 1 Clav., 1741 M. Reger, Aus meinem Tagebuch, I, 3, 1904/12 K. Stockhausen, Mantra für 2 Pianisten, 1970 B. Smetana, Aus meinem Leben, Streichquartett e-Moll, 1876 Opusmodus, Algorithmic, 2014 L. v. Beethoven, op. 59, No.1, Finale S. Prokofiev, Peter and the Wolf, op.67 A. Bruckner, Symphony no.9, d-minor J. Podrazik, Kritiken Nostalgia, 2004 J. S. Bach, BWV 639, Orgelbüchlein J. Cesaris, Bonté biauté, 1420 C. Debussy, Prélude à l’après-midi d’un faune, 1892-94 N. Paganini, Violinkonzert Es-Dur, op. 6, 1812-18 N. A. Rimski-Korsakow, Scheherazade, op. 35, 1888 W. A. Mozart, Variationen KV 265 A. Dvořák, Violinkonzert a-Moll, op 53, 1882 L. v. Beethoven, Sonate op. 2, Nr. 1, f-Moll, 1795 G. F. Kaufmann, 1733 R. Schumann, Davidsbündlertänze, op. 6, 1837 L. v. Beethoven, Sturm-Sonate, op 31 2, 1802 Opusmodus, 2014 J. S. Bach, Goldberg-Variationen, Variatio 7, 1741 Fr. Couperin, Pieces de Clavecin, 1713 C. F. Pollarolo, II Farmando, 1699 H. Berlioz, Symphonie fantastique, op14, 1830 J. S. Bach, Brandenburgische Konzerte, No. 2, 1721 G. F. Handel, Orgelkonzert Nr. 4, F-Dur, 1. Satz, 1738 J. Haydn, Die Schöpfung, 1798 J. S. Bach, Goldberg-Variationen, Aria, 1741 G. Meyerbeer, Les Huguenots, 1836 L. v. Beethoven, Streichquartett F-Dur, op. 135, 1826 Dialog-Lauda, anonym, 1577 E. Gould, Behind Bars, Woodwind and Brass, p. 259-260, 2011 E. Gould, Behind Bars, Woodwind and Brass, p.247, 2011 A. Webern Satz für Streichtrio, 1925 E. Gould, Behind Bars, p.405, 2011 E. Gould, Behind Bars, p.405, 2011 E. Gould, Behind Bars, p.407, 2011 A. Webern, Sechs Bagatellen für Streichquartett, op. 9, III, 1913 A. Webern, Streichtrio, op. 20, 1927 C. Debussy, La Mer, 1905 A. Schönberg, Streichtrio, 1947 A. Webern, Sechs Bagatellen für Streichquartett, 1913 E. Elgar, Symphony No.1, 1907 N. Morgan, Matins for solo flute J. Podrazik, String Quartet No.2, Part 1, 2011 J. S. Bach, Sechs Suiten Sonaten fuer Violoncello solo, Suite I, Preludium, 1722 G. Ph. Telemann, 12 Fantasie per clavicembalo TWV 33, n.1, 1732 '((s a4 d5 fs4 d5 g4 d5) (s a4 d5 fs4 d5 g4 d5) (s a4 d5 cs5 b4 a4 g4) (s fs4 d4 e4 c4 e d4)) D. Scarlatti, Sonata B-Dur, 1736 '((e e5 3e g5 bb4 g4 e a4) (3e a5 c4 a4 e bb4 3e g5 bb4 g4) (s a4 c6 c6 a5 a5 f5) (s f5 d5 d5 c5 d5 bb5)) F. Chopin, Etudes, Op. 10, No. 5, 1833 '((3e gb6 bb6 db6 gb6 eb6 gb6 db6 gb6 bb5 db6 gb5 bb5) (3e gb5 bb5 db5 gb5 eb5 gb5 db5 gb5 bb4 db5 gb4 bb4) (3e db4 db5 ab4 db5 ab4 ab5 ab4 ab5 eb5 ab5 eb5 eb6) (3e eb5 eb6 ab5 eb6 ab5 ab6 ab5 ab6 db6 ab6 db6 db7)) J. S. Bach, Brandenburg Concerto No.4 in G major, BWV 1049, 1720 '((e g5g3 g5g3 fs5fs3) (e e5e3 g5g3 e5e3) (e a4a2 a5a3 g5g3) (e fs5fs3 a5a3 fs5fs3) (e b4b2 b5b3 a5a3) (e g5g3 b5b3 g5g3) (e e5e3 e6e4 d6d4) (s cs6cs4 e6e4 e6e4 cs6cs4 cs6cs4 a5a3) (s a5a3 cs6cs4 cs6cs4 a5a3 a5a3 fs5fs3) (s fs5fs3 a5a3 a5a3 fs5fs3 fs5fs3 d5d3) (e d5d3 -q) (e a4a2 -q) (e d4d2 -q)) I. Strawinsky, Petruschka, 1911/21 '((s d5f5b5 f e5g5c6 e f5a5d6 s g5b5e6 f5a5d6 e5g5c6 d5f5b5) (e c5e5a5 c5e5a5 q d5f5b5 marc) (s d5f5b5 e5g5c6 f5a5d6 g5b5e6 e f5a5d6 s e5g5c6 d5f5b5) (e c5e5a5 c5e5a5 q d5f5b5 marc)) L. Janáček, In the Mists, 1914 '((t cs5 pp< bs4 < cs5 < dn5 mp> cs5 > bn4 > gs4 > es4 pp -s fermata) (t gs4 fss4 gs4 an4 gs4 fss4 en4 cs4 -s fermata)) J. Podrazik, Piano Study No.3, 2013 '((e b6as7d7cs7 ff a6as7 p b6c6b5b4as5 mp e5f4b4a3 ffff s. ds3cs3c4b3 ff t c4fs3as2b2 mp) (3e= ds1a0gs1as1 mf a1gs1d1cs2d2ds2 ffff tie 3s a1gs1d1cs2d2ds2 ffff 3e d4c4 mp s b4f5a4as4d4ds4 ffff e cs2g1) (3h d1c1b0as0 pp as0c1fs1f1e1 b2cs3c4cs4 mf 3q d4cs4ds5e4fs4 mp f7e6 c6b5fs5c5e5as4 mf)) J. S. Bach, Goldberg-Variationen, Variato 18 a 1 Clav., 1741 '((-h q g5 tie) (h. g5) (h. fs5) (e g5 fs5 h e5 tie) (q e5 e d5 cs5 q d5 tie) (q d5 -h)) M. Reger, Aus meinem Tagebuch, I, 3, 1904/12 '((q d4f4bb4d5 f< leg c4eb4a4c5 < leg bb3d4g4bb4 < leg e c4eb4a4c5 < leg d4f4ab4d5 ff> leg) (q f4ab4d5f5 > leg e4g4bb4e5 > leg h fs4a4d5 mf) (q c4ds4a4 p< leg bb3e4g4 < leg b3d4fs4 f leg e3g3cs4 > leg) (h d3fs3d4 pp)) K. Stockhausen, Mantra für 2 Pianisten, 1970 '(t a3 p stacc a3 stacc a3 stacc a3 tie e a3 q... b3 t f h. gs4 mp (acc e e4 p f4 e4 d4) w e4) B. Smetana, Aus meinem Leben, Streichquartett e-Moll, 1876 '((e b4 f) (w b4 sf leg) (q e4 marc+stacc+espr - - -e fs4 stacc) (w g4 sf leg) (q b3 stacc+marc - - -e ds4 stacc) (h e4 sf marc+leg q g3 stacc+marc -e a3 stacc) (h b3 sf leg q e3 stacc+marc -e fs3 stacc) ((leg q g3 marc e e3 -s fs3 ten))) Opusmodus, Algorithmic, 2014 '((s cs5 p g6 mp mf -) (s cs5 f e g3 ff s p) (s cs5 mp g6 mf f -) (-s cs5 ff e g3 p) (s g3 mp - e cs5 mf) (s g6 f ff e cs5 p) (s g3 mp mf e cs5 f) (s g6 ff p cs5 mp g3 mf) (e g3 f s cs5 ff g6 p) (e g6 mp -s cs5 mf) (e g3 f -s g3 ff) (s cs5 p e g6 mp s mf)) L. v. Beethoven, op. 59, No.1, Finale '(((leg q d3 e c3 s d3 e3)) ((stacc e f3 f3 g3 g3 p)) (q a3 leg e c4 s stacc bb3 stacc) ((leg q a3 < e. c4 mp s bb3 >)) ((leg q a3 p e g3 s a3 e3)) ((stacc e f3 d3 cs3 a2)) ((stacc e d3 f3 e3 a3))) S. Prokofiev, Peter and the Wolf, op.67 '(h g2bb2d3 mp marc (leg s d3g3bb3 eb3fs3a3 d3g3bb3 eb3fs3a3 e d3g3bb3) d3g3bb3 g3bb3d4 ten eb3a3cs4 ten g3bb3d4 ten g3bb3 ten (acc e c3) h f3c4 marc) A. Bruckner, Symphony no.9, d-minor '(h a5 mart h_q a4 mart q g5 marc f5 marc e5 marc h... eb5 mart s d4 marc w eb4 mart) J. Podrazik, Kritiken Nostalgia, 2004 '(((marc e e3 mp eb4 fs3 c3) s g3 stacc e fs2 < marc (stacc s g2 < 5q gs2 < d3 < cs4 < e4 < d3 <)) (e c3 < marc gb2 < marc (stacc 5q c3 < d3 < c3 < ab2 < g3 < d3 < cs4 < eb4 < a3 < bb2 < d3 < a2 < b2 < bb2 < c4 mf))) J. S. Bach, BWV 639, Orgelbüchlein '((s g5 a5 g5 a5 e. a5 tr2-x t g5 a5 q b5 comma e. s c6) (q d6 s c6 e b5 s a5 q g5 e a5 b5) (qs c6 t d6 e6 s c6 b5 q b5 comma)) J. Cesaris, Bonté biauté, 1420 '((q. ab4 bb4) (q. ab4 g4) (q. f4 e4) (q f4 e g4 q f4 e e4) (h. f4 fermata)) C. Debussy, Prélude à l’après-midi d’un faune, 1892-94 '((leg h cs5 tie s s b4 3e as4 a4 gs4 e. g4 s a4 b4 c5)) N. Paganini, Violinkonzert Es-Dur, op. 6, 1812-18 '((q e5 leg e fs5 leg gs5 q a5 ten cs6 ten) (h cs6 leg q b5 e d6 leg cs6 leg) (q a5 cs6 marc+leg gs5 cs6 leg) (h. fs5)) N. A. Rimski-Korsakow, Scheherazade, op. 35, 1888 '(((leg h e5 tie e e5 3e d5 e5 d5 c5 d5 c5) (leg b4 c5 b4 a4 c5 e5 g5 fs5 e5))) W. A. Mozart, Variationen KV 265 '(e. c5 leg s g4 e. e5 leg s c5 e g5 q g5 e g5 c5g5a5 fp q c5f5a5 e e c5f5g5 fp q c5e5g5 e) A. Dvořák, Violinkonzert a-Moll, op 53, 1882 '((-q (acc e a3e4) h c5e5 f (leg 3q a4c5 ten b4d5 ten c5e5 ten)) ((acc e e4) h. c5e5 q e5) ((leg q d5 e. c5 t d5 c5) q b4 leg a4) (q gs4 cresc leg h e4 (leg 3q d4 f4 a4)) (q gs4 leg h e4 (leg 6q d4 f4 a4 d5 f5 a5 ff))) L. v. Beethoven, Sonate op. 2, Nr. 1, f-Moll, 1795 '((q c4 p) (q f4 ab4 c5 f5) ((leg q. ab5 3e g5 f5 e5 q f5) -) (q g4 c5 e5 g5) ((leg q. bb5 3e ab5 g5 f5 q g5) -) ((acc e c5 leg) q. ab5 3e g5 f5 e5 q f5 -) ((acc e c5 leg) q. bb5 3e ab5 g5 f5 q g5 -) (h c5f5ab5c6 arp e bb5 ab5 g5 f5) ((app s e5 leg f5 leg g5 leg) q f5 leg e5 -q fermata -)) G. F. Kaufmann, 1733 '((h d4 leg (-app e e4) h e4 (-app s d4 e4)) (h f4 g4 leg (-app e a4)) (h f4 (-app s e4 f4) h e4) (w d4)) R. Schumann, Davidsbündlertänze, op. 6, 1837 '((q d4fs4 arp) (q cs4e4g4 arp c4eb4fs4a4 arp bb3d4g4bb4 arp) (h a3d4fs4c5 arp q bb3d4g4bb4 arp)) L. v. Beethoven, Sturm-Sonate, op 31 2, 1802 '((-h cs2e2a2cs3e3a3 tie+arp) (h. cs2e2a2 fermata q cs3a3 stacc) ((stacc q d3a3 e3a3 f3a3 cs3a3))) Opusmodus, 2014 '(q c4 kgliss b5 kgliss c4 kgliss e c5 kgliss q cs4 kgliss b5 kgliss c4 kgliss cs5 kgliss f4 kgliss c5) J. S. Bach, Goldberg-Variationen, Variatio 7, 1741 '((q a4 t b4 leg cs5 leg d5 leg e5 leg e. fs5 s d5 e a4) (q b4 t cs5 leg d5 leg e5 leg fs5 leg e. g5 s e5 e b4) ((app. e b4) e. cs5 s a4 e a5 e. d5 s e5 e cs5) ((app e cs5) q d5 tie h)) Fr. Couperin, Pieces de Clavecin, 1713 '((q g5 lmordent2 e fs5 mordent1+leg (-app s e5 leg fs5)) (q g5 e b4 (app e b4) q c5 lmordent1 e d5) (q b4 mordent1 e a4 c5 lmordent1+leg e b4 mordent1) (q e5 lmordent2 (app s e5 leg fs5 leg) e g5 e. c5 mordent1 s d5 e b4 mordent1)) C. F. Pollarolo, II Farmando, 1699 '((-q e d5 a4 q d4 e d5 a4) (e fs4 d4 a4 d5 q cs5 fs5 trem-s) (q g4 trem-s e5 trem-s fs4 trem-s d5 trem-s) (q e4 trem-s cs5 trem-s e d4 s e4 fs4 g4 a4 b4 cs5) (e d5 g4 a4 a3) (q d4)) H. Berlioz, Symphonie fantastique, op14, 1830 '((q g4 (acc e b4) c5 q g4 (acc e ds5) e5) ((acc e ds5) q e5 (acc e e5) f5 q f5 tr2 e e5) (q e5 tr1 e d5 q d5 tr2 e c5)) J. S. Bach, Brandenburgische Konzerte, No. 2, 1721 '((e c5 g5 g5 tr2 s f5 g5) (e a5 s g5 f5 e g5 c6) (e g5 tr2 s e5 f5 e g5 tr2 s f5 g5)) G. F. Handel, Orgelkonzert Nr. 4, F-Dur, 1. Satz, 1738 '((q g5 lmordent2 lmordent2 q. tr2 e c6) (q. g5 tr2 e c6 q. g5 tr2 e c6) (s g5 fs5 g5 bb5)) J. Haydn, Die Schöpfung, 1798 '((e ab4 eb4 g4 ab4 eb4 g4 turn12+leg) (e ab4 eb4 b4 c5 ab4 e4)) J. S. Bach, Goldberg-Variationen, Aria, 1741 '((q d5 q d5 leg e. e5 lmordent2-t s f5) (e e5 (app s d5) e c5 (app. s b4) q. a4 e fs5 turn12) (t g5 leg s. fs5 t a5 leg s. g5 t fs5 leg s. e5 t d5 leg s. c5 (app. e c5) e. a5 s c5) (t b4 leg s. g4 e fs4 (app e fs4) h g4 lmordent1-t)) G. Meyerbeer, Les Huguenots, 1836 '((h bb3gb3 mp ttrem db4 q cb4ab3gb3 ttrem db3) (h bb3gb3 ttrem db4 q cb4ab3gb3 ttrem db3)) L. v. Beethoven, Streichquartett F-Dur, op. 135, 1826 '((q. g2g3 p e e2e3 < h ab2ab3 < c5 mp tie+cue) ((cue e c5 bb4 ab4 g4 f4 a4 c5 e5 q f5 comma) a4 f)) Dialog-Lauda, anonym, 1577 '((repeat (-q q. g4bb4d5 e g4bb4d5 q c4c5eb5) (q f4a4c5 g4bb4 h f4a4c5) (h bb3bb4 g3g4bb4) (h d4f4a4 q g4bb4 f4a4c5 tie) (q f4a4c5 g4bb4 h d4fs4a4) (end1 (h g4)) (end2 (h g4)))) E. Gould, Behind Bars, Woodwind and Brass, p. 259-260, 2011 '(s cs4 key-slap d5 -e s ab4 ten+key-slap f5 stacc) E. Gould, Behind Bars, Woodwind and Brass, p.247, 2011 '((h f4 trem+frull+tie e f4 trem-s a4) (-q h e4 trem+frull+tie) (e e4 ord d4 leg q a4)) A. Webern Satz für Streichtrio, 1925 '(-t. x d6 pp> stacc+arco 3s f4 > leg e5 > leg fs6 ppp -t. x cs4 p t. eb5 > leg x e4 ppp) E. Gould, Behind Bars, p.405, 2011 '(((stacc e a4 spicc+ubow s c5 dbow+leg b4 e a4 ubow s g4 dbow+leg f4 e e4 ubow))) E. Gould, Behind Bars, p.405, 2011 '((dbow e d5 = = = = = = =)) E. Gould, Behind Bars, p.407, 2011 '(((stacc s b3 legno-batt = e e d4 =)) (-h d5 arco-ord+leg) (h d4 -) (h_e c4 legno-tratto -e q f4 tie) (h f4 q d4 marc+pizz -)) A. Webern, Sechs Bagatellen für Streichquartett, op. 9, III, 1913 '((-3e c4 pp< pizz+stacc stacc -e - 5e f5 mf< arco a5 e6 fs6 bb6) (-e q. g5 < trem+harm) (q g5 trem+harm -s f4e5 ff stacc+pizz -e)) A. Webern, Streichtrio, op. 20, 1927 '((e bb4 p> leg s fs5 stacc fs5 stacc+pizz - (acc b3 arco+harm+leg) c4 pp c4 stacc+pizz - a5 p> arco+leg d6 stacc (acc cs5 leg) gs4 stacc -) (s cs5 pp stacc+pizz (acc a5 leg+arco) gs4 stacc -e -s gs4 p> stacc+ten (acc a5 leg) d6 stacc eb4 pp ten+pizz)) C. Debussy, La Mer, 1905 '(((leg q. f4 ff vib+sul4 e e4 sul4 q. ds4 sul4 e e4 sul4)) ((leg q. f4 mf sul4 e e4 sul4 3h ds4 < ten+sul4 fs4 < ten+sul4 gs4 < ten+sul4)) (q. f4 f leg+sul4 e e4 leg+sul4 q. ds4 leg+sul4 e e4 leg+sul4) (q. f4 > leg+sul4 e e4 > leg+sul4 3h eb4 > leg+stacc+sul4 d4 > leg+stacc+sul4 cs4 p leg+stacc+sul4)) A. Schönberg, Streichtrio, 1947 '((h db5bb5 ppp trem e db5bb5 - -q) (-h a3 pp ponte+tie) (h a3 fermata -h fermata)) A. Webern, Sechs Bagatellen für Streichquartett, 1913 '((-e -s (leg eb5 pp< ponte+con-sord 3e a6 < eb5 < a6 < leg)) ((leg 3e eb5 mp> a6 > eb5 >) -e -e) (-e -3e - (leg+stacc e4 ppp< < < p))) E. Elgar, Symphony No.1, 1907 '(((leg h b2 pp< 3h as2 > marc b2 > c3 > tie)) (3h c3 (leg cs3 mp e3 tie e3 > d3 c3 pp)) ((leg 3h b2 < marc as2 b2 c3 marc b2 c3 mp))) N. Morgan, Matins for solo flute '((-s db4 mp e. b4 tie) (s b4 db4 b4 e. g4 tie) (s g4 db4 b4 g4 gs5 b4 g4) (s gs5 b4 db4 e. g4 tie) (s g4 comma b4 db4) (s c6 eb4 e. a4)) J. Podrazik, String Quartet No.2, Part 1, 2011 '((e. a3 p<mf s a3 p<mf tie s a3 e. a3 p<mf s a3 mp stacc e a3 s a3 marc s p ord+stacc stacc e non-vib) (h. a3 pfp s b3 p ord+stacc s c4 stacc s stacc s marc+trem+tasto)) J. S. Bach, Sechs Suiten Sonaten fuer Violoncello solo, Suite I, Preludium, 1722 '(((leg s g2 mf e3 b3 a3 b3 g3 fs3 g3) (leg e3 g3 dig2 fs3 g3 b2 > dig1 d3 > cs3 > b2 >)) ((leg s cs3 p dig3 g3 dig2 a3 sul g3 dig2 a3 g3 a3 g3) (leg cs3 g3 a3 g3 a3 g3 a3 g3)) ((leg s fs3 p< dig1 a3 < sul d4 < cs4 d4 mf a3 dig4 g3 a3 fs3) (leg a3 g3 a3 d3 > sul fs3 > dig3 e3 > d3 >)) ((leg s e2 p dig1 b2 g3 fs3 g3 b2 g3 b2) (leg e2 b2 g3 fs3 g3 b2 g3 b2)))
11. ## Lesson 30. Clusters, Repeats and Ornaments

Contents Annotation Score Notation Annotation Clusters have become a feature of piano writing since the experiments of Henry Cowell in the early 20th century. Written ornaments and repeat signs appeared much earlier, around the 16th century. This piece brings these additions together. This composition introduces manually written OMN ornaments and articulations into an existing part. It also processes the resultant OMN list produced initially from MAKE-OMN with GEN-PAUSE and GET-TIME-SIGNATURE. It shows how, with GEN-PAUSE, a keyboard texture can be split between the hands. The first focus is on using the function GEN-CLUSTER. This a formidable function with many parameters and keywords: (setf clusters-mix (gen-cluster cluster-size :type '? :rotate '(0 2 -1 3 0 -2 2 -2 2 -1) :transpose (rnd-sample 10 integers :seed 72))) The variable cluster-size is a list of cluster lengths: (setf cluster-size '(2 4 3 5 2 4 3 1 3 4)) These cluster-size values can be processed as chords or separate pitches (melodies) or as a random selection of both.The keyword :type may have the value 'c, 'm or '?. So in clusters-mix we have a random selection ('?). The keyword :rotate is a musical rather than mathematical rotation, thus moving rotated pitches into higher or lower octaves. Notice how chords and single pitches in a list are rotated with minus values. Then, there’s the keyword :transpose: . . . :transpose (rnd-sample 10 transp-values :seed 72) The variable transp-values gives a list of the transposition values associated with the Slonimsky pattern we’ve used in almost all the tutorials: => (0 1 6 7 12) The result here is that 10 RND-SAMPLE values from transp-values move the clusters into different transpositions. => ((c5cs5) (gs4 a4 fs5 g5) (d3c4cs4) (a4 as4 fs5 g5 gs5) (c5 cs5) . . .) When examining this output, keep in mind the effect of rotation on the pitch order. Before we move to the next cluster expression Audition the variable cl-1. You’ll hear that the piano texture moves obliquely from treble to bass and back: it needs to be played using both hands. Using GEN-PAUSE we can achieve this . . . but there are ornaments and articulations to add first. The second cluster expression is almost identical to the first, but the output is melodic and the random :seed that dealt with the :transpose keyword is different. Now to the rhythm. This calls for a straightforward span of pitch lists to a note-length value: (setf rhy (span clusters-mix '(e))) => ((1/8) (1/8 1/8 1/8 1/8) (1/8) (1/8 1/8 1/8 1/8 1/8) (1/8 1/8) (1/8) . . .) However, the sensible composer wants a longer duration on those lists that contain a single note-length, partly because the pitches that occupy these lists are in the bass register and need more sounding space. So those values are augmented by using the :section keyword to manually specify the lists to be replaced with longer length values: (setf rhy-aug (position-replace '(0) '(1/4) rhy :section '(0 2 5 7))) => ((1/4) (1/8 1/8 1/8 1/8) (1/4) (1/8 1/8 1/8 1/8 1/8) . . .) We can use the same technique to replace dynamics when single list values occur: (setf dyn-ff (position-replace '(0) '(ff) dyn :section '(0 2 5 7))) We could end the basic composing here, but there’s an opportunity, once we’ve created an OMN list for each cluster expression, to add musical detail and articulations. Here’s the basic output: (setf cl-1 (make-omn :length rhy-aug :pitch clusters-mix :velocity dyn-ff)) => ((q c5cs5 ff) (e gs4 mp a4 fs5 g5) (q d3c4cs4 ff) (e a4 mp as4 fs5 g5 gs5) . . .) And here is a new OMN sequence of sublists complete with added repeats, arpeggiation of chords, legato and a glissando: (setf cl-1a '((q c5cs5 ff =) (e gs4 mp leg a4 leg fs5 leg g5) (q d3c4cs4 ff =) (e a4 mp leg as4 leg fs5 leg g5 leg gs5) (e c5 mp leg cs5) (q d3ds3c4cs4 fff arp) (e ds4 mp leg cs5 leg d5) (q c2 key-gliss c4 ff) (e ds4 mp leg cs5 leg d5) (e ds4 mp leg c5 p leg cs5 pp leg d5 ppp :repeat 2))) A new variable cl-1a has been created and the edits and additions written by hand. These include repeats like :repeat 2, arpeggiation arp, and glissandi key-gliss. In the other cluster expression there are trills tr1, acciaccaturas (acc c5), appoggiaturas (app b5) and staccato stacc: (setf cl-2a '((e c5 p cs5 tr1) (e d5 p (acc c5) ds5 c6 cs6) (e a3 p g4 gs4 tr1) (e as4 p b4 g5 gs5 a5) (e fs4 p g4) (e d3 p ds3 c4 cs4) (e d5 p (app b5) c6 cs6) (e c3 fff) (e gs4 p stacc fs5 stacc g5 stacc) (e ds3 p stacc c4 stacc cs4 stacc d4 stacc))) Now, to bring this material together and in a different way from previous tutorials, as all the lists we are using are OMN lists: (setf rh-1 (gen-pause cl-1a :section '(0 2 5 7))) (setf lh-1 (gen-pause cl-1a :section (find-complement '(0 2 5 7) :high 9))) These expressions using GEN-PAUSE with the addition of FIND-COMPLEMENT split the keyboard texture between right and left hands. Finally, notice how the function GET-TIME-SIGNATURES flawlessly interprets the OMN lists to produce the time-signature: (setf timesigs (get-time-signature rh-1)) => ((2 4 1) (2 4 1) (2 4 1) (5 8 1) (1 4 1) . . .) Coda: Using and extending OMN script is a great way to add the sort of detail that is often left out of a parametric score-script. Composers often feel it’s easier to add such detail when working on the final notated piece on a score-writer. With Opusmodus, and with a little practice, adding performance detail can be achieved successfully, and the MIDI realisation of ornaments, for example, is excellent. Sometimes it is also very useful and necessary to examine the elements of an OMN list separately, which can easily be done with the function DISESSEMBLE-OMN: (disassemble-omn cl-2a) => (:length ((1/8 1/8) (1/8 0 1/8 1/8 1/8) (1/8 1/8 1/8) (1/8 1/8 1/8 1/8 1/8) (1/8 1/8) (1/8 1/8 1/8 1/8) (1/8 0 1/8 1/8) (1/8) (1/8 1/8 1/8) (1/8 1/8 1/8 1/8)) :pitch ((c5 cs5) (d5 c5 ds5 c6 cs6) (a3 g4 gs4) (as4 b4 g5 gs5 a5) (fs4 g3) (d3 ds3 c4 cs4) (d5 b5 c6 cs6) (c3) (gs4 fs5 g5) (ds3 c4 cs4 d4)) :velocity ((p p) (p p p p p) (p p p) (p p p p p) (p p) (p p p p) (p p p p) (fff) (p p p) (p p p p)) :articulation ((- tr1) (- acc - - -) (- - tr1) (- - - - -) (- -) (- - - -) (- app - -) (-) (stacc stacc stacc) (stacc stacc stacc stacc))) Finally, note how the function RESPELL has been added to the left hand part of the piano within the final DEF-SCORE expression. (piano-lh :omn (respell lh-2 :type :chord)) ) Score (setf pitches '(c4 cs4 fs4 g4 c5)) (setf transp-values (pitch-to-integer pitches)) (setf cluster-size '(2 4 3 5 2 4 3 1 3 4)) (setf clusters-mix (gen-cluster cluster-size :type '? :rotate '(0 2 -1 3 0 -2 2 -2 2 -1) :transpose (rnd-sample 10 transp-values :seed 72))) (setf clusters-mel (gen-cluster cluster-size :type 'm :rotate '(0 2 -1 3 0 -2 2 -2 2 -1) :transpose (rnd-sample 10 transp-values :seed 51))) (setf rhy (span clusters-mix '(e))) (setf rhy-2 (span clusters-mel '(e))) (setf rhy-aug (position-replace '(0) '(1/4) rhy :section '(0 2 5 7))) (setf dyn (span rhy '(mp))) (setf dyn-ff (position-replace '(0) '(ff) dyn :section '(0 2 5 7))) (setf cl-1 (make-omn :length rhy-aug :pitch clusters-mix :velocity dyn-ff)) (setf cl-2 (make-omn :length rhy-2 :pitch clusters-mel :velocity '(p))) ;; Edited output from cl-1 (setf cl-1a '((q c5cs5 ff =) (e gs4 mp leg a4 leg fs5 leg g5) (q d3c4cs4 ff =) (e a4 mp leg as4 leg fs5 leg g5 leg gs5) (e c5 mp leg cs5) (q d3ds3c4cs4 fff arp) (e ds4 mp leg cs5 leg d5) (q c2 kgliss c4 ff) (e ds4 mp leg cs5 leg d5) (e ds4 mp leg c5 p leg cs5 pp leg d5 ppp :repeat 2))) ;; Edited output from cl-2 (setf cl-2a '((e c5 p cs5 tr1) (e d5 p (acc c5) ds5 c6 cs6) (e a3 p g4 gs4 tr1) (e as4 p b4 g5 gs5 a5) (e fs4 p g4) (e d3 p ds3 c4 cs4) (e d5 p (app s b5) e c6 cs6) (e c3 fff) (e gs4 p stacc fs5 stacc g5 stacc) (e ds3 p stacc c4 stacc cs4 stacc d4 stacc))) #| Examine the elements of an OMN list separately (disassemble-omn cl-2a) |# (setf rh-1 (gen-pause cl-1a :section '(0 2 5 7))) (setf lh-1 (gen-pause cl-1a :section (find-complement '(0 2 5 7) :high 9))) (setf rh-2 (assemble-seq rh-1 cl-2a rh-1)) (setf lh-2 (assemble-seq lh-1 (pitch-transpose -12 cl-2a) lh-1)) (setf timesigs (get-time-signature rh-2 :group '((5)))) (def-score lesson-30 (:key-signature 'chromatic :time-signature timesigs :tempo 120 :layout (piano-layout 'piano-rh 'piano-lh)) (piano-rh :omn rh-2 :channel 1 :sound 'gm :program 'acoustic-grand-piano) (piano-lh :omn (respell lh-2 :type :chord)) ) Notation Go back to Reference page.
12. ## Lesson 29. Tempo Changes and Percussion

Contents Annotation Score Notation Annotation This is an earlier piece Lesson 7 transformed by the addition of tempo changes and a percussion part for Latin percussion. There are two ways to add tempo changes to a score-file. Both are explained here and in detail in the DEF-SCORE documentation. The first way produces very straightforward changes that are triggered at the start of a particular bar/list. The second is more complex but does allow for ritardando and accelerando and produces a very finely graduated tempo change over any number of bars/lists using the concept of ‘delta time’. The piece is in an A B A structure and lasts for 15 bars of 5/8. Here's the first approach to tempo change: (setf tempo-list-1 '(60 70 80 90 100 110 120 60 120 110 100 90 80 70 60)) (setf tempo-1 (make-tempo tempo-list-1 bars)) => ((60 :length 5/8) (70 5/8) (80 5/8) (90 5/8) (100 5/8) (110 5/8) (120 5/8) (60 5/8) (120 5/8) (110 5/8) (100 5/8) (90 5/8) (80 5/8) (70 5/8) (60 5/8)) Each bar in this approach requires a tempo-change value even if many bars might require the same value. The variable tempo-1 is then placed inside the DEF-SCORE expression: (def-score lesson-29 (:key-signature '(c maj) :time-signature ts-list :tempo tempo-1) The second approach is more sophisticated and its results more subtle. The downside is the tempo-change list is a little more complex. (setf tempo-2 '(("Mixed Tempi" q :accel 60 100 1/32 5) (110 1) (120 1) (60 1) (120 1) (110 1) (:rit 100 60 1/32 5))) The expression begins with a list that includes a tempo marking and value to be placed at the start of the notation score. There are four slots in all. Here's the document instruction itself: <tempo-name> is a string for the tempo to be printed by notation, e.g. \"Allegro\". <beat-note> is an OMN note symbol denoting the note that gets a beat, e.g. q or e. <:bars/:length>, if included, determines whether <count> is a number of bars or a length (number of quarter notes). Defaults to :bars. The first list of tempo changes has an accelerando from 60 to 100 bpm with a delta-time value of 1/32 over a period of 5 bars: (:accel 60 100 1/32 5) This is followed by 5 bars each set to a different tempo. . . . (110 1) (120 1) (60 1) (120 1) (110 1) Then, to finish there's a gradual ritardando indicated. (:rit 100 60 1/32 5)) Finally, the tempo-2 variable is placed within the DEF-SCORE expression: (def-score lesson-29 (:key-signature '(c maj) :time-signature ts-list :tempo tempo-2) The additional percussion part is an opportunity to see how such a part might be organised and notated. The pitch organisation uses a preliminary mapping, if only because the pitch layout of GM percussion is hardly intuitive! The mapping sonically is low to high (a b c d) even though the pitches that trigger the percussion samples are not the same. Mapping the percussion kit is made possible by defining new variables with an alphabetical series of variables whose names are suggestive of pitches, but which actually encapsulate the ‘correct’ GM percussion note: (setf c '(cs4) ;bongo l d '(c4) ;bongo h a '(e4) ;conga l b '(ds4)) ;conga h The rhythms are notated here directly in OMN. here’s the A section: (setf rhy-p '((e = = - e) (e - s =‌= = e) (-e e = - s =) (e = s = e e) (-e e - s = = =))) OMN also has particular shorthand notations for repeats and rests: = repeats a note-length - is a rest-length =‌= doubles up the note-length =‌=‌= triples the note-length. See how the function APPLY-EVAL turns the alphabetical percussion mapping series into pitches: (setf p-kit-i (apply-eval ' ((a a a b) (a c d c d b) (a b c d) (a b c c b) (a c d c d)))) => ((e4 e4 e4 ds4) (e4 cs4 c4 cs4 c4 ds4) (e4 ds4 cs4 c4) (e4 ds4 cs4 cs4 ds4) (e4 cs4 c4 cs4 c4)) Score ;; Mapping percussion kit (setf c '(cs4)) ; bongo l (setf d '(c4)) ; bongo h (setf a '(e4)) ; conga l (setf b '(ds4)) ; conga h (setf line (gen-repeat 5 '((c4 cs4 fs4 g4 c5)))) (setf line-t (pitch-transpose '(0 1 7 6 0) line)) (setf bass (pitch-transpose -24 line)) (setf bass-r (gen-retrograde bass :section '(0 2 4))) (setf chords '(c4cs4fs4 fs4g4c5)) (setf rhythm (span line '(e))) (setf rhy-c (span rhythm chords)) (setf rhy-w (length-weight rhythm :weight '(2 1) :seed 30)) (setf rhy-wi (length-weight rhythm :weight '(3 1) :seed 23)) (setf rhy-p '((e = = - e) (e - s =‌= = e) (-e e = - s =) (e = s = e e) (-e e - s = = =))) (setf rhy-p1 '((e = = =‌=) (e = = - =) (e = = = =) (-e = = - =) (e = = - e))) (setf p-kit-i (apply-eval '((a a a b) (a c d c d b) (a b c d) (a b c c b) (a c d c d)))) (setf p-kit-ii (apply-eval '((a b a d a) (a b a c) (c d d c d) (a b a) (d a c d)))) (setf perc-1 (make-omn :length rhy-p :pitch p-kit-i :velocity '(f))) (setf perc-2 (make-omn :length rhy-p1 :pitch p-kit-ii :velocity '((mf) (f) (fff) (f) (mf)))) (setf line-1 (make-omn :length rhy-w :pitch line-t :velocity'(f))) (setf bass-1 (tie-bars (make-omn :length rhythm :pitch bass-r :velocity '(mp)))) (setf line-2 (make-omn :length rhy-w :pitch chords :velocity '((mp) (mf) (fff) (mf) (mp)))) (setf bass-2 (make-omn :length rhy-wi :pitch bass-r :velocity '(f))) (setf part-1-rh (assemble-seq line-1 line-2 line-1)) (setf part-1-lh (assemble-seq bass-1 bass-2 bass-1)) (setf perc-1-2-1 (assemble-seq perc-1 perc-2 perc-1)) ;; Two different forms of tempo change - try each in the tempo slot of def-score. ;; Tempo-change 1 (setf tempo-list-1 '(60 70 80 90 100 110 120 60 120 110 100 90 80 70 60)) (setf tempo-1 (make-tempo tempo-list-1 part-1-rh)) ;; Tempo-change 2 (setf tempo-2 '(("Mixed Tempi" q :accel 60 100 1/32 5) (110 1) (120 1) (60 1) (120 1) (110 1) (:rit 100 60 1/32 5))) (setf ts-list (get-time-signature part-1-rh :group '((5)))) (def-score lesson-29 (:key-signature 'chromatic :time-signature ts-list :tempo tempo-2 :layout (list (piano-layout 'piano-rh 'piano-lh) (percussion-layout 'percussion))) (piano-rh :omn (respell part-1-rh :type :chord) :channel 1 :sound 'gm :program 'acoustic-grand-piano) (piano-lh :omn part-1-lh) (percussion :omn perc-1-2-1 :channel 10 :pan 64) ) Notation Next page Lesson 30. Clusters, Repeats and Ornaments Go back to Reference page.
13. ## Lesson 28. Working with Libraries

Contents Annotation Score Notation Annotation Back to the piano and a piece with a ragtime feel using Opusmodus libraries as way of working with collections of pitch and rhythm material. There are three functions associated with libraries: CREATE-LIBRARY, DEF-LIBRARY and LIBRARY. We'll use them all here. In this composition we'll work with the libraries within the score-file itself, but it's worth looking at the Library Section of the Utilities Pane just to get an idea of the kind of material that can be kept there. We'll start by creating two libraries: one for rhythm, one for pitch. Here's the one for rhythm: (create-library 'Binary-Rhythmics '4-bit-binary 'binr (combination2 4 '(1 0))) In the above code, the CREATE-LIBRARY function will create a library definition for 'Binary-Rhythmics, which in this case includes only one sub-section '4-bit-binary. The definition will be printed directly to the Listener. Note that each definition in the library is also user-defined prefix 'binr. So, to access the first item in the library we would refer to it as 'binr0. We end up with a list like this, copied from the Listener and pasted into our Composer panel: (def-library binary-rhythmics (:section 4-bit-binary binr0 '(0 0 0 0) binr1 '(1 0 0 0) binr2 '(0 1 0 0) . . . )) The output shown here is from the function COMBINATION2, a function that can output all the possible occurrences in a list of 4 items consisting in this instantce of the binary digits (1 0). With this print-out a library can be defined with the function DEF-LIBRARY. Here's part of it: (def-library binary-rhythmics (:section 4-bit-binary binr0 '(0 0 0 0) binr1 '(1 0 0 0) binr2 '(0 1 0 0) binr3 '(1 1 0 0) binr4 '(0 0 1 0) binr5 '(1 0 1 0) binr6 '(0 1 1 0) binr7 '(1 1 1 0) binr8 '(0 0 0 1) binr9 '(1 0 0 1) binr10 '(0 1 0 1) binr11 '(1 1 0 1) binr12 '(0 0 1 1) binr13 '(1 0 1 1) binr14 '(0 1 1 1) binr15 '(1 1 1 1) )) The output from the Listener can not only be copied and pasted onto the working file itself (as it is here), but also can be saved in a dedicated file to the composer's own user-library. Now for the pitch library. As the Slonimsky library is already part of the Opusmodus libraries we don't have to create a library, only define one (see the Libraries tab in the Utilities panel to access the Slonimsky Thesaurus library). Here we've copied a section from the Slonimsky library and labelled it as :section tritone27-31. Notice these entries are for both upward and downward patterns. Again we could create a separate user-file or, as here, simply paste it to our working file. Composing begins with these expressions using the function LIBRARY to pick out random lists from each library using the :random keyword: (setf rh-pitches (library 'slonimsky-s 'tritone27-31 nil :random 20 :seed 61)) => ((c4 f4 fs4 g4) (c5 gs4 fs4 e4) (c5 gs4 fs4 e4) . . .) (setf rh-rhythms (library 'binary-rhythmics '4-bit-binary nil :random 20 :seed 51)) => ((1 1 0 1) (0 0 1 1) (1 1 1 0) (1 0 0 1) . . .) Because we're using binary lists in conjunction with BINARY-MAP, the pitches will be swallowed by the rhythm pattern rather than skipping length-rests. (setf rh-pitches-s (binary-map rh-rhythms rh-pitches)) => ((c4 f4 g4) (fs4 e4) (c5 gs4 fs4) . . .) (setf rh-rhythms-s (binary-map rh-rhythms '(s))) => ((1/16 1/16 -1/16 1/16) (-1/16 -1/16 1/16 1/16) (1/16 1/16 1/16 -1/16) . . .) This is fine, but the texture of the right hand isn't quite finished. (setf rhy-inversion (length-invert rh-rhythms-s :section '(0 3 4 5 6 8 11 12 14 16 18))) A secondary part is created here using the LENGTH-INVERT function. This changes the rhythm list rh-rhythms-s into: => ((-1/16 -1/16 1/16 -1/16) (-1/16 -1/16 1/16 1/16) (1/16 1/16 1/16 -1/16) . . .) But there's more, as the LENGTH-INVERT function is only being applied to this part on certain sections (lists) in the piece. The result is contrary-motion figures and chordal passages all playable by a single hand. In the left hand part the pitch library-based expression is set to a different :seed, but in the rhythm library-based expression it's been removed. Here a further aspect of LIBRARY is revealed: the ability to be able to :collect together a list of chosen rhythms. Here a template has been collected based on the order of the library list of rhythms. The template is used to pick from the library via the keyword :collect: (setf template '(11 12 7 9 15 13 12 4 2 6)) (setf lh-rhy (library 'binary-rhythmics '4-bit-binary nil :collect template)) => ((1 1 0 1) (0 0 1 1) (1 1 1 0) (1 0 0 1) . . .) In the pitch parameter, intervals are added with CHORD-INTERVAL-ADD, but only to lists that have one or two notes: (setf lh-pitches-s (chord-interval-add '(-5 -6) (binary-map lh-rhythms lh-pitches) :section '(1 3 6 8))) => ((c3 bb2 d3) (fs3cs3 eb3a2) (c3 g3 fs3) . . .) In the rhythm parameter, LENGTH-AUGMENTATION is used to create bars of 5/8 rather than the 2/8 bars of the right hand. This is the reason only 10 rhythms and pitch selections have been made from the library collections. (setf lh-rhythms-s (length-augmentation 2 (binary-map lh-rhythms '(s)))) => ((1/8 1/8 -1/8 1/8) (-1/8 -1/8 1/8 1/8) (1/8 1/8 1/8 -1/8) . . .) Notice in the :layout part of the expression there is the keyword :ignore-velocity t. This enables you to block the appearance of dynamics signs in the notation output. (def-score lesson-28 (:key-signature 'chromatic :time-signature '((1 1 1 1 1) 8) :tempo '(q 60) :layout (piano-solo-layout 'piano-rh 'piano-lh :ignore-velocity t)) (piano-rh :omn (merge-voices rh-1 rh-2) :channel 1 :sound 'gm :program 'acoustic-grand-piano :controllers (ped '(0 127 0 127 0 0 0 0 127 0 0 0 127 0 127 0 127 0 127))) (piano-lh :omn lh-1) ) Score (create-library 'Binary-Rhythmics '4-bit-binary 'binr (combination2 4 '(1 0))) (def-library binary-rhythmics (:section 4-bit-binary binr0 '(0 0 0 0) binr1 '(1 0 0 0) binr2 '(0 1 0 0) binr3 '(1 1 0 0) binr4 '(0 0 1 0) binr5 '(1 0 1 0) binr6 '(0 1 1 0) binr7 '(1 1 1 0) binr8 '(0 0 0 1) binr9 '(1 0 0 1) binr10 '(0 1 0 1) binr11 '(1 1 0 1) binr12 '(0 0 1 1) binr13 '(1 0 1 1) binr14 '(0 1 1 1) binr15 '(1 1 1 1) )) (def-library Slonimsky-s (:section tritone27-31 s27u '(c4 cs4 fs4 b4) s27d '(c5 b4 fs4 cs4) s28u '(c4 d4 fs4 as4) s28d '(c5 as4 fs4 d4) s29u '(c4 ds4 fs4 a4) s29d '(c5 a4 fs4 ds4) s30u '(c4 e4 fs4 gs4) s30d '(c5 gs4 fs4 e4) s31u '(c4 f4 fs4 g4) s31d '(c5 g4 fs4 f4))) ;; Right-hand (setf rh-pitches (library 'slonimsky-s 'tritone27-31 nil :random 20 :seed 61)) (setf rh-rhythms (library 'binary-rhythmics '4-bit-binary nil :random 20 :seed 51)) (setf rh-pitches-s (binary-map rh-rhythms rh-pitches)) (setf rh-rhythms-s (binary-map rh-rhythms '(s))) (setf rhythm-inversion (length-invert rh-rhythms-s :section '(0 3 4 5 6 8 11 12 14 16 18))) (setf rhythm-inversion-p (span rhythm-inversion rh-pitches)) (setf dynamics '((mp) (f) (f) (mp) (p ) (mp) (mf) (f f f f mf) (p) (ff))) (setf rh-1 (make-omn :length rh-rhythms-s :pitch rh-pitches-s :velocity dynamics)) (setf rh-2 (make-omn :length rhythm-inversion :pitch rhythm-inversion-p :velocity (reverse dynamics))) ;; Left-hand (setf lh-pitches (ambitus '(g2 g3) (library 'slonimsky-s 'tritone27-31 nil :random 10 :seed 52 :transpose -12))) (setf template '(11 12 7 9 15 13 12 4 2 6)) (setf lh-rhythms (library 'binary-rhythmics '4-bit-binary nil :collect template)) (setf lh-pitches-s (chord-interval-add '(-5 -6) (binary-map lh-rhythms lh-pitches) :section '(1 3 6 8))) (setf lh-rhythms-s (length-augmentation 2 (binary-map lh-rhythms '(s)))) (setf lh-1 (make-omn :length lh-rhythms-s :pitch lh-pitches-s :velocity '(f))) (def-score lesson-28 (:key-signature '(c maj) :time-signature '((5) 8) :tempo '(q 60) :ignore-velocity t :layout (piano-layout 'piano-rh 'piano-lh)) (piano-rh :omn (merge-voices rh-1 rh-2) :channel 1 :sound 'gm :program 'acoustic-grand-piano :controllers (ped '(0 127 0 127 0 0 0 0 127 0 0 0 127 0 127 0 127 0 127))) (piano-lh :omn lh-1) ) Notation Next page Lesson 29. Tempo Changes and Percussion Go back to Reference page.
14. ## Lesson 27. Merging Parts and Sequencing Score-Scripts

Contents Annotation Score Notation Annotation For this score-script we change instruments: from piano to the classical guitar. This is the first movement of Nigel Morgan’s 4 Movements for Peace titled Invocation. The reason for including this is that its score-script includes the function MERGE-VOICES and the playing of multiple score-scripts. There are in fact three score-scripts in this file: part-1, 2 and 3. Organising your composition this way has many advantages as you can build the sections as separate score-scripts and when complete paste them together in a single file. The technique of composition used in Invocation is a little unusual in that most of the pitches played by the guitar are generated from fingering patterns. (setf E-string '(0 1 2 3 4)) (setf D-string '(0 1 2 3 4)) There is a precedent for this in the Autumn movement of Nigel Morgan’s large-scale guitar work Sense of Place. Part-1 produces a 2-part homophonic texture with a rhythm produced by LENGTH-WEIGHT and with repeated notes processed by FILTER-TIE: (setq rep-tie0 (filter-tie (list p-1&4 rw-1&4))) This function outputs lists of both pitch and length: => (gs4f3 e4e3 fs4d3 f4fs3 e4e3 f4d3 e4f3 . . .) => (1/8 1/8 -1/8 1/8 1/8 1/8 -1/8 -1/8 1/8 . . .) These lists are aligned inside the MAKE-OMN expression: (setf s14 (make-omn :pitch (1~ rep-tie0) :length (2~ rep-tie0))) In Part-2 the homophony becomes polyphony. Although the generation of pitches is again from fingering positions the rhythm of each string is unique. Also the rhythmic 'gaps' in part-1 are replaced by an open-string diad. This is where LENGTH-REST-POSITION comes into its own - indicating the positions in the list that are rest-lengths: (setq p-1xi (position-replace (length-rest-position rw-1i) 'g3 p-1i)) (setq p-4xi (position-replace (length-rest-position rw-4i) 'a2 p-4i)) Again FILTER-TIE is used, this time with considerable effect, producing suspensions as here in the higher voice: => (e g3 e4 fs4 h_e g3 e gs4 . . .) Part-3 is homophonic like Part-1 but its pitch content comes from generating fingering positions on two different strings: (setf G-string '(0 1 2 3 4)) (setf A-string '(0 1 2 3 4)) It begins exactly like Part-1 with rhythmic gaps but then is restated with the texture developed by 'filling' these rhythmic gaps with an open-string diad: (setq p-1z (position-replace (length-rest-position rw-3&5) 'e5d4 p-3&5)) => (b3c3 g3b2 e5d4 gs3cs3 g3b2 gs3a2 e5d4 . . .) (setq p-1v (position-replace (position-item 'e5d4 (1~ rep-tie01)) 'p (span r-3&5 '(f)))) => (f f p f f f p f p f f f . . .) This diad on the guitar is a chord of harmonics and is simulated by assigning a lighter dynamic to its occurrence, as the expression above demonstrates. In Lesson 24 we saw how an ending was created with :start and :end settings. Note that in Invocation, each section has its own DEF-SCORE, which are used to structure the whole piece by calling on the three score definitions within COMPILE-SCORE: (compile-score '((invocation-1 :start 1 :end 8) (invocation-2 :start 1 :end 16) (invocation-3 :start 1 :end 16) (invocation-1 :start 1 :end 8))) Score ;; Invocation ;; Part I (setf E-string '(0 1 2 3 4)) (setf D-string '(0 1 2 3 4)) (setf s-1 (rnd-sample 32 E-string :seed 437)) (setf s-4 (rnd-sample 32 D-string :seed 421)) (setf p-1 (pitch-transpose 4 (integer-to-pitch s-1))) (setf p-4 (pitch-transpose -10 (integer-to-pitch s-4))) (setf p-1&4 (pitch-mix (list p-1 p-4))) (setf r-1&4 (span p-1&4 '(e))) (setf rw-1&4 (length-weight r-1&4 :weight '(2 1) :seed 45)) (setq rep-tie0 (filter-tie (list p-1&4 rw-1&4))) (setf s14 (make-omn :pitch (1~ rep-tie0) :length (2~ rep-tie0))) (def-score invocation-1 (:key-signature 'chromatic :time-signature '(2 4) :tempo 80) (guitar :omn s14 :channel 1 :sound 'gm :program 'acoustic-guitar-nylon) ) ;; Part II (setf Ei-string '(0 1 2 3 4)) (setf Di-string '(0 1 2 3 4)) (setf s-1i (rnd-sample 64 E-string :seed 437)) (setf s-4i (rnd-sample 64 D-string :seed 421)) (setf p-1i (pitch-transpose 4 (integer-to-pitch s-1i))) (setf p-4i (pitch-transpose -10 (integer-to-pitch s-4i))) (setf r-1&4i (span p-1i '(e))) (setf rw-1i (length-weight r-1&4i :weight '(2 1) :seed 45)) (setq rw-4i (length-weight r-1&4i :weight '(3 1) :seed 451)) (setq p-1xi (position-replace (length-rest-position rw-1i) 'g3 p-1i)) (setq p-4xi (position-replace (length-rest-position rw-4i) 'a2 p-4i)) (setf rep-tie4 (filter-tie (list p-4xi r-1&4i))) (setf rep-tie1 (filter-tie (list p-1xi r-1&4i))) (setf s1c (make-omn :pitch (1~ rep-tie1) :length (2~ rep-tie1))) (setf s4c (make-omn :pitch (1~ rep-tie4) :length (2~ rep-tie4))) (def-score invocation-2 (:key-signature 'chromatic :time-signature '(2 4) :tempo 80 :layout (guitar-down8-layout 'guitar)) (guitar :omn (merge-voices s1c s4c) :channel 1 :sound 'gm :program 'acoustic-guitar-nylon) ) ;; Part III (setf G-string '(0 1 2 3 4)) (setf A-string '(0 1 2 3 4)) (setf s-3 (rnd-sample 32 G-string :seed 437)) (setf s-5 (rnd-sample 32 A-string :seed 421)) (setf p-3 (pitch-transpose -5 (integer-to-pitch s-3))) (setf p-5 (pitch-transpose -15 (integer-to-pitch s-5))) (setf p-3&5 (pitch-mix (list p-3 p-5))) (setf r-3&5 (span p-1&4 '(e))) (setf rw-3&5 (length-weight r-3&5 :weight '(2 1) :seed 45)) (setq p-1z (position-replace (length-rest-position rw-3&5) 'e5d4 p-3&5)) (setq rep-tie0 (filter-tie (list p-3&5 rw-3&5))) (setq rep-tie01 (filter-tie (list p-1z r-3&5))) (setq p-1v (position-replace (position-item 'e5d4 (1~ rep-tie01)) 'p (span r-3&5 '(f)))) (setf s35 (make-omn :pitch (1~ rep-tie0) :length (2~ rep-tie0))) (setf harm '(- - harm - - - harm - harm - - - harm - - - harm - - - - - harm)) (setf art-rest (gen-repeat 22 '-)) (setf artic (flatten (list harm art-rest))) (setf s35i (make-omn :pitch (1~ rep-tie01) :length (2~ rep-tie01) :velocity p-1v :articulation artic)) (setq s2x (assemble-seq s35 s35i)) (def-score invocation-3 (:key-signature 'chromatic :time-signature '(2 4) :tempo 80) (guitar :omn s2x :channel 1 :sound 'gm :program 'acoustic-guitar-nylon) ) ;; Assemble score (compile-score '((invocation-1 :start 1 :end 8) (invocation-2 :start 1 :end 16) (invocation-3 :start 1 :end 16) (invocation-1 :start 1 :end 8)) ) Notation Next page Lesson 28. Working with Libraries Go back to Reference page.
15. ## Lesson 26. Chords to Parts

Contents Annotation Score Notation Annotation A Piano Trio This score-script returns to Lesson 18 to create a version of the chorale, this time for piano trio. So the score opens with an opportunity to see how DEF-SOUND-SET is used to set up a violin and a cello part. This is more than setting a program change: it includes the mapping of program changes to reflect the string articulations of arco, pizz, staccato and tremolo. Most of the score-script remains the same until we get to the articulation and remix expressions: (setq art-1 '((arco arco arco arco arco+fermata) (stacc stacc stacc stacc stacc+fermata) (trem trem trem trem trem+fermata) (pizz pizz pizz pizz pizz+fermata) (arco arco arco arco arco+fermata))) Notice how the combining of arco and fermata requires a joining together as arco+fermata. (setf vn-1 (pitch-demix 1 rh-ab)) (setf vc-1 (pitch-demix 2 lh-abt)) In 'remixing' the right and left hand diads played by the piano to a single part we indicate which of the two notes in the diads should be de-mixed. The original expression is this: (setf rh-ab (pitch-mix (list (integer-to-pitch rh-a) (integer-to-pitch rh-b)))) => ((bb4eb4 bb4e4 bb4f4 gs4cs4 bb4f4 . . .) (setf vn-1 (pitch-demix 1 rh-ab)) => (bb4 bb4 bb4 gs4 bb4 gs4 bb4 b4 c5 . . .) So setting the position value to 1 separates the treble from the alto voice in the diad and outputs the treble. To get the cello part we use the same approach, but setting the position value to 2 separates the tenor from the bass voice in the diad and outputs the bass. The only remaining tasks are to MAKE-OMN for both new parts, (setf vn (make-omn :length rhy-1 :pitch vn-1 :velocity dyn-1 :articulation art-1)) (setf vc (make-omn :length rhy-1 :pitch vc-1 :velocity dyn-1 :articulation art-1)) and create a new DEF-SCORE expression for violin and cello. (violin :omn vn :channel 2 :sound 'gm-violin) (violoncello :omn vc :sound 'gm-cello :channel 3) Score ;; Sound Sets (def-sound-set GM-violin :programs (:group violin arco 40 trem 44 pizz 45)) (def-sound-set GM-cello :programs (:group violin arco 42 trem 44 pizz 45)) ;; Material (init-seed 2) (setf row-1 '(12 11 10 9 8) row-2 '(7 8 9 10 11) row-3 '(6 7 6 7 6) row-4 '(1 2 3 4 5)) (setf r-1 (rnd-pick (list row-1 row-1 row-1 row-2 row-3)) r-2 (rnd-pick (list row-2 row-3 row-3 row-4 row-4)) r-3 (rnd-pick (list row-1 row-1 row-2 row-2 row-3)) r-4 (rnd-pick (list row-2 row-3 row-4 row-4 row-4))) (setq rh-a (rnd-sample 25 r-1) rh-b (rnd-sample 25 r-2)) (setf lh-a (rnd-sample 25 r-3) lh-b (rnd-sample 25 r-4)) (setf rh-ab (pitch-mix (list (integer-to-pitch rh-a) (integer-to-pitch rh-b)))) (setf lh-ab (pitch-mix (list (integer-to-pitch lh-a) (integer-to-pitch lh-b)))) (setf lh-abt (pitch-transpose -12 lh-ab)) (setf rhy (span rh-ab '(q))) (setf rhy-1 (gen-repeat 5 (list '(q q q q q)))) (setf ferm (gen-repeat 5 (list '(- - - - fermata2)))) (setq dyn-1 '((f mp< < < ff) (mf f mp> > pp) (p< < mf mp mf) (f ff f> > mp) (mf p mp> > pp))) (setq art-1 '((arco - - - fermata) (stacc stacc stacc stacc stacc+fermata) (trem trem trem trem trem+fermata) (pizz - - - fermata) (arco - - - fermata))) (setf vn-1 (pitch-demix 1 rh-ab)) (setf vc-1 (pitch-demix 2 lh-abt)) (setf vn (make-omn :length rhy-1 :pitch vn-1 :velocity dyn-1 :articulation art-1)) (setf vc (make-omn :length rhy-1 :pitch vc-1 :velocity dyn-1 :articulation art-1)) (setf rh-1 (make-omn :length rhy-1 :pitch rh-ab :velocity dyn-1 :articulation ferm)) (setf lh-1 (make-omn :length rhy-1 :pitch lh-abt :velocity dyn-1 :articulation ferm)) (def-score lesson-26 (:key-signature 'chromatic :time-signature (get-time-signature vn) :tempo '(q 70) :layout (list (bracket-group (violin-layout 'violin) (violoncello-layout 'violoncello)) (piano-layout 'piano-rh 'piano-lh))) (violin :omn vn :channel 2 :sound 'gm-violin :pan 20) (violoncello :omn vc :channel 3 :sound 'gm-cello :pan 110) (piano-rh :omn rh-1 :channel 1 :sound 'gm :program 'acoustic-grand-piano :pan 64) (piano-lh :omn lh-1) ) ;; Setting random back to NIL (init-seed nil) Notation Next page Lesson 27. Merging Parts and Sequencing Score-Scripts Go back to Reference page.
×