Jump to content

Stephane Boussuge

Moderators
  • Posts

    1,070
  • Joined

  • Last visited

Everything posted by Stephane Boussuge

  1. I think it is not possible for now. Janusz, any idea about that ? S.
  2. Sometimes we generate some flow of pitch and lengths that we assemble later into OMN material, It can be tiedous to add manually the articulations particularly the "leg" omn instruction, and it can sometimes be useful to have a technique for automated implementation of part of these task, who it will be always possible to edit more precisely thereafter. Below a possible technique based on the recognition and association of patterns of lengths values with articulation instructions. At first, we define a stream of lengths for our phrase: (setf len '(1/8 1/8 1/16 1/16 -1/16 1/8 1/8 1/8 1/8)) and we generate with the help of the function substitute-motif some articulations based on motivic lengths patterns. The substitute-motif will search for motives and will replace this motives by other (in that case, replace by motives of articulation instructions) If the function doesn't find some corresponding motives, it will use the :otherwise clause. (setf artic (substitute-motif '((1/8 1/8)(1/16)) '((leg -)(stacc)) len :otherwise '-)) ;=> (leg - stacc stacc - leg - leg -) We have to process this output now with the function gen-swallow for "swallow" the item corresponding to rest values. (setf artic.swallow (gen-swallow len artic)) => (leg - stacc stacc leg - leg -) Finally, we assemble all the parameters into an OMN stream with the make-omn function: (setf omn (make-omn :pitch '((c4 d4 e4 f4 g4)) :length len :velocity '((f)) :articulation artic.swallow)) Here's a complementary score example: ;;; Length defintion based on euclidean algorithm (setf basery (euclidean-rhythm (rnd-sample 16 '(16 18 24)) 4 16 '1/16 :type 2)) ;;; Apply the search and substitute process on each of the sublists ;;; with mapcar function (setf artic (mapcar (lambda(x) (substitute-motif '((1/16 1/16 1/16 1/16)(1/16 1/16 1/16)(1/16 1/16)(1/8 1/8) (1/4)(1/8) ) ;old '((leg leg leg -)(- - -)(leg -)(leg -) (stacc)(stacc) ) ;new x :otherwise '- )) basery)) ;;;Cleaning with gen-swallow (setf artic.swa (gen-swallow basery artic)) ;;; Pitch generation based on white noise (setf pch (vector-to-pitch '(g3 c5) (gen-white-noise 64))) ;;; Parameters assembly (setf p1.omn (make-omn :pitch pch :length basery :velocity '((f)) :articulation artic.swa )) ;;; Get the times signatures (setf ts (get-time-signature p1.omn)) ;;; Score definition (def-score solo ( :title "solo" :composer "S.Boussuge" :key-signature 'chromatic :time-signature ts :tempo 108 :layout (violin-layout 'violon) ) (violon :omn p1.omn :channel 1 :sound 'gm :program 'violin) ) SB.
  3. Hi, it was also possible without programing with gen-tuplet function: (gen-tuplet 1 1 'm 'n 'w '(1 2 3 4 5 6 7 8 9 10 11 12)) => ((1) (1/2 1/2) (1/3 1/3 1/3) (1/4 1/4 1/4 1/4) (1/5 1/5 1/5 1/5 1/5) (1/6 1/6 1/6 1/6 1/6 1/6) (1/7 1/7 1/7 1/7 1/7 1/7 1/7) (1/8 1/8 1/8 1/8 1/8 1/8 1/8 1/8) (1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9) (1/10 1/10 1/10 1/10 1/10 1/10 1/10 1/10 1/10 1/10) (1/11 1/11 1/11 1/11 1/11 1/11 1/11 1/11 1/11 1/11 1/11) (1/12 1/12 1/12 1/12 1/12 1/12 1/12 1/12 1/12 1/12 1/12 1/12)) SB.
  4. Hi, Attached to this post, you will find an Orchestral template based on the Opusmodus Orchestra Romantic Template. This template is made with some ready to use configuration and parameters, i.e.; you can start to use it immediately for your own composition, just change the parameters, tweak them, explore and experiment. I made this template for help the people who start with Opusmodus and want to have immediate fun with it and want to learn by hacking more than by coding ;-) You also will find attached a possible raw audio example of a possible basic output of the template used in his most basic form (just evaluated and play). SB. ExampleOrchestralSectionMakerTemplate.mp3 OrchlRmtcSectionMk.opmo
  5. Hi, here's 2 piece from the same algorithm slightly modified for the second version. SB.
  6. Hi, this could be a solution: (setf orig '((h c6 mp) (w. f5 pp) (d a4 mp))) (defun prepa (lst) (car (pitch-to-integer (omn :pitch lst)))) ; test of prepa: (prepa '(h c6 mp)) (setf ordered (sort (copy-seq orig) #'< :key #'prepa)) SB.
  7. 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
  8. Hi, here's a piece for small orchestra made with my favorite music software SB.
  9. Here is the solution for use with you DEF-SCORE without MAKE-OMN use. This solution is to use GEN-SWALLOW function: ;;; Notes played in the last 2 bars are not as per this list (setf rhy1 '((-w) (-w) (-w) (-w) (-w) (-w) (1/4 1/4 1/8 1/8 1/4) (1/4 1/4 1/8 1/8 1/4))) (setf m1 (gen-swallow rhy1 '((c4) (e4) (b4) (d5) (g4) (g4) (c5 d4 c5 c5 c5) (a4 d4 a4 e5 a4)))) ;;; Notes played in the 6th and 8th bars are not as per this list (setf rhy2 '((1/4 1/4 1/8 1/8 1/4) (1/4 1/4 1/8 1/8 1/4) (1/4 1/8 -1/8 1/4 1/4) (1/4 1/4 1/8 1/8 1/4) (1/4 1/8 1/8 1/4 1/4) (1/4 1/8 -1/8 1/4 1/4) (1/4 1/4 1/4 1/8 1/8) (1/8 1/8 1/4 -1/8 3/8))) (setf m2 (gen-swallow rhy2 '((c4 g4 c4 f4 f4) (e4 d4 c4 d4 f4) (b4 a4 a4 d5 a4) (d5 d5 g4 g4 g4) (g4 d4 d4 g4 c4) (g4 d4 f4 g4 e4) (c5 e5 a4 c5 d4) (a4 a4 e5 e5 a4)))) (def-score progression-example ( :key-signature 'chromatic :time-signature '(4 4) :tempo 120 ) (instr1 :pitch m1 :length rhy1 :velocity '(f) :channel 1 :sound 'gm :program 'Glockenspiel) (instr2 :pitch m2 :length rhy2 :velocity '(f) :channel 2 :sound 'gm :program 'Flute) ) Best SB
  10. you can also use some 'nil for the list corresponding to the rest lengths. (setf m1 '(nil nil nil nil nil nil (c5 d4 c5 c5 c5) (a4 d4 a4 e5 a4))) (setf rhy1 '((-w) (-w) (-w) (-w) (-w) (-w) (1/4 1/4 1/8 1/8 1/4) (1/4 1/4 1/8 1/8 1/4))) but it is not easy, the :swallow way is the best. What is important to understand is the fact that the system take the pitch one after the other. Anyway, please, use the MAKE-OMN way because it is primary the way Opusmodus was thought and use :omn in DEF-SCORE accordingly. SB
  11. it is normal, it play the notes you give. at the end, the last two bars play C4 and E4 and it is what you supply in m1. it play this pitch because you made rest before, and by the way the system don't need any notes for rest, but when normal rhythm values arrives, it furnish the pitch as given. You can achieve what you want this way: (setf m1 '((c4) (e4) (b4) (d5) (g4) (g4) (c5 d4 c5 c5 c5) (a4 d4 a4 e5 a4))) (setf rhy1 '((-w) (-w) (-w) (-w) (-w) (-w) (1/4 1/4 1/8 1/8 1/4) (1/4 1/4 1/8 1/8 1/4))) (setf m1.omn (make-omn :pitch m1 :length rhy1 :swallow t )) (setf m2 '((c4 g4 c4 f4 f4) (e4 d4 c4 d4 f4) (b4 a4 a4 d5 a4) (d5 d5 g4 g4 g4) (g4 d4 d4 g4 c4) (g4 d4 f4 g4 e4) (c5 e5 a4 c5 d4) (a4 a4 e5 e5 a4))) (setf rhy2 '((1/4 1/4 1/8 1/8 1/4) (1/4 1/4 1/8 1/8 1/4) (1/4 1/8 -1/8 1/4 1/4) (1/4 1/4 1/8 1/8 1/4) (1/4 1/8 1/8 1/4 1/4) (1/4 1/8 -1/8 1/4 1/4) (1/4 1/4 1/4 1/8 1/8) (1/8 1/8 1/4 -1/8 3/8))) (setf m2.omn (make-omn :pitch m2 :length rhy2 :swallow t )) (def-score progression-example ( :key-signature 'chromatic :time-signature '(4 4) :tempo 120 ) (instr1 :omn m1.omn :channel 1 :sound 'gm :program 'Glockenspiel) (instr2 :omn m2.omn :channel 2 :sound 'gm :program 'Flute) ) SB
  12. Hi, here's a small example of a possible way (among many others) for generating n sections of a given size in one def-score. I hope my comments are sufficiently clear ;-) SB. Marimbox.opmo
  13. your observation is true, I just tried to help you with the usage of Opusmodus. Regards SB
  14. generaly we use filter-tie this way: (filter-tie '(e c4 = = = = = = =)) =>(w c4) SB
  15. you can have a look in the (L)ibrary part or the utilities Menu, see attached picture. SB.
  16. Hi, this way for example: (tonality-series (library 'modes 'greece nil :random 4)) SB.
  17. Hi, here's a piece composed in 2015 for two pianos (and two good pianist ;-) SB.
  18. Here is an example of generation of harmonic progression with Opusmodus using chords rules defined with a transition table. The technique presented here uses the concept of tonal degrees, but it is important to note that as you will see later in this article, this concept can be pushed quite far and quite outside the traditional tonal system. First, we define some transition rules from degree to degree: (setf transition '((1 (4 1) (5 1) (6 2)) (2 (5 2) (4 1)) (3 (4 1)) (4 (5 1) (2 1)) (5 (1 3) (6 2) (4 1)) (6 (4 1)) (7 (1 1) (6 1)))) So here is a transition rule saying a 1st degree will be 2 times more likely to be followed by a sixth degree (1 (6 2)) as a 4th or 5th (1 (4 1) (5 1) ). A second degree will be most likely followed by a 5th degree (2 (5 2) than a 4th (2 (4 1)) We define this way all the transition rules for each degree of the scale. We now generate a sequence of degrees we call prog based on these rules with the function GEN-MARKOV-FROM-TRANSITIONS (for more information on Markov chains, you can consult: https://en.wikipedia.org/wiki/Markov_chain ): (setf prog (gen-markov-from-transitions transition :size 24 :start 1)) which can for example give this result: => (1 5 1 4 2 4 2 4 2 5 6 4 5 1 5 6 4 5 1 5 6 4 2 5) Because the function that we'll use to generate chords is based on a numbering starting from zero but our degrees generation is based on a numbering starting from 1, we will subtract 1 to each value of our list prog to able to provide our next function a number list starting from zero. To do this, we use the MAPCAR Lisp function to apply -1 to each value of the list and we store the result in the variable prog.prep. (setf prog.prep (mapcar (lambda(x) (- x 1)) prog)) => (0 4 0 3 1 3 1 3 1 4 5 3 4 0 4 5 3 4 0 4 5 3 1 4) Now we generate chords using the HARMONIC-PROGRESSION function and store the result in the variable named chords: (setf chords (harmonic-progression prog.prep '(d4 major))) The parameters passed to the function are our degrees List prog.prep and a scale with a root base (here d4). Here is the output of this function in notation: Of course, we are not limited to Major and Minor scales, we can use any scale or pitch structure available or generated by Opusmodus, here are some examples: (setf chords (harmonic-progression prog.prep '(d4 messiaen-mode5))) (setf chords (harmonic-progression prog.prep '(c4 acoustic-scale) :root '(d4 f4 g4 e4 bb3))) (setf chords (harmonic-progression prog.prep '(d4e4fs4gs4as4c5ds5) :root '(d4 f4 g4 e4 bb3))) A final example using the keyword :relative enabling a smoother transition between chords with a relative voice leading between chords. (setf chords (harmonic-progression prog.prep '(d4e4fs4gs4as4c5ds5) :root '(d4 f4 g4 e4 bb3) :relative t)) Once these chords generated, you can use them as you want in Opusmodus, map them on musical structures with TONALITY-MAP function or use them as basic materials to create reservoirs of pitch or other kind of pitch material. SB.
  19. Hi, here's a simple example of my use of BINARY-RHYTHM function inspired by the Janusz's doc examples for generating a full movement of a chamber symphonie. The BINARY-RHYTHM function use FIBONACCI stuff and variant optional keyword: (init-seed 839201883) (setf fib1 (fibonacci 4 64)) (setf fib2 (fibonacci 21 81)) (setf fib3 (fibonacci 14 74)) (setf fib4 (fibonacci 32 92)) (setf fib5 (fibonacci 1 61)) (setf rhstruct (rnd-sample 8 '(4 8 16 32 64))) (setf bval '(h h q q e e s s s e s e q e h q h h)) (setf len1 (binary-rhythm rhstruct fib1 bval :type 2 :variant '?)) (setf len2 (binary-rhythm rhstruct fib2 bval :type 2 :variant '?)) (setf len3 (binary-rhythm rhstruct fib3 bval :type 2 :variant '?)) (setf len4 (binary-rhythm rhstruct fib4 bval :type 2 :rotate 18)) (setf len5 (binary-rhythm rhstruct fib5 bval :type 2 :variant '?)) SB.
  20. 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
  21. i like to be able to specify root in arguments because you can specify more than one and it offer some registral possibilities: (harmonic-progression '(0 3 2 4) '(c major) :root '(c4 fs4 g2)) S.
  22. All of us, as Opusmodus users, know the possibility to compose a piece with multiples sections and assemble later. We can use the ASSEMBLE-SEQ function in our piece for assemble some material and sections, but we also can use COMPILE-SCORE with multiple pre-defined scores assembled in one COMPILE-SCORE instruction this way: (compile-score '( score1 score2 score3 etc. ) ) This is a very convenient way for assembling multiple sections as multiple score. i put this instructions in a separate file named COMPILE-SCORE and all other section-score in files named S1, S2, S3.... But when the piece grown, you can have many score files in you workspace navigator to evaluate before compiling the full score. In that case, i add a last file named LoadAll. opmo containing the following instruction for load and read in one time all my section's scores: (mapcar 'load '( "/Users/yourUserName/Opusmodus/Scores/S1.opmo" ;; S1 for section1, s2 for section2 and so on... "/Users/yourUserName/Opusmodus/Scores/S2.opmo" "/Users/yourUserName/Opusmodus/Scores/S3.opmo" "/Users/yourUserName/Opusmodus/Scores/S4.opmo" "/Users/yourUserName/Opusmodus/Scores/S5.opmo" "/Users/yourUserName/Opusmodus/Scores/S6.opmo" "/Users/yourUserName/Opusmodus/Scores/S7.opmo" "/Users/yourUserName/Opusmodus/Scores/S8.opmo" )) Attached to this post, 2 pictures of one of my workspace showing the organisation of the files. SB.
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy