Jump to content

JulioHerrlein

Members
  • Posts

    806
  • Joined

  • Last visited

Posts posted by JulioHerrlein

  1. Dear Cliff, 

     

    Some time ago (round about  22 June 2021), Janusz was developing a chord variation function that was very interesting. I was helping him to adapt it to the drop-voicing function. The drop-voicing function process existent chords while the original Janusz function prototype was more in the generation of chords. 

    Let´s see if Janusz chime in here and see if he remember that.

     

    The function was doing something like this (I don´t have the actual code).

     

    The interesting point related to your post goes like the following.

     

    It could be interesting to have a function similar to the function Janusz was doing below and also a function to

     process chords, doing it´s inversions and also normalizing the inversions putting all of the inversions starting in the same note, like the example in the video called:

    "chords in the inversions transposed on the same bass note" (more or less at 5´40 of the video).

    This can be really useful in the context of Messiaen-like music, especially to generate colorful chords of 5, 6 or 7 notes, to spread it. This full chords are used by Messiaen in orchestrations.

     

    In relation to the colors, if we provide a color for each pitch-class, maybe it´s possible to create a function to generate and calculate an RGB or CMYK code for the chord resultant, like mixing the color of the notes to generate a color code result for pitch classes / chords.

     

    WWW.RAPIDTABLES.COM

    RGB color codes chart, RGB color picker, RGB color table.

     

     

    All the best !

    Julio

     

    
    (chord-drop '(c5 m/maj9)) ;(0 3 7 11 14)
    => (d6b5g5eb5c5 d6g5eb5c5b4 d6b5eb5c5g4 d6eb5c5b4g4 d6eb5c5g4b3
        d6b5g5c5eb4 d6g5c5b4eb4 d6g5c5eb4b3 d6b5c5g4eb4 d6b5c5eb4g3
        d6g5eb5b4c4 d6b5eb5g4c4 d6eb5b4g4c4 d6eb5g4c4b3 d6eb5b4c4g3
        d6g5b4eb4c4 d6g5b4c4eb3 d6eb5g4b3c3) 
    
    (chord-drop '(c5 maj9/s11))
    => (get-count '(fs6d6b5g5e5c5 fs6b5g5e5d5c5 fs6b5g5e5c5d4 fs6d6g5e5c5b4 fs6g5e5d5c5b4
    	fs6g5e5c5b4d4 fs6g5e5c5d4b3 fs6d6b5e5c5g4 fs6b5e5d5c5g4 fs6b5e5c5g4d4
    	fs6d6e5c5b4g4 fs6d6e5c5g4b3 fs6b5e5c5d4g3 fs6d6b5g5c5e4 fs6b5g5d5c5e4
    	fs6b5g5c5e4d4 fs6d6g5c5b4e4 fs6g5d5c5b4e4 fs6g5c5b4e4d4 fs6d6g5c5e4b3
    	fs6g5d5c5e4b3 fs6g5c5e4d4b3 fs6d6b5c5g4e4 fs6b5d5c5g4e4 fs6b5c5g4e4d4
    	fs6d6b5c5e4g3 fs6b5d5c5e4g3 fs6b5c5e4d4g3 fs6b5g5c5d4e3 fs6g5c5b4d4e3
    	fs6g5c5d4b3e3 fs6b5c5g4d4e3 fs6b5c5d4g3e3 fs6d6g5e5b4c4 fs6g5e5d5b4c4
    	fs6g5e5b4d4c4 fs6d6b5e5g4c4 fs6b5e5d5g4c4 fs6b5e5g4d4c4 fs6d6e5b4g4c4
    	fs6d6e5g4c4b3 fs6d6e5b4c4g3 fs6b5g5d5e4c4 fs6d6g5b4e4c4 fs6g5d5b4e4c4
    	fs6g5b4e4d4c4 fs6g5d5e4c4b3 fs6b5d5g4e4c4 fs6b5d5e4c4g3 fs6d6g5b4c4e3
    	fs6g5d5b4c4e3 fs6g5b4d4c4e3 fs6b5d5g4c4e3 fs6d6e5g4b3c3 fs6g5d5e4b3c3
    	fs6b5d5e4g3c3 fs6g5b4d4e3c3))
    
    (chord-variant '(d4 maj7))
    => (d4fs4a4cs5 d4fs4a4cs4 d4fs4a3cs5 d4fs4a3cs4 d4fs3a4cs5 d4fs3a4cs4 d4fs3a3cs5 d4fs3a3cs4)
    
    (chord-variant '(d4 maj7) :root :top)
    => (d4fs4a4cs5 d4fs4a3cs5 d4fs3a4cs5 d4fs3a3cs5 d3fs4a4cs5 d3fs4a3cs5 d3fs3a4cs5 d3fs3a3cs5)
    
    (chord-variant '(d4 maj7) :transpose -1)
    => (d4fs4a4cs5 d4fs4a4c5 d4fs4gs4cs5 d4fs4gs4c5 d4f4a4cs5 d4f4a4c5 d4f4gs4cs5 d4f4gs4c5)
    
    (chord-variant '(d4 maj7) :transpose -1 :root :top)
    => (d4fs4a4cs5 d4fs4gs4cs5 d4f4a4cs5 d4f4gs4cs5 cs4fs4a4cs5 cs4fs4gs4cs5 cs4f4a4cs5 cs4f4gs4cs5)
    
    (chord-variant '(d4 maj7) :root :top)
    => (d4fs4a4cs5 d4fs4a3cs5 d4fs3a4cs5 d4fs3a3cs5 d3fs4a4cs5 d3fs4a3cs5 d3fs3a4cs5 d3fs3a3cs5)

     

  2. Dear Janusz,

     

    Just for testing. When the octave changes, the function give wrong result.

    I´m doing a workaround putting before an (ambitus-octave c4 1

     

    Best,

    Julio

    Maybe it´s better to embed the ambitus constraint in the function or something similar in order to get right results in any octave.

    Since the concept of "pitch class" is octave independent...

  3. Dear Stéphane and Tom

     

    I did some edits in the Stéphane´s code. Some functions had names changed.

     

    Hope it can help.

    Best,

    Julio

     

    ;;;---------------------------------------------------------
    ;;; Parameters
    ;;;---------------------------------------------------------
    
    (setf size 8)
    (setf bars (gen-repeat size '(4/4)))
    (setf pause (length-span bars '(-q)))
    
    (setf ph1.size 8)
    (setf bars (gen-repeat size '(4/4)))
    (setf pause (length-span bars '(-q)))
    
    (setf mode1 '(dorian :root d4))
    (setf ph1.pitch (filter-repeat
                    1
                    (tonality-map
                     mode1
                    (integer-to-pitch
                    (vector-round 
                     0 16 
                     (vector-smooth
                      0.36
                      (gen-white-noise 256 :seed 772)))))))
    
    (setf ph1.len (euclidean-rhythm 
                  (gen-repeat ph1.size '(9))
                  1
                  5
                  1/8
                  :seed 93))
                 ; :binary-to-length t)
                 ; :len-val 'e
                 ; ))
    
    
    ;; Antécédent
    (setf ph1.omn
          (make-omn
           :pitch ph1.pitch
           :length ph1.len
           ))
    
    ;; Conséquent
    (setf ph1b.omn (ambitus
                    '(0 16) (tonality-map mode1 (pitch-variant ph1.omn :variant 'i))))
    
    (setf ph1 (assemble-seq ph1.omn ph1b.omn))
    
    ;; Tintinabuli
    ;; V1
    (setf tint1a.pitchlist '(c4 e4 g4))
    (setf tint1a.pitch (rnd-sample (* ph1.size 4) tint1a.pitchlist))
    (setf tint1a.len (euclidean-rhythm 
                    (gen-repeat (length ph1) '(9))
                    1
                    2
                    1/8
                    :seed 103))
                   ; :binary-to-length t
                   ; :len-val 'e
                   ; ))
    
    (setf tint1a.omn (filter-tie
                    (tonality-map
                    mode1
                    (make-omn
                    :pitch tint1a.pitch
                    :length tint1a.len
                    ))))
    
    (setf tint1a tint1a.omn)
    
    ;; V2
    (setf tint1b.pitchlist '(c3 e3 g3))
    (setf tint1b.pitch (rnd-sample (* ph1.size 4) tint1b.pitchlist))
    (setf tint1b.len (euclidean-rhythm 
                    (gen-repeat (length ph1) '(9))
                    1
                    2
                    1/8
                    :seed 19))
                   ; 1/8))
                   ; :binary-to-length t
                   ; :len-val 'e
                   ; ))
    
    (setf tint1b.omn (filter-tie
                    (tonality-map
                    mode1
                    (make-omn
                    :pitch tint1b.pitch
                    :length tint1b.len
                    ))))
    
    (setf tint1b tint1b.omn)
    
    ;; V3
    (setf tint1c.pitchlist '(c2 e2 g2 c3))
    (setf tint1c.pitch (rnd-sample (* ph1.size 4) tint1c.pitchlist))
    (setf tint1c.len (euclidean-rhythm 
                    (gen-repeat (length ph1) '(9))
                    1
                    2
                    1/8
                    :seed 17662))
                   ; :binary-to-length t
                   ; :len-val 'e
                   ; ))
    
    (setf tint1c.omn (filter-tie
                    (tonality-map
                    mode1
                    (make-omn
                    :pitch tint1c.pitch
                    :length tint1c.len
                    ))))
    
    (setf tint1c tint1c.omn)
    
    
    (setf v1 ph1)
    (setf v2 tint1a)
    (setf v3 tint1b)
    (setf v4 tint1c)
    
    
    ;;;---------------------------------------------------------
    ;;; Score and Layout
    ;;;---------------------------------------------------------
    
    
    (ps 'gm
         :sq 
    (list 
    (pitch-transpose 0 (ambitus 'violin v1)) 
    (pitch-transpose 0 (ambitus 'violin v2)) 
    (pitch-transpose 0 (ambitus 'viola v3)) 
    (pitch-transpose 0 (ambitus 'cello v4))
    )
        :key-signature 'atonal 
        :tempo 90
        :flexible-clef nil 
        :rewrite-lengths nil 
        :accidentals :cautionary
        :merge-rests nil 
    )

     

  4. Dear Tom,

     

    Maybe it would be easier if you specify what kind of "rule" you imagine to implement the sequences.

    After that you could imagine many different ways to put this in movement, like randomizing the notes of the lines, shuffling the lines in a more specific way.

    And how would be the rhythmic and texture treatment ? And the instrumentation / voice layers ?

     

    Best ! 

  5. Dear Friends,

     

    I was revisiting some 12-tone theory today and I found something strange:

     

    This returns NIL

     

    (twelve-tonep '(c3 eb3 d3 f3 e3 g3 fs3 a3 gs3 b3 bb3 cs4))

     

    but this returns TRUE

     

    (twelve-tonep '(c4 eb4 d4 f4 e4 g4 fs4 a4 gs4 b4 bb4 cs4))

     

    It´s the SAME tone-row

     

    NIL for this

    (twelve-tonep (pitch-transpose -12 '(c4 eb4 d4 f4 e4 g4 fs4 a4 gs4 b4 bb4 cs4)))

     

    TRUE for this

     

    (twelve-tonep (pitch-transpose 0 '(c4 eb4 d4 f4 e4 g4 fs4 a4 gs4 b4 bb4 cs4)))

     

    Maybe the algorithm to find the row is based in the c4 octave...

     

    I don´t know...

     

    Best

     

  6. This is a suggestion for a function like

     

    get-bars-beats

     

    to be used in conjunction with get-beats 

     

    ;;;This is an idea to get all the bars and beats from an OMN expression to be used/edited with GEN-BEATS
    
    (progn
    (setf omn-idea (gen-repeat 5 '((q b4 p<f tie+long) (q b4 s d5 mf ord g5 ord c5 ord e. a5 ord s b5 ord e5 ord fs5 ord d5 ord e g5 stacc c5 stacc a5 stacc - b5 stacc q e5 ord) (q gb4 p<f tie+long) (q gb4 s fs5 mf ord cs5 ord gs5 ord e. f5 ord s eb5 ord bb5 ord c5 ord fs5 ord e cs5 stacc gs5 stacc f5 stacc - eb5 stacc q bb5 ord) (q as4 p<f tie+long))))
    
    (setf all-bars 
    (cdr (gen-divide 2 (flatten 
    (matrix-transpose (list
    (gen-divide 1 (gen-repeat (get-count (get-count omn-idea)) '(1)))
    (gen-divide 1 (gen-integer (get-count (get-count omn-idea))))))))))
    
    (setf beats-zerobase 
    (loop for i in 
    (find-everyother 3 (flatten (get-time-signature (gen-divide 1 (get-span omn-idea)))))
     collect (gen-integer i)))
    
    (setf all-beats (gen-divide (get-count beats-zerobase) (loop for i in (flatten beats-zerobase)
    collect (+ 1 i))))
    
    (setf all-bars-n-beats (matrix-transpose (list all-bars all-beats)))
    )

     

    The result is this

     

    (((1 1) (1 2)) ((1 2) (1 2 3 4 5 6 7 8)) ((1 3) (1 2)) ((1 4) (1 2 3 4 5 6 7 8)) ((1 5) (1 2)) ((1 6) (1 2 3 4 5 6 7 8)) ((1 7) (1 2)) ((1 😎 (1 2 3 4 5 6 7 8)) ((1 9) (1 2)) ((1 10) (1 2 3 4 5 6 7 8)) ((1 11) (1 2)) ((1 12) (1 2 3 4 5 6 7 8)) ((1 13) (1 2)) ((1 14) (1 2 3 4 5 6 7 8)) ((1 15) (1 2)) ((1 16) (1 2 3 4 5 6 7 8)) ((1 17) (1 2)) ((1 18) (1 2 3 4 5 6 7 8)) ((1 19) (1 2)) ((1 20) (1 2 3 4 5 6 7 8)) ((1 21) (1 2)))
     

    Not yet appropriate to use in GET-BEATS, but close...

     

    All this could be made inside one function, to extract, bars and beats in the form of GET-BEATS function.

     

    Best,

    Julio

  7. Dear friends, 

    A LISP question...

     

    ;;; Dear Friends,
    
    ; LISP question for using with get-beats
    
    ;;; voice and bar list
    ((1 1) (1 2) (1 3) (1 4) (1 5)) 
    ;;; beats 
    ((1 2) (1 2 3 4 5 6 7 8) (1 2) (1 2 3 4 5 6 7 8) (1 2))
    
    ;;; matrix result
    (matrix-transpose '(((1 1) (1 2) (1 3) (1 4) (1 5)) ((1 2) (1 2 3 4 5 6 7 8) (1 2) (1 2 3 4 5 6 7 8) (1 2))))
    
    ;;; desired result to use in gen-beats
    
    ((1 1 (1 2)) (1 2 (1 2 3 4 5 6 7 8)) (1 3 (1 2)) (1 4 (1 2 3 4 5 6 7 8)) (1 5 (1 2)))
    
    ;;; how can I achieve the last result in LISP ? That kind of list, like (x x ( y z)) kind of list ?
    
    ;;; Best !

     

    Summarizing...

     

    How to transform this

     

    (((1 1) (1)) ((1 2) (1 3 5 7)) ((1 3) (1)) ((1 4) (1 3 5 7)))

     

    into this

     

    ((1 1 (1)) ((1 2 (1 3 5 7)) ((1 3 (1)) ((1 4 (1 3 5 7))

     

    How is the name of this type of list ?

     

    Best !

  8. Dear friends,

     

    Is there a way to use the rnd-beat-order function but specifying a list of beats ? The get-beats is the way in this case ? Or there is such a function like beat-order ? or maybe a space for determining the order inside the rnd-beat-order function ? In negative case, I´ll use the get-beats for doing this.

     

    All the best !

    Julio

  9. Dear Friends , 

     

    I have this question regarding Get-Beats Function.

     

    All the best !

    Julio

     

    ;;; THIS WORKS !
    
    (setf omn-forum '((h b4 s d5 mf ord g5 ord c5 ord e. a5 ord s b5 ord e5 ord fs5 ord d5 ord e g5 f stacc c5 stacc a5 stacc - b5 stacc q e5 mf ord)(h bb4 s d5 mf ord gb5 ord c5 ord e. ab5 ord s b5 ord e5 ord fs5 ord d5 ord e g5 f stacc c5 stacc a5 stacc - b5 stacc q eb5 mf ord))
    
    (get-beats '(
    (1 1 (1 2 4 7 5 8 6 3)) 
    (1 2 (1 2 4 4 4 7 6 3))) 
    omn-forum)
    
    ;;; But THIS WON´T WORK - Why ?
    
    (setf bts (rnd-unique 8 '(4 7 5 8 3 6 1 2)))
    
    (get-beats '(
    (list 1 1 bts) 
    (1 2 (1 2 4 4 4 7 6 3))) 
    omn-forum)

     

  10. I noticed some differences in the new interface of the workspaces, specially in the way ver 3 deals with the files pinned at the workspace. You can drag your .opmo files onto the workspace from finder but beware of doing it !   The new workspace will create a special folder and the opmo files will be moved to this new workspace folder and no longer appear in a previous workspace. Seems like you can´t share the same .opmo file in two different workspaces. This makes sense but is different from what occurred before. I also deleted a file because I just wanted to remove / unpin it from the workspace, but it ended being removed from hard disk !! So, be careful when reorganizing your new workspaces. I can´t make folders anymore in the workspace (but in the older version, the folders weren´t searchables) . It was difficult to locate something under a folder. Maybe could be interesting to sort the files of the workspace not only in alphabetical order, but also by date of creation / modification.

     

    This automatic management of folders and workspaces is very nice but the user must have this behavior in mind while working the files.

     

    All the best ! Happy 2023 !

  11. Yes. Sometimes, pdf files are arranged in some way it jumps the lines in a strange way, due to the presence of diferent elements, such as images. It happens in other files, like LIPS tutorials, etc. But probably there is a workaround for the next set of documentation, since it not happens in all the files. All the best ! Thank you.

  12. Dear Friends,

     

    In many PDF documentation items I found some trouble when copying it from assistant to composer section.

    Probably due to line breaking formatting, the code sometimes is copied with incomplete lines mixing with complete lines.

    When copying this:

     

    image.png.8a57ee9e28e9b6041208d6800a9c9f65.png

     

    I get this:

     

    (setf omn '(e g6 f stacc e ab5 (omn-replace :length 'q omn)
    => (q g6 f stacc ab5 mp ten c4 (omn-replace :pitch 'c5 omn)
    => (e c5 f stacc mp ten mf ten (omn-replace :velocity 'p omn)
    mp ten e c4 mf ten e cs5 ff))
    mf ten cs5 ff)
    ff)
    => (e g6 p stacc ab5 ten c4 ten cs5) (omn-replace :articulation 'tasto omn)
    => (e g6 f tasto ab5 mp tasto c4 mf tasto cs5 ff tasto)

     

    with different line breaks.

     

    All the best !

    Julio

  13. On 12/17/2022 at 5:15 AM, Pli said:

    Haha I have been contemplating getting a MacBook+opusmodus, Vs wait for the windows version!

    I hope the win version will come quickly 🤞

    I use with VMware running Catalina now (before it was the old El Capitan), but looking forward to get rid of all that and use it directly in Windows. Since it´s all Lispworks, I think it will look identical or very similar in Windows. Best !

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy