Jump to content


  • Posts

  • Joined

  • Last visited

Everything posted by JulioHerrlein

  1. Thanks, Stephane ! Yes, I´ve checked gen-swallow. Does not seem to do what I want... The span is already in use for generating the final make-omn expression. But, as far as I understand, the gen-swallow skip items but it produces a result. For example: (gen-swallow '((-1/4 1/4) (-1/4)) '((c4 d4 e4 g4)(cs4 ds4 f4 gs4))) ;;; will result ((d4) nil) This will produce a skip in the first list and results in a NIL for the second list. The nil won´t work as a ghost invisible character for skipping the note or list the way I need. I don´t want a function that produces a result: I want a charachter that means nothing, except for counting as an item of a list and can work inside the span function, instead of a rhythm (like s q h) or a pitch (like c4, d4, etc). As I said, would be much easier to have a "special" character, like the backslash on python, but in this case, a character that counts as an item list, but means nothing musically. I would be used only with the purpose of skipping or introduce "false" items when needed, to keep lists with the same form. Best, Julio Stephane I´m going to check your suggestion, below. Let´s see... Thanks a lot ! Unfortunately, this is not the solution... Thank you !
  2. Dear All, I found a very interesting way to use the span function to my purposes of controlling the harmonic rhythm of my composition. But I need some help. Here is one example: I set pitch lists for each voice of my quartet. Here is an example of how the material is organized for each voice. Each voice for each chord is broken in 16 repeated notes and another 16 notes with some custom made melodic material. The example below corresponds to TWO chords of the harmony. PITCH MATERIAL LISTS The first 16 notes are repeating and the next 16 notes are melodic figures of the same harmony. This is done for all the chords of the composition (setf pitmat '( ;;;first chord material ;16 note repetitions (ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4) ;plus 16 notes of melodic figuration over this first chord (that can be customized to my taste) (b4 e4 gs4 a4 b4 e4 gs4 a4 b4 e4 gs4 a4 b4 e4 gs4 a4) ;;;second chord material ;16 note repeats (bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4 bb4) ;+ 16 notes of melodic figuration (eb5 g4 bb4 gs4 eb5 g4 bb4 gs4 eb5 g4 bb4 gs4 eb5 g4 bb4 gs4))) ;;; and so on, for each chord RHYTHM The rhythm is organized and divided in lists that are used in the span method of the make-omn to skip between: a) the lists with repeated notes and b) the lists with melodic figuration. LIKE THIS (setf rv1 (gen-divide '(5 4) (gen-repeat 1 '(-e q. s s e s s s s)))) In this way I can choose: a) To use chords as repeated notes with the first division of the rhythm, and/or b) to skip to the second reservoir of notes, for melodic ornamentation. This provides a very flexible and musical way to go ! Marvellous... This means that the gen-divide of the rhythm lists are a form of selecting betwen the lists: every division of the rhythm lists (parenthesis) is used to forward to the next pitch list (or next chord of the harmony control). This maintain the coherence of harmony. So, I use the divisions of the rhythm lists to alternate between the lists using the span functions, like this. (setf rv1 (gen-divide '(5 4) (gen-repeat 5 '(-e q. s s e s s s s)))) (make-omn :length rv1 :pitch (span rv1 pitmat) :span :length) It works like a wonder, like this: ((-1/8 3/8 1/16 1/16 1/8) (1/16 1/16 1/16 1/16)) ;;; This rhythm with the ;; And this with the ;;; note repeats of the list ;; melodic figurations The PROBLEM IS : As I said before, each chord of the harmony (pitmat) is comprised of TWO lists First list is a list of 16 note repeats '((ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4 ab4) the next list and 16 notes of melodic figuration (b4 e4 gs4 a4 b4 e4 gs4 a4 b4 e4 gs4 a4 b4 e4 gs4 a4)) This is done for each chord. Each chord have a 32 pitch items (two lists of 16). OK, BUT... Sometimes, I want to use just ONE note of the chord repeating list and ZERO notes for the melodic figuration (i.e., no figuration). In this case I miss one skip of the list... Using ZERO notes will not skip for the next chord that begins with the next 16 items of repeating notes. In this way, my harmony will go out of sync, because the skips of the lists will be different causing a clashing harmony, a "train wreck"... The instruments with melodic figurations will skip differently from the instruments that plays only ONE note of the first repeating notes list. It will become clearer... WHAT I NEED I need an INVISIBLE Symbol, that makes no musical interference in the OMN expression, but counts as an item to make the list skipping in the span, like a GHOST character that count as a rhythm without duration, or a pitch without sound, to act ONLY as a list skipping for the span process. (setf rv1 (gen-divide '(3) (gen-repeat 5 '(-q h %)))) ;;; The symbol " % " (or anything) is a symbol to count in the span of the lists but won´t interfere ;;musically (no rhythm/pitch/attribute meaning in the expression) (make-omn :length rv1 :pitch (span rv1 pitmat) :span :length) A symbol, anything that count as an item for the SPAN of the list that I can put instead of the NIL. It does not need to be a function. A special character is prefereable, to not mess with the OMN expressions... I need some item to make the list skip (in order to get the span of the lists aligned), but this CANNOT be a NOTE or a RHYTHM, just something to SWALLOW one item (but not putting any note or duration) , to skip to the next list (but without playing any pitch or altering any rhythm). I tried to put an articulation there, but I think it wont work in the span process. Hope you can understand it Help greatly appreciated ! BEST ! JULIO
  3. A faster way to pitch-demix. I found that this works faster than the pitch-demix function. Just to offer something... (setf chorale '(a3b3e4ab4 gs3ds4g4bb4 cs3a3b3e4)) (setf chordarray (build-array (sort-desc (melodize (mclist chorale))))) (setf size (get-count chorale)) (setf voice1 (get-array 0 0 size chordarray :direction 'down)) (setf voice2 (get-array 0 1 size chordarray :direction 'down)) (setf voice3 (get-array 0 2 size chordarray :direction 'down)) (setf voice4 (get-array 0 3 size chordarray :direction 'down)) (ps 'gm :sq (list (flatten (list '(q) voice1)) (flatten (list '(q) voice2)) (flatten (list '(q) voice3)) (flatten (list '(q) voice4))) :key-signature 'atonal :time-signature '(4 4) :tempo 90 :title "Colagem Randômica" )
  4. Dear Friends, I have this recurrent problem with lists... Please, help... ;;; I have this TWO lists (setf list1 '(v1rp0 v1rp1 v1rp2 v1rp3 v1rp4) (setf list2 '(melch1-0 melch1-1 melch1-2 melch1-3 melch1-4) ;;;AND ;;; I need a list like this (alternating the list) (v1rp0 melch1-0 v1rp1 melch1-1 v1rp2 melch1-2 v1rp3 melch1-3 v1rp4 melch1-4) How can I proceed ? Thanks a lot Best, Julio (a desperate quarantine composer) OBS. help in combining THREE lists are also greatly appreciated, as well as how to combine parts of the lists. Thank you... my brain is ruined for now (I´m doing something BIG... ) All the best ! Julio
  5. Dear All, It´is possible to initialize sublists all at once as setf variables ? To transform a list like this: ((c4 ds4 e4)(c4 d4 f4)(c4 d4 g4)(cs4 d4 e4)), automatically into a list of setf materials, like v1 = (c4 d4 e4) v2 = (c4 d4 f4) v3 = (c4 d4 g4) v4 = (cs4 d4 e4) OBS.: v1 can be any letter, like p1, p2 or maybe mat1, mat2, etc... Thank you
  6. Dear Janusz, Thank you ! Yes, I noticed it later. But it was not that error. It was the apply eval thing. Thank you !
  7. Apply-Eval is the solution... (apply-eval listmat)
  8. Dear All, I'm searching ways of making lists of lists. I tried all this because I was wanting to call materials from an array, like this: (setf mat1 '(c4 d4 ds7)) (setf mat2 '(d4 e4 c5)) (setf mat3 '(d4 eb4 cs5)) (setf mat4 '(d4 f4 c5)) (setf mat5 '(d4 g4 c5)) (setf mat6 '(d4 a4 c5)) (setf mat7 '(e4 a4 c5)) (setf mat8 '(f4 a4 c5)) (setf mat9 '(g4 a4 c5)) (setf mat10 '(a4 a4 c5)) (setf mat11 '(b4 a4 c5)) (setf array (build-array '((mat0 mat1 mat2 mat3) (mat4 mat5 mat6 mat7) (mat8 mat9 mat10 mat11)))) ;;;GET-ARRAY : (ROW COLUMN SIZE ARRAY &KEY DIRECTION (get-array 0 1 2 array :direction 'down) (setf listmat (get-array 0 1 2 array :direction 'down)) (list listmat) ; this does not work ; the result should be (list mat1 mat5) ((c4 d4 ds7) (d4 g4 c5)) What I did wrong ? Thanks in advance
  9. Yes, the code for notes are massive blocks of information. The ideia is pointing some note in the snippet and highlight the correspondent code. This would be to create some link between codes and snippets. But has to be done in a dynamic form... Maype a too much drastic change in the architeture... This could be an auxiliary/optional way of working out code and XML, but maybe not the principal. Something like this (at 1´28)
  10. Acording to Janusz, Opusmodus is not graphical oriented. This ensure to us a better compatibility to the crazy software policies of Apple computer. Yes, Lilly permits something like this. Maybe it´s possible ithout compromising the ideia of code based stuff. Best !
  11. Looks great, Janusz ! The new functions omn-dictum looks great. I´m going to investigate this. Thank you !
  12. Dear Friends, I´m seriously doing a composition for String Quartet now. I was procastinating it for more than one year, but now I´m really finding good results that could be part of a composition. The question is that I generate some VERY LONG (sometimes 200 bars) of material and, inside this stream I´d like to use ONE or TWO measures of this particular stream, and more 6 measures generated by other process, interpolate some Free material in between, and so on. In general, this is the expression I use to compile each voice of the quartet: vh1 (VL), vh2 (VL2), vh3 (VLA) and vh4 (Cello) (setf vh1 (make-omn :length rv1 :pitch v1 :span :pitch :velocity (length-map len-map2 rv1 :otherwise '(mf) :repeat t) :articulation (length-map len-map1 rv1 :otherwise '(ord) :repeat t))) I do my hacks before this to transform things, but essentialy, I do my 4 make-omn expressions and, after that, I do a PS expression with my STR Quartet VST template using (list vh1 vh2 vh3 vh4). Sometimes I do one or more hacks inside the PS list like pitch-transpose, length-legato to make things more cantabile, length-diminution to vary durations, etc. THE QUESTION: Is there some way to, after I assembled the list for my 4 voices, to pick specific bars or passages i like and reorder and make some assembling to other generated material ? ONE PARTICULAR PROBLEM is that each draft means 4 streams of lists ( String quartet). I´m not wanting to mix bars 1-4 of the 1st violin with bars 123-127 of cello (altought this can be desirable...). I NEED TO TAKE ENTIRE EXCERPTS CONTAINING ALL THE 4 LISTS IN SYNC. How to deal with this massive (to the eyesight) amount of data in LISP lists without getting loose ? It´s not a simple (assemble-seq) operation (I´m aware of it), but some extracting favorite parts / specific bars, maybe setting (setf) this bars as new variables to finally use as assemble-seq in a further final compiling of a movement or a section. I´m saving everything also as musescore files, but I´m avaoiding at all cost to make this manually. I´d like to test as much as possible my sections with this flexibility. Any toughts are very appreciated ! Thank you ! All the best ! Julio
  13. The first that came to mind is Quantize. There is a lot of functions related to Rhythm (type Length for search some) The is also this one, based in my Doctoral Dissertation about rhythm. Best ! Julio
  14. My perfect solution (for Musescore): 1) Export XML (with right notation) 2) Export midi file (with keyswtches) 3) copy the keyswtches from the midi file 4) paste the tracks with the keyswitches alongside with the XML staves with the right notation, adjust the midi channels to the daw. Thats it !! Now the keyswtches are working in the notation software (you may even hide the tracks with the keyswitches in the final version). BEst ! Julio
  15. Thank you, Ole !! Now it works !! Even with PS ! It was the wrong path to the application folder !! GREAT !!!! BEst ! Julio
  16. I´d like to know if this is possible with PS function output and also with the last snippet. Here is the old post (it was before the advent of the marvellous preview score. The ideal situation for me would be call musescore to open the last score, PS or snippet generated. Ole, I got this error, doing your instructions compile-score #<score preview> musicxml-to-editor #<external-process (/usr/bin/open -a /Applications/MuseScore.app ...)[522] (exited : 1) #x3020050EBABD> I put the code you mentioned in extensions folder in the Source Code.lisp file, like this: (defparameter *snippet-clef-default* :treble-down8) (defun last-score-to-musescore () (compile-score *last-score* :output :musicxml :file "temp-last-score") (musicxml-to-editor "temp-last-score" :application "/Applications/MuseScore.app")) Best, Julio
  17. Dear Friends, Is there some way to automatically open XML files from Opusmodus to other application (Musescore, Sibelius) ? Some code to open this (or keyword). Best, Julio
  18. I discovered today that you can use just length-diminution to expand OR contract rhythms, just by using fractions. You can use ti to make some proportional metric modulation stuff. Here are some examples. ORIGINAL (length-diminution 1/1 '(q e e e e s s s s)) CONTRACT (length-diminution 2/1 '(q e e e e s s s s)) EXPAND (length-diminution 1/2 '(q e e e e s s s s)) (length-diminution 1/3 '(q e e e e s s s s)) (length-diminution 3/2 '(q e e e e s s s s)) (length-diminution 3/4 '(q e e e e s s s s)) And so on !! This is cool ! Best, Julio
  19. Just for the record... This way it worked great ! (besides my messy way to build expressions...) I find it easier to read... My mind is messy... (setf vh1 (make-omn :length rv1 :pitch v1 :span :pitch :velocity (length-map len-map2 rv1 :otherwise '(mf) :repeat t) :articulation (length-map len-map1 rv1 :otherwise '(ord) :repeat t)))
  • Create New...

Important Information

Terms of Use Privacy Policy