Jump to content

JulioHerrlein

Members
  • Posts

    809
  • Joined

  • Last visited

Posts posted by JulioHerrlein

  1. Great idea, Torsten 

    Very pedagogic example too. 

    Thanks a lot. 

    Im studying a lot of diatonic set Theory now, so  I'm interested  on mod 12 and mod 7 operations. The problem with the diatonic stuff is that is,  in the lingo of Robert Morris, a pitch space with a irregular but periodic division. 

    Best 

    Julio 

  2. I'm thinking about the formal conditions of the diatonic transposition.

    It may seem trivial, but actually is much more difficult than it appears.

    I think that modelling tonality and diatonic stuff is far more difficult

     than  the 12-tone operations.

    One of the things I think is that in diatonic transposition you need to

     inform more to the machine, a kind of axis point or map, because the transposition

     of each degree is going to be different.

    In the case of the diatonic set, the MyHill property assures that each diatonic distance

     will be in exactly 2 sizes. Seconds: major and minor; Thirds: major and minor;

    Fourths: perfect and augmented; Fifths: perfect and diminished and so on...

     

    The Morris pitch spaces are also part of the problem...

     

    Do you have any hint in relation to this intuitions to share ?

    Maybe the way that OM make this operations ?

     

    Best,

     

    Julio

  3. Dear All,

     

    HAPPY 2018 !!

     

    With the new PCS organization in Opusmodus is possible to implement a concept of my book, called Combinatorial Voiceleading of Hexachords.

    From a Hexachord Set, is possible to find 10 different ways to combine the notes in the for of voice-leading sets. Each hexachord is divided in (3 + 3) way.

     

    image.png.77a95c74a95d8bf1d559d9b08c094eac.png

     

    This expression:

     

    (setf hexavl
          (mclist
           (chordize-list
            (integer-to-pitch
             (remove-duplicates
              (sort-asc
               (gen-divide 3 (flatten (permute (pcs '6-32)))))
               :test #'equal)))))

     

    Will result in this combination of the 6-32 hexachord, similar to the idea in the book.

     

    image.png.df5a719581f7a316c6e926d0e6ff9c38.png

     

    In the book, the material is organized in 70 pages of melodic and harmonic exercises.

     

    Here is a litte sample:

    CH_HERRLEIN.pdf

     

    The entire book:

    https://www.melbay.com/Products/Default.aspx?bookid=30042BCDEB

     

    Best !

    Julio Herrlein

  4. I need a function to filter the Permutations.

     

    For example:

     

    (gen-divide 2 (flatten (permute (pcs '4-1))))

     

    Will result in:

     

    ((0 1) (2 3) (0 1) (3 2) (0 2) (1 3) (0 2) (3 1) (0 3) (1 2) (0 3) (2 1) (1 0)
     (2 3) (1 0) (3 2) (1 2) (0 3) (1 2) (3 0) (1 3) (0 2) (1 3) (2 0) (2 0) (1 3)
     (2 0) (3 1) (2 1) (0 3) (2 1) (3 0) (2 3) (0 1) (2 3) (1 0) (3 0) (1 2) (3 0)
     (2 1) (3 1) (0 2) (3 1) (2 0) (3 2) (0 1) (3 2) (1 0))

     

    But I don't mind with the order, since I'll make chords out of it, so

     

    ((0 1) (2 3) or (0 1) (3 2) or (1 0) (2 3)  will result in the same chord.

     

    How to filter the list onto a list where the order does not matter ?

     

    Best,

     

    Julio

     

  5. Janusz suggested a different way for the expression:

     

    (setf voices 3)
    (setf chordstovl2 '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8))
    (setf chordmelo (pitch-melodize chordstovl2))
    (setf intervals (integer-to-interval (modus (pitch-to-midi chordmelo))))
    (setf map (replace-map '((-11 1) (-10 2) (-9 3) (-8 4) (-7 5)
                             (7 -5) (8 -4) (9 -3) (10 -2) (11 -1))
                           intervals))
    (setf vlfinal (integer-to-pitch
                   (modus
                    (interval-to-pitch map :start (car chordmelo)))))
    (setf chordized (mclist (chordize-list (gen-divide voices vlfinal))))
    (chord-closest-path (car chordized) chordized)

     

  6. Parsimonious Voice Leading (again): attempts to provide an algorithm

    In a previous post I deleted, I was trying to find a good way to ensure  the minimal parsimonious Voice-Leading (VL) between a sequence of chords.

    In this post I will try to explain my second attempt.

     

    Let's take a look at a sequence of chords, spreaded out almost in a random way, with no VL

    (setf chordstovl2 '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8)
    image.png.8119f04f427a5e28d603c4233d984bae.png

    Let's specify and evaluate a variable for the number of voices used:

    (setf voices 3)

    Let's try to think the best way to connect this pitches with minimal movement. I will apply the following expression to ensure a better and less ambiguous result when applying the CHORD-CLOSEST-PATH function.

     

    Evaluate voices before

    (setf voices 3)

    Then

    (setf chordized
    (mclist
    (chordize-list
    (gen-divide voices
    (setf vlfinal
    (integer-to-pitch
    (modus
    (interval-to-pitch
    (replace-map '((-11 1) (-10 2) (-9 3) (-8 4) (-7 5) (7 -5) (8 -4) (9 -3)(10 -2)(11 -1))
    (integer-to-interval
    (modus
    (pitch-to-midi
    (setf chordmelo
    (pitch-melodize chordstovl2))))))
    :start (car chordmelo)))))))))
    image.png.c384ecee7241c0568051027a02991388.png

    Please note the use of the replace-map function ensuring that no movement will be greater than a tritone away. This means that a movement like "C to G" (7 semitones) will be convertet in a G to C (5 semitones). This ensure a modulo 12 (octave constraint) reduction of all the material and also a constraint in terms of the size of the movements that will not exceed 6 semitones.

     

    Finally, I will apply the CHORD-CLOSEST-PATH function

    (chord-closest-path (car chordized) (chordize-list (gen-divide voices vlfinal)))
    image.png.858c83b30f9103f794875010d9737692.png

    Hope it help some VL efforts.

     

    Best,

    Julio Herrlein

  7. 18 hours ago, opmo said:

    Achim Bornhoeft and I we had a brain storming session on quantisation here in Venice for two days.

    The code will be ready for testing in few days.

    The holidays might delay the release a bit.

    The test are already very promising :-)

    Looks interesting ! Looking forward ! Best. Merry Xmas, Janusz !

  8. On 10/22/2015 at 5:42 PM, opmo said:

    The first thing you need to do is to create a source file (.opmo or .lisp).
    Give the file a name eg. Custom functions.opmo.
    This file will now be the source file for your functions, make sure the functions are working and that there are no errors.
    Save the file into the ~/Opusmodus/Extensions folder.

     

    The next step is to document the functions that you have created.
    Go to the ~/Opusmodus/System Library folder and create a new folder for example Custom Function.


    This folder is where you will place your (TextEdit) .rtfd system library documents (the best way to create a new document is to copy the contents of one of the System Library’s documents and paste it into the newly created .rtfd file).

     

    Now replace the function name i.e. variables, values etc… with your own examples and documentation. Each function must have its own document. Place the documents into the ~/Opusmodus/System Library/Custom Function folder.

     

    The last step is to create a new file that must be named contents.opmo and place it into the same folder.
    The form of the contents.opmo file should be written as follows:

     

    
    
    ;;; Custom functions
    (foo1 "here you write short note about the foo1 function")
    (foo2 "here you write short note about the foo2 function")


    The next time you start the application you should be able to use and see your function documents in the ’System Library’ utilities panel.

     

    Here is the answer for my last question. Best Julio 

  9. Dear Janusz,

     

    I presume that under each function there is a code that is hidden for the sake of elegance and for practical reasons.

    Actually, when using Opusmodus built-in functions we are working in a "pseudo-code".

    For example, last week André Meier wrote the code below, for tweaking lenghts. This could be transformed

     in a OM built-inl function, in a way that we could not see the entire code, only the call of the function.

    I'm asking where can I see the entire lisp code of the built in functions in order to learn to code my own

     functions, like André and Torsten.

    Best,

    Julio

     

     

    André Meier Function "lenght-staccato"

     

    (defun length-staccato (n alist)
      (let ((newlengths)
            (new-omn (omn-merge-ties (flatten  alist)))
            (time-sign (get-time-signature alist)))
        (progn 
          (setf newlengths (loop for i in (omn :length new-omn)
                             when (> i 0)
                             append (if (= n i)
                                      (list i)
                                      (list n (* -1 (abs (- i n)))))
                             
                             else collect i))
          (if (omn-formp alist)
            (omn-to-time-signature (make-omn :length newlengths
                                             :pitch (omn :pitch new-omn)
                                             :velocity (omn :velocity new-omn)
                                             :articulation (omn :articulation new-omn))
                                   time-sign)
            newlengths))))
    
    
    (length-staccato 1/16 '(q -q q q))
    (length-staccato 1/16 '(q e4 mp q tasto q -q q q))
    (length-staccato 1/16 '((e. c4 eb4 fs4 a4 tie) (s a4 e. cs4 e4 g4 e bb4 tie) (e bb4 e. d4 f4 gs4 s b4)))
  10. 3 hours ago, Stephane Boussuge said:

    Capture d’écran 2017-12-17 à 19.58.01.png

    Hey, Stephane!  Thank you!  Hope you like it. What a lovely combination!  I feel very honored with this picture!  Best! Julio 

     

    added 2 minutes later
    4 hours ago, loopyc said:

    I opted for a 'physical copy', so will have to wait until Dec. 21st...just in time for a Christmas gift to myself ;-)

     

    Thank you, LOOPYC!  It's really cool to have a physical book. Best regards and happy xmas to you!  Best Julio 

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy