Jump to content

Search the Community

Showing results for tags 'score'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Welcome to Opusmodus
    • Announcements
    • Pre Sales Questions
  • Support Forum
    • Support & Troubleshooting
    • OMN Lingo
    • Function Examples
    • Score and Notation
    • Live Coding Instrument
    • Library Setup
    • MIDI Setup
    • SuperCollider
  • Question & Answer
    • Suggestions & Ideas
    • Zoom into Opusmodus
  • Sharing
    • Made In Opusmodus
    • User Extensions Source Code
  • Opusmodus Network
    • Meet, Compose, Collaborate
    • Strategies and Methods to Control Complexity
  • Opusmodus Workshops & Schools
    • Composer Workshop

Categories

  • The First Steps in Opusmodus
  • Tutorials
  • How-to in 100 sec
  • Made in Opusmodus
  • How-To
  • Zoom into Opusmodus
  • SuperCollider
  • Workflow
  • Live Coding
  • Presentation
  • Analysis
  • Composer Workshop

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website URL


Gender


Location


Interests


About Me

  1. Algorithmic avant garde jazz improvisation for tenor saxophone, piano, bass and drums. I thought it is time to add something new to our 'Made in Opusmodus' forum. Samples: VSL Ensemble Pro with Vienna Instruments Pro. If you like to study the score, here it is: DADA Quartet.opmo
  2. Hi, for study purpose only, you will find attached to this post the score script of this Prelude for Piano. SB. PreludeForNicolai.opmo
  3. Hi, new piece after a paint by Egon Schiele. SB. mwploaFullScoreEdit.opmo (update)
  4. There are many occasions when we would like to add articulations by hand to our generated scores. The first thing we need to do is to convert (output) the score into omn format. Algorithmically generated score. (setf size 200) (setf vector (add-triangle-waves 4 size 1 0.6 :modulation (gen-triangle size 1 '(0.5 0.4 0.3 0.6) :modulation (gen-triangle size 1 0.3 :phase 180)))) (setf pitches (gen-divide 4 (vector-to-pitch '(g1 g6) vector))) (setf transpose (pitch-transpose -12 pitches)) (setf variants (pitch-variant transpose :variant '?)) (setf length (rnd-sample 120 '(s e s s))) (setf time (span pitches length)) (setf dynamics '(p mf ff)) (def-score add-triangle (:title "Waves Add-Triangle" :composer "OPMO" :copyright "© 2014 Opusmodus" :key-signature 'chromatic :time-signature (get-time-signature time) :tempo 120 :layout (piano-solo-layout 'rh 'lh :flexible-clef t)) (rh :length time :pitch pitches :velocity (rnd-sample size dynamics) :port 0 :sound 'gm :channel 1 :program 'acoustic-grand-piano) (lh :length time :pitch variants :velocity (rnd-sample size dynamics))) The expression below will convert the score into omn score format. (compile-score 'add-triangle :output :score) To get a more readable version of the score add PPRINT (print pretty) at the beginning of the expression. (pprint (compile-score 'add-triangle :output :score)) Output in the Listener: (def-score add-triangle (:title "Waves Add-Triangle" :composer "OPMO" :copyright "© 2014 Opusmodus" :key-signature 'chromatic :layout '(:brace (:flexible-treble rh) (:flexible-bass lh) :name "" :abbr "" :flexible-clef t) :time-signature '((1 4 2) (5 16 2) (1 4 1) (5 16 1) (3 8 2) (5 16 2) (3 8 1) (5 16 2) (1 4 1) (5 16 1) (1 4 1) (3 8 2) (1 4 1) (3 8 1) (5 16 1) (3 8 1) (5 16 2) (3 8 1) (7 16 1) (1 4 1) (3 8 1) (1 4 1) (5 16 1) (1 4 2) (5 16 2) (1 4 1) (5 16 1) (3 8 2) (5 16 2) (3 8 1) (5 16 2) (1 4 1) (5 16 1) (1 4 1) (3 8 2) (1 4 1) (3 8 1)) :tempo '120) (rh :omn '((s g1 ff gs1 p a1 ff b1) (s c2 mf cs2 ff d2 e2 mf) (e f2 p s fs2 ff g2 p a2) (s b2 mf e c3 s cs3 ff eb3) (s e3 mf f3 ff fs3 p a3 mf) (s bb3 ff b3 e c4 p s e4) (e e4 ff s f4 e s b4 p) (e b4 s s mf e fs5 ff) (s fs5 mf f5 p mf e cs6) (s cs6 c6 p e b5 mf s g6 ff) (s g6 p ff e f6 g6 mf) (s g6 g6 p ff e fs6) (s g6 mf p e s fs6) (s fs6 fs6 ff mf ff) (e fs6 p s ff fs6 fs6 mf) (s fs6 fs6 ff p f6) (s fs6 ff mf e e f6) (s f6 e fs6 fs6 p s f6) (s f6 mf fs6 fs6 p f6) (e f6 f6 ff s fs6 p f6 ff) (s f6 p e s s) (s f6 e mf p s ff) (s f6 mf p mf e ff) (s f6 p e s mf p) (s f6 ff e mf s e p) (e f6 s e ff mf) (s f6 p mf e6 ff f6 p) (s f6 ff e6 mf e eb6 p f6 mf) (s f6 e6 d6 f6) (s f6 e6 ff d6 e f6 p) (s f6 mf e6 ff cs6 f6 mf) (s f6 ff f6 cs6 mf f6 ff) (e f6 mf s s cs6 p fs6 mf) (s f6 ff e e6 p s bb5 mf f6) (s e6 p b5 f5 eb6) (s bb5 fs5 ff e cs5 p s a5 mf) (e e5 ff s c5 e gs4 mf s d5) (e bb4 s fs4 d4 e g4) (s e4 ff d4 b3 mf e eb4) (s cs4 p bb3 mf e gs3 p s c4 ff) (s a3 a3 mf e b3 ff gs3) (s bb3 c4 d4 e b3 mf) (s cs4 p eb4 mf e f4 p s eb4 ff) (s e4 fs4 gs4 p fs4 ff) (e g4 p s a4 mf bb4 a4) (s bb4 c5 cs5 p c5 mf) (s cs5 eb5 ff e e5 mf eb5 ff) (s e5 mf e fs5 g5 p s fs5 ff) (s g5 mf gs5 a5 p a5) (e bb5 ff b5 mf s c6 ff c6)) :channel 1 :sound 'gm :program 'acoustic-grand-piano :volume 90 :pan 64) (lh :omn '((s b0 p a0 mf gs1 g1) (s e1 d1 cs1 ff c1) (e a1 mf s g1 p fs1 mf f1) (s eb2 ff e cs2 s c2 mf b1 p) (s e2 mf eb2 d2 b1 p) (s e3 mf c3 p e b2 ff s bb2) (e b3 p s f3 mf e s e3 ff) (e b3 p s s ff e e3 mf) (s cs5 ff a5 p a5 e gs5 mf) (s cs5 ff c5 e b4 mf s g5 ff) (s g5 mf a5 ff e g5 p g5) (s g5 g5 mf g5 e fs5 ff) (s g5 p g5 e ff s gs5 mf) (s fs5 fs5 ff mf fs5) (e fs5 s p mf fs5) (s fs5 p ff p f5 mf) (s f5 p fs5 mf e e) (s f5 p e e5 e5 ff s f5) (s f5 p e5 e5 f5) (e f5 ff fs5 p s f5 ff f5) (s f5 e s p f5) (s f5 ff e e p s ff) (s f5 mf f5 f5 e p) (s f5 e ff s mf ff) (s f5 mf e p s e mf) (e f5 s e p f5) (s e5 f5 mf p f5) (s f5 g5 ff e fs5 p f5 ff) (s f5 fs5 mf gs5 f5 ff) (s f5 d5 e5 e f5 mf) (s cs5 e5 f5 f5 p) (s f5 ff mf p cs5) (e cs5 ff s f5 mf p fs5 mf) (s f5 e fs5 s c6 f5) (s e5 b4 p f4 eb5 mf) (s bb4 p a4 mf e fs4 p s cs4 ff) (e e4 mf s gs4 p e c5 mf s fs4 ff) (e bb3 s fs3 d3 e g3 mf) (s e3 p d3 b2 e eb3 ff) (s c3 mf e3 p e d3 ff s b2 mf) (s b2 ff a2 p e e gs2) (s b2 ff gs2 mf bb2 ff e c3 p) (s cs3 b2 mf e a2 ff s b2 p) (s fs3 e3 mf fs3 p gs3) (e g3 ff s f3 e3 p f3 ff) (s c4 mf cs4 c4 bb3) (s cs4 p eb4 mf e e4 eb4) (s fs4 p e g4 mf fs4 s e4) (s g4 gs4 p a4 a4) (e c5 ff mf s cs5 ff d5 p)) :channel 1 :sound 'gm :program 'acoustic-grand-piano :volume 90 :pan 64)) Copy the score from the Listener and paste it into the Composer panel. Now we are ready to add articulations etc... to the score by hand.
  5. Hi, is it possible to use Klangfarbenmelodie with OMN ? It could be like that: pitch 1, midi channel 1 pitch 2, midi channel 2... Is there any easy way to do it, or maybe a function I haven't see yet ? Thanks Alain
  6. Here's some few examples of use of the recently updated tonality-system. (complete opmo score attached to this post.) ;; Utility function useful for using ;; bass note of chords/scales as root ;; in tonality-series. (defun get-lowest-chord-tone (chords) (do-verbose ("get-lowest-chord-tone") (integer-to-pitch (mapcar 'find-min (pitch-to-integer chords))) )) #| ;;; USAGE (setf chords '(d4f4a4 ab3d4eb4g4 f4eb3c5)) (get-lowest-chord-tone chords) |# It is better now to see the tonality as kind of PCS (pitch Class Set). If you would express them in pitch, it is easier to work on C base. Something interesting if the fact tonality can now be sorted or not. It will be reflected in the output of tonality-map. ;; Some tests (tonality-map '(d4e4f4g4a4b4) '(c4 d4 e4 f4 g4 a4 b4)) (tonality-map '(d4e4f4g4a4b4) '(c3 e4g4)) (tonality-map '(d4e4f4g4a4b4 :root d4) '(c3 e4g4)) (tonality-map '((0 2 3 5 7 9 10) :root d4) '(c3 e4g4)) (tonality-map '((0 2 3 5 7 9 10) :root d4 :closest 'down) '(c3 e4g4)) More extended test with use of bass note as root: (setf row '(c4 e4 f4 b4 a4 bb4 cs4 gs4 fs4 g4 eb4 d4)) (setf modes1 (harmonic-progression '(0 1 2 3 4 5 6 7 8 9 10 11) row :step 1 :size 8 )) (setf mtv '((s c4 d4 e4 f4 g4 a4 b4 c5))) (setf test1 (tonality-map (mclist modes1) (gen-repeat 12 mtv))) (setf path1 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) )) (setf test2 (tonality-map path1 (gen-repeat 12 mtv))) (setf mtv2 '((s c4 cs4 d4 ds4 e4 f4 fs4 g4))) (setf test3 (tonality-map (mclist modes1) (gen-repeat 12 mtv2))) (setf test4 (tonality-map path1 (gen-repeat 12 mtv2))) (setf path2 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) :map '(step) )) (setf test5 (tonality-map path2 (gen-repeat 12 mtv))) (setf test6 (tonality-map path2 (gen-repeat 12 mtv2))) (setf path3 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) :map '(step) :sort t )) (setf test7 (tonality-map path3 (gen-repeat 12 mtv2))) (setf test8 (tonality-map path3 (gen-repeat 12 mtv))) SB. NewTonalitySystemExamples.opmo
  7. Hello, a small piece for piano solo. Score script attached to this post. SB. Jeu2PourPiano.opmo
  8. This is a simple piano piece by Patrick Mimran . SimpleSpringPianoPiece - - Output - Stereo Out.mp3 SimpleSpringPianoPiece.opmo
  9. Score with ADD-TEXT-ATTRIBUTES and GEN-DYNAMIC-CONTROLLER. ;;;--------------------------------------------------------- ;;; Sechs Bagatellen fuer Streichquartett OP.9, I ;;;--------------------------------------------------------- (add-text-attributes '(daempfer "mit Dämpfer") '(steg "am Steg") '(d-saite "d-Saite") ) (setf violin1-I '((-q - cs5 pp< daempfer+ubow+tie) (e cs5 > - - bb5 p> leg e5 > leg f4) (q g4 pp> leg eb4 -) (-3q eb4ab4 <> harm - -q -) (-q -3q 3h f6 pp<> ubow) (-q e a6 f< ten fs6 < ten) (q g5 ff - -3q - b3 f marc) (e. c4 < leg s b3 -q -e f3ds4 p leg) (q a3gs4 < - -) (-e q g3fs4 ppp> ten -e fermata -q))) (setf violin2-I '((-h.) (e c4 pp< daempfer+leg gb4 < leg 3h ab4 -3q -q) (-h.) (q bb3 pp pizz+ten - gs3e4 pp<> ubow+arco) (-q d4 pp< ttrem+steg+leg fs4 steg) (-h) (-q -3q 3h gs5 ff d-saite+leg q f4 >) (-q -3q gs3 f> stacc+pizz a4 > stacc -q) (-3q 3h eb6 f> ten+arco+tie s eb6 - e gb4 p> leg+d-saite f5 leg s e5 -) (-h. fermata))) (setf viola-I '((-q -3q 3h eb4 pp<> ubow+harm+ten+steg+daempfer -q) (-q s a3 pp stacc+steg b3 stacc+steg a3 stacc+steg b3 stacc+steg a3 stacc+steg b3 stacc+steg a3 stacc+steg b3 stacc+steg) (-h.) (-e. s c4 p< arco+leg q. c5 leg e bb4 >) (-h) (-s e b5 sf leg s bb4 >p< tie e bb4 -) (-q e f5 fff ten+pizz eb5 ten -q) (-e q. cs5fs5 sfp harm+arco+trem -e b3fs4 p leg) (q c3cs4 < - -s e. bb5 p> marc+tie) (e. bb4 pp -s -3q c5 ppp> fermata+ten - -q))) (setf cello-I '((-q d4 pp< ten+harm+daempfer -) (-q - -3q 3h fs2 pp leg+tie) (q. fs2 < leg e e2 > e4 p leg d5 leg+tie) (e d5 < leg f5 > -q a2f3 pp<>) (-e q cs3fs3 p< ten+harm e g2 pp ten+tie) (3q g2 < 3h cs3fs3 f ten+harm -e c2b2 f stacc+pizz) (-s gs4 ff< leg+arco e e5 < leg+tie q e5 < -e db3c4 f stacc+pizz) (-q -e g3 sffp harm+arco+marc+leg q d4 > app+leg 3q g3 harm 3h g3 f> harm+marc+tie) (e g3 > harm g3 p harm+marc+tie 3q g3 > harm - - -q) (3q b2 pp pizz - cs2fs2 pp< harm+arco+tie e cs2fs2 > harm -e fermata -q))) (setf tempo-I '(("Mäßig" 60 :length 10/4) (:rit 60 40 1/64 2/4) (60 2/4) (:accel 60 96 1/64 2/4) ("heftig" 96 2/4) (:rit 96 60 1/64 1/4) ("wieder mäßig" 60 4/4) (:rit 60 44 1/64 2/4) (44 3/4))) (def-score Anton-Webern-OP-9-I ( :title "Sechs Bagatellen für Streichquartett OP.9, I" :composer "Anton Webern" :copyright "Copyright © 1924 Universal Edition" :key-signature 'chromatic :time-signature (get-time-signature violin1-I) :tempo tempo-I :octave-shift '(c2 c6) :merge-rests t :flexible-clef t :accidentals :cautionary :layout (string-quartet-layout 'vln1 'vln2 'vla 'vlc) ) (vln1 :omn violin1-I ;:port 0 :channel 1 :sound 'vsl-violin-solo :controllers (11 (gen-dynamic-controller violin1-I))) (vln2 :omn violin2-I :channel 2 :sound 'vsl-violin-solo :controllers (11 (gen-dynamic-controller violin2-I))) (vla :omn viola-I :channel 3 :sound 'vsl-viola-solo :controllers (11 (gen-dynamic-controller viola-I))) (vlc :omn cello-I :channel 4 :sound 'vsl-cello-solo :controllers (11 (gen-dynamic-controller cello-I))) )
  10. Hi, here's the score script of a small piece for piano inspired by my first day in Vienna. SB. Klavier-Gallery-1.opmo
  11. Hi, i've made an example of song generator/constructor for one of my Opusmodus student. I share it here if it could be useful to somebody. SB. SongConstructExample.opmo
  12. Opusmodus is not only a wonderful tool for composing contemporary art Music, it can be also a very good tool for composers working for Tv or other media. Attached, a score script extract of this soundtrack score for tv made with Opusmodus. It is the section from 1'28 to 1'43 on the Soundcloud file below. LeDuc2.opmo
  13. Is there a function or some parameter I can set to avoid note collisions in chords? For a very simple example, to re-notate the chord (c4 cs4 e) as C, D flat, E. If not, another question-- maybe a way to set all D sharps to be notated as E flat, etc. Thanks! Paul M.
  14. Here's a piece for Chamber Ensemble inspired by the Novel of Lewis Carroll: Alice's Adventures in Wonderland. Attached you will find an extract of the score script. SB. ExtraitDACDM4_2.opmo
  15. Hi, here's a new piece for Piano solo extracted from my piano suite No.1 (work in Progress). The suite is a succession of small piece in different moods. This one is a bit Rock ;-) The score is attached to this post. SB RockIt.opmo
  16. Hi, i have composed a short strings trio as an example of how to use score post processing techniques, ie. change things in a score after the OMN generation by the opmo functions. Score script and mp3 attached to this post. SB. StringsTrio210516g-GM.opmo StringsTrio210516g.mp3
  17. Hi, here's a new score, Après la pluie, scored for a friends trio. Opusmodus score and Notation file score attached to this post. SB. ApresLaPluieTrio - Partition et parties.pdf ApresLaPluieTrio.opmo
  18. A short piece scored for Violin, Clarinet, Cello and Piano (Opusmodus template :Messiaen Quartet). Score script attached to this post. Music score available a Musicaneo: http://stephaneboussuge.musicaneo.com SB. Score114.opmo
  19. Hi, here's a short study for Orchestra based on Slonimsky patterns No. 49 and 59. I use this study also for testing the possibility with Opusmodus for orchestral composition, DO-TIMELINE technique and multiple files/section assembling. It was also a test for XML export to Sibelius 8 and rendering with awesome software NotePerformer (http://www.noteperformer.com) You will find attached a section of the composition as an template/example on how i did this piece. MusicScore available at: http://stephaneboussuge.musicaneo.com/sheetmusic/sm-239631_etude_1_pour_orchestre.html SB. Etude1OrchestraForumExerpt.opmo
  20. New Score for piano Solo, "Image 1". SB. Image-1_02_060116_1314 - Partition complète.pdf
  21. dear users and opusmodus-guys i'm an OPUSMODUS-newby, very happy with this direct and cool LISP-programming! now the question: i would like to create an polytempo-score for example: this BOTS (bot1-bot4) are playing/written in ONE score with ONE tempo - is it possible to create a score, so that every bot has his own tempo? in extremis: bot1 = 90bpm, bot2 = 91bpm... etc... like in "ars subtilior", but not with a modification of rhythm/duration... thanks for you support - perhaps it's very simple, i don't know... andré further informations to ploytempo etc... http://www.greschak.com/polytempo/ptword.htm -------my simple score-OMN with "material" bot1 to bot4 (def-score multi-bots (:title "multi-bots" :key-signature 'atonal :time-signature '(4 4) :tempo 90 :layout (bracket-group (treble-layout 'bot1) (treble-layout 'bot2) (treble-layout 'bot3) (treble-layout 'bot4))) (bot1 :omn mat_bot1 :channel 1 :sound 'gm :program 'acoustic-grand-piano) (bot2 :omn mat_bot2 :channel 2 :sound 'gm :program 'acoustic-grand-piano) (bot3 :omn mat_bot3 :channel 3 :sound 'gm :program 'acoustic-grand-piano) (bot4 :omn mat_bot4 :channel 4 :sound 'gm :program 'acoustic-grand-piano))
  22. Here's the first study from 3 études sur un spectre de Trombone for piano, a work using some of the new spectral function of Opusmodus. S.B Etude1.opmo
  23. Hi, Here's a Duet for Violin and Piano. Music score and opmo. script attached to this post. SB. DuoViolonPiano101015-1.pdf s1.opmo
  24. Score example from the Opusmodus home page 'Made in Opusmodus'. Focus: PITCH-FIGURATE Theme (setf theme '((-e eb4 stacc s gb3 d3 -e) (e eb4 stacc s gb3 q d3 stacc -s) (-s e eb4 stacc s gb3 d3 -e s eb4 tie+stacc) (s eb4 gb3 d3 stacc gb3 eb4 a3 -e) (-e eb4 stacc s gb3 d3 -e) (e eb4 stacc s gb3 q d3 tie s tie+stacc) (s d3 -e eb4 stacc s gb3 d3 -) (-s e eb4 stacc s gb3 d3 stacc gb3 eb4 a3))) Baritone (setf barsax1 (length-span 8/4 '(s - s s e e - s s t t t t e -q))) (setf barsax2 (ambitus '(c2 gs4) (pitch-figurate '(3 2) (make-omn :pitch (randomize-octaves 'baritone-sax (rnd-order (gen-loop 16 (rnd-row :type :pitch)))) :length (rnd-order (gen-repeat 16 (list barsax1))) :velocity '(f) :articulation (rnd-order (gen-loop 16 '(- - stacc - stacc - - - - stacc stacc)))) :interval '((1 -1) (1 13 -13)) :variant '?))) (setf baritone (assemble-seq theme (sort-asc (subseq barsax2 0 4) :section 0) theme (sort-desc (subseq barsax2 4 12) :section 0) theme)) Contrabass (setf bass1 (length-span 8/4 '(e - s s e e - s s e))) (setf bass2 (ambitus 'bass (pitch-figurate '(1 2) (make-omn :pitch (pitch-transpose -24 (rnd-order (gen-loop 16 (rnd-row :type :pitch)))) :length (rnd-order (gen-repeat 16 (list bass1))) :velocity '(f)) :interval '((1 -1) (1 6 -6)) :variant '?))) (setf contrabass (assemble-seq (pitch-transpose -12 theme) (subseq bass2 0 4) (pitch-transpose -12 theme) (subseq bass2 4 12) (pitch-transpose -12 theme))) Drums (setf hh1 (length-span 8/4 '(-s gs2 ff))) (setf oh1 (length-span 8/4 '(-s - bb2 ff -))) (setf ch1 (length-span 8/4 '(s fs2 ff -))) (setf sn1 (length-span 8/4 '(-e d2 - - a2 - - s = q f2 e))) (setf bd1 (length-span 8/4 '(-s b1 ff e c2 = -e. e = -e. -s))) (setf hh (rnd-order (gen-repeat 18 (list hh1)))) (setf oh (rnd-order (gen-repeat 18 (list oh1)))) (setf ch (rnd-order (gen-repeat 18 (list ch1)))) (setf sn (pitch-figurate '(3 2) (rnd-order (gen-repeat 18 (list sn1))) :interval '(-1 -2 14))) (setf bd (rnd-order (gen-repeat 18 (list bd1)))) Def-Score (def-score trio-atonal (:title "Trio Atonal" :composer "Opmo" :copyright "Copyright © 2015 Opusmodus" :key-signature 'atonal :time-signature '(4 8) :tempo 100 :layout (list (baritone-sax-layout 'baritone) (contrabass-layout 'contrabass :name "Bass" :abbr "Bass"))) (baritone :omn baritone :channel 1 :sound 'gm :program 'Baritone-Sax :volume 100) (contrabass :omn contrabass :channel 2 :sound 'gm :program 'Acoustic-Bass :volume 70) (hh :omn hh :channel 10 :sound 'gm :program 0 :volume 100) (oh :omn oh) (ch :omn oh) (sn :omn sn) (bd :omn bd) ) Trio Atonal.opmo
  25. Here is my study about the klangreihen: (defparameter tempo 60) (defparameter title "Klangreihen Study") ;;; This object takes care of setting and getting of parts (defclass study-score () ((instruments :initarg :instruments :initform 0) (duration :initarg :duration :initform 0) (parts))) ;;; When initializing, fill it with an empty model for parts (array of size N) (defmethod initialize-instance :after ((score study-score) &key) (let ((instruments (slot-value score 'instruments ))) (setf (slot-value score 'parts) (make-array instruments :initial-element '(-w)' :fill-pointer instruments)))) ;;; Getter and setter methods (defun get-part (score n) (elt (slot-value score 'parts) n )) (defun (setf part) (part score n) (let ((previous-value (elt (slot-value score 'parts) n))) (setf (elt (slot-value score 'parts) n) (concatenate 'list previous-value part)))) ;;; Instance of the object (defparameter study (make-instance 'study-score :instruments 16 :duration tempo)) ;;; Main procedure (let* ;; Main local variables ((12tone '(0 2 4 5 7 9 6 8 10 11 1 3)) (variants (list (row-variant 0 'r4 12tone) (row-variant 0 '4 12tone))) (total-parts (slot-value study 'instruments)) (bases (apply #'append (map 'list #'(lambda (v) (klangreihen 0 '(3 3 3 3) v)) variants))) (lengths (subseq (gen-divide total-parts (gen-length (distributive-cube (interference2 '(3 2 2))) 16)) 0 (length bases)))) (loop for base in bases for length in lengths do (labels ;; Local transformative functions ((amount-of (n) (/ 1 (nth n length))) (vel-scale (v) (+ 0.2 (* 0.6 v) )) (vel-format (v) (get-velocity (list v) :type :symbol)) (velocity-for (n) (vel-format (vel-scale (/ (amount-of n) 16)))) (length-for (n) (list (nth n length ))) (octave-of (n) (let ((low-bound (- 12 (* 12 (round (* (/ 1 total-parts) n 3.4) ))))) (list low-bound (+ low-bound 12)))) (pitch-for (n) (let* ((rolled (gen-surround base :size (amount-of n) :start n))) (ambitus (octave-of n) rolled)))) (loop for n from 0 to (- total-parts 1) do (destructuring-bind (&key length pitch velocity) ;; Example of handling on a case-by-case basis. No extra cases configured now. (case n (otherwise (list :length (length-for n) :velocity (velocity-for n) :pitch (pitch-for n) ))) (setf (part study n) (make-omn :length length :pitch pitch :velocity velocity :span :pitch))))))) ;;; Retrieve parts and save score (let ((partnum -1)) (def-score Study (:title title :composer "A. Jacomet" :key-signature 'atonal :time-signature '(4 4) :tempo tempo :layout (string-ensemble-layout '(vn11 vn12 vn13 vn14 vn21 vn22 vn23 vn24) '(vla1 vla2 vla3 vla4) '(vlc1 vlc2) '(ctb1 ctb2))) (vn11 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 1) (vn12 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 2) (vn13 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 3) (vn14 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 4) (vn21 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 5) (vn22 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 6) (vn23 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 7) (vn24 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 8) (vla1 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 9) (vla2 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 11) (vla3 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 12) (vla4 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 13) (vlc1 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 14) (vlc2 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 14) (ctb1 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 15) (ctb2 :omn (get-part study (incf partnum)) :sound 'gm :program 'Acoustic-Grand-Piano :channel 15))) (live-coding-midi (compile-score 'Study)) (display-musicxml 'Study) ;;;--------------------------------------------------------- ;;; ANNOTATION ;;;--------------------------------------------------------- #! This study is about the LISP languages and the possibilities of working with object oriented programming and loops. The first important part of this study is the 'study-score' class defined at the top of the file. (defclass study-score () ((instruments :initarg :instruments :initform 0) (duration :initarg :duration :initform 0) (parts))) On initialization, that object will create and save in one of it's properties, a model of the parts, which is an array of lists. (defmethod initialize-instance :after ((score study-score) &key) (let ((instruments (slot-value score 'instruments ))) (setf (slot-value score 'parts) (make-array instruments :initial-element '(-w)' :fill-pointer instruments)))) It is important to note that this can be extended to an N-dimensional array supporting Parts, Pitches, Velocities, Lengths, and more information. We then define trivial functions that are intended to help in adding and retrieving parts. (defun get-part (score n) (elt (slot-value score 'parts) n )) (defun (setf part) (part score n) (let ((previous-value (elt (slot-value score 'parts) n))) (setf (elt (slot-value score 'parts) n) (concatenate 'list previous-value part)))) This will eventually help keep our program free of code redundancy, and we can adapt the parts in any way we like in a global way. The rest is a simple example of utilizing a klangreihen base and looping over it. The loop starts with a LET clause that sets all the basic parameters: (let* ;; Main local variables ((12tone '(0 2 4 5 7 9 6 8 10 11 1 3)) (variants (list (row-variant 0 'r4 12tone) (row-variant 0 '4 12tone))) (total-parts (slot-value study 'instruments)) (bases (apply #'append (map 'list #'(lambda (v) (klangreihen 0 '(3 3 3 3) v)) variants))) (lengths (subseq (gen-divide total-parts (gen-length (distributive-cube (interference2 '(3 2 2))) 16)) 0 (length bases)))) ..... ) Looping over these global parameters, we start to build our theme sequentially, making all parts for each base. (loop for base in bases for length in lengths do (labels ... )) The LABELS special operator allows us to define local functions for our loop body, that will be helpful in transforming the data. Within it's function body, we have the actual loop that loops over the parts: (loop for n from 0 to (- total-parts 1) ...) The DESTRUCTURING-BIND macro allows us to keep our syntax clean and succint, because we can handle different cases using CASE, while setting Length, Velocity and Pitch, and then in a single line, retrieve those values and use them to set that particular omn in the parts array: (destructuring-bind (&key length pitch velocity) ;; Example of handling on a case-by-case basis. No extra cases configured now. (case n (otherwise (list :length (length-for n) :velocity (velocity-for n) :pitch (pitch-for n) ))) (setf (part study n) (make-omn :length length :pitch pitch :velocity velocity :span :pitch))) !#
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy