Jump to content

Stephane Boussuge

Moderators
  • Posts

    1,054
  • Joined

  • Last visited

Reputation Activity

  1. Like
    Stephane Boussuge reacted to torstenanders in Announcement: work on extending microtonal/xenharmonic music support in progress   
    I am aiming for some state-of-the-art microtonal/xenharmonic support for Opusmodus. Here is a first preview.

    It has been easier than expected to do what I planned when using some unifying ideas proposed by tuning math guys around 20 years ago. The core idea is that just intonation (JI), arbitrary equal temperaments (subdividing the octave or other intervals) and very many other tunings (https://en.xen.wiki/w/Tour_of_Regular_Temperaments ) can all be expressed as regular temperaments. You can find an informal discussion of regular temperaments, its context and motivation -- how it extends/generalises many other tone systems -- at this link: http://x31eq.com/paradigm.html

    Importantly, regular temperaments can all be mapped to JI. Therefore, they can also all by notated by pitch notation capable of notating JI for arbitrary prime limits. So, as a unifying pitch notation for all these temperaments I am using such a JI notation. Many recent JI staff notations (I found so far 5 of them, one highly developed one is http://sagittal.org ) are all based on the same fundamental idea, which I am also using: the traditional pitch nominals (A, B, C...) and the traditional accidentals (sharp, double-sharp, flat...) are denoting Pythagorean tuning (when the notation is read as a JI notation), i.e. they notate all the pitches we can reach when stacking just fifths (plus their octaves).

    We can express this in OMN with our standard pitch notation. Here is a dominant seventh chord, which in a JI interpretation would be tuned in Pythagorean tuning.
    (setf pythagorean-seventh '(h c4e4g4bb4))
    We can play this chord in JI with the new macro def-tempered-score, which does pretty much what the Opusmodus builtin def-score does, but it receives a temperament as one of its arguments. Also, there are multiple MIDI channels specified here, as simultaneous tones are played on different MIDI channels, so they can be tuned individually by pitch bend (I am simply using the def-score tuning argument in the background). Using multiple channels instead of multiple ports is more widely supported by existing MIDI MPE-supporting plugins. 
    (def-tempered-score score-name     (:temperament '11-limit-JI      :time-signature '(4 4))     (instr1     :omn pythagorean-seventh     :channel '(1 2 3 4)         :sound 'gm))
    OK, how about instead of the Pythagorean third we want to use a just major third -- and also a harmonic seventh. All pitches that go beyond Pythagorean tuning are expressed using new JI accidentals that express some microtonal inflection. The core idea of all the above-mentioned JI pitch notations is to introduce a new accidental for every prime limit (https://en.wikipedia.org/wiki/Limit_(music) ) comma (https://en.wikipedia.org/wiki/Comma_(music) ). These different notations mainly differ in what kind of symbols they propose for these commas. 

    When extending OMN by microtonal accidentals, I am restricted to plain ASCII letters and numbers (most of the ASCII special characters are already used for something else, and OMN does also not really support unicode). So, I suggest to use the letter K for denoting that something is a Komma (similar to the Greek kappa, from where the word comma comes -- the letter C is already used for cent values) and then simply complement that letter with the prime of the comma in question. So, the 5-limit comma (syntonic comma, https://en.wikipedia.org/wiki/Syntonic_comma) is notated 5K and the 7-limit comma is 7K. These accidentals raise the pitch by that comma, for a comma flat, put a minus in front of the accidental. So, here is how we can notate and play the just harmonic seventh chord (1K is the natural sign and multiple accidental attributes for a chord are assigned in ascending order of chord tones).
    (setf 7-limit-seventh '(h c4e4g4bb4 1K+-5K+1K+-7K)) (def-tempered-score score-name     (:temperament '11-limit-JI      :time-signature '(4 4))     (instr1     :omn 7-limit-seventh     :channel '(1 2 3 4)         :sound 'gm))
    JI leads to an infinite number of different pitches. Temperaments reduce that number. So, how about we want to play the above chord in, say, 22-tone equal temperament (https://en.xen.wiki/w/22edo ). For that, we only need to define that temperament. Each regular temperament (including equal temperaments and also JI) is specified by only two settings: a small number of generator intervals, and a val for each generator. The vals together specify how each prime (up to the prime limit of the temperament) it is mapped to JI. I will explain these details in a later message and for now simply show the definition of 22-EDO, which is pretty brief. 
    (deftemperament 7-limit-22-EDO    ;; List of vals     (list (list 22         (+ 13 22)         (+ 7 (* 2 22))         (+ 18 (* 2 22))))   ;; List of generators   (list (/ 1200.0 22)))
    Now, we can play the above chord (and any other 7-limit OMN intervals) in 22-EDO.
    (def-tempered-score score-name     (:temperament '7-limit-22-EDO      :time-signature '(4 4))     (instr1     :omn 7-limit-seventh     :channel '(1 2 3 4)         :sound 'gm))
    Similarily, we can define arbitrary other regular temperaments by simply specifying their vals and generators.
     
  2. Thanks
    Stephane Boussuge got a reaction from JulioHerrlein in GHOST INVISIBLE CHARACTER FOR SPAN and LIST Skipping Needed   
    i've experimented a bit with pitch alignment for controlling harmony, here's what I tried. Hope it could help.
    ;;; Pich alignment with binaries ;;; Proof of concept (progn (setf lvl (rnd-sample 8 '(8 12 16))) (setf len1 (euclidean-rhythm lvl 1 12 's)) (setf len2 (euclidean-rhythm lvl 1 12 's)) (setf len3 (euclidean-rhythm lvl 1 12 's)) (setf bin1 (length-to-binary len1)) (setf bin2 (length-to-binary len2)) (setf bin3 (length-to-binary len3)) (setf pch '(c4 d4 e4 f4 g4 a4 b4 c5 b4 a4 g4 f4 e4 d4 c4)) (setf pch1 (binary-map bin1 pch)) (setf pch2 (binary-map bin2 pch)) (setf pch3 (binary-map bin3 pch)) (setf omn1 (make-omn :pitch pch1 :length len1)) (setf omn2 (make-omn :pitch pch2 :length len2)) (setf omn3 (make-omn :pitch pch3 :length len3)) (ps 'gm :fl (list omn1) :fl (list omn2) :fl (list omn3)) ) ;;; Now with intervals (progn (setf lvl (rnd-sample 8 '(8 12 16))) (setf len1 (euclidean-rhythm lvl 1 12 's)) (setf len2 (euclidean-rhythm lvl 1 12 's)) (setf len3 (euclidean-rhythm lvl 1 12 's)) (setf bin1 (length-to-binary len1)) (setf bin2 (length-to-binary len2)) (setf bin3 (length-to-binary len3)) (setf pch '(c4 d4 e4 f4 g4 a4 b4 c5 b4 a4 g4 f4 e4 d4 c4)) (setf pch1 (binary-map bin1 pch)) (setf pch2 (binary-map bin2 (pitch-transpose-n '(-4 -3 -7) pch1))) (setf pch3 (binary-map bin3 (pitch-transpose-n '(-17 -20 -19) pch1))) (setf omn1 (make-omn :pitch pch1 :length len1)) (setf omn2 (make-omn :pitch pch2 :length len2)) (setf omn3 (make-omn :pitch pch3 :length len3)) (ps 'gm :fl (list omn1) :cl (list omn2) :bn (list omn3)) ) ;;; Pitch generation from choral with 7th chords (progn (setf lvl (rnd-sample 8 '(8 12 16))) (setf len1 (euclidean-rhythm lvl 1 12 's)) (setf len2 (euclidean-rhythm lvl 1 12 's)) (setf len3 (euclidean-rhythm lvl 1 12 's)) (setf bin1 (length-to-binary len1)) (setf bin2 (length-to-binary len2)) (setf bin3 (length-to-binary len3)) (setf chords (gen-chord3 '(d3 f3 e3 a3) '((10 16)))) (setf cpch1 (pitch-demix 1 chords)) (setf cpch2 (pitch-demix 2 chords)) (setf cpch3 (pitch-demix 3 chords)) (setf pch1 (binary-map bin1 cpch1)) (setf pch2 (binary-map bin2 cpch2)) (setf pch3 (binary-map bin3 cpch3)) (setf omn1 (make-omn :pitch pch1 :length len1)) (setf omn2 (make-omn :pitch pch2 :length len2)) (setf omn3 (make-omn :pitch pch3 :length len3)) (ps 'gm :fl (list omn1) :cl (list omn2) :bn (list omn3)) ) ;;; Same as above but with chord change only on every bar (progn (setf lvl (rnd-sample 8 '(8 12 16))) (setf len1 (euclidean-rhythm lvl 1 12 's)) (setf len2 (euclidean-rhythm lvl 1 12 's)) (setf len3 (euclidean-rhythm lvl 1 12 's)) (setf bin1 (length-to-binary len1)) (setf bin2 (length-to-binary len2)) (setf bin3 (length-to-binary len3)) (setf chords (gen-chord3 '(d3 f3 e3 a3) '((10 16)))) (setf cpch1 (mclist (pitch-demix 1 chords))) (setf cpch2 (mclist (pitch-demix 2 chords))) (setf cpch3 (mclist (pitch-demix 3 chords))) (setf pch1 (binary-map bin1 cpch1)) (setf pch2 (binary-map bin2 cpch2)) (setf pch3 (binary-map bin3 cpch3)) (setf omn1 (make-omn :pitch pch1 :length len1)) (setf omn2 (make-omn :pitch pch2 :length len2)) (setf omn3 (make-omn :pitch pch3 :length len3)) (ps 'gm :fl (list omn1) :cl (list omn2) :bn (list omn3)) ) SB.
  3. Like
    Stephane Boussuge got a reaction from opmo in GHOST INVISIBLE CHARACTER FOR SPAN and LIST Skipping Needed   
    i've experimented a bit with pitch alignment for controlling harmony, here's what I tried. Hope it could help.
    ;;; Pich alignment with binaries ;;; Proof of concept (progn (setf lvl (rnd-sample 8 '(8 12 16))) (setf len1 (euclidean-rhythm lvl 1 12 's)) (setf len2 (euclidean-rhythm lvl 1 12 's)) (setf len3 (euclidean-rhythm lvl 1 12 's)) (setf bin1 (length-to-binary len1)) (setf bin2 (length-to-binary len2)) (setf bin3 (length-to-binary len3)) (setf pch '(c4 d4 e4 f4 g4 a4 b4 c5 b4 a4 g4 f4 e4 d4 c4)) (setf pch1 (binary-map bin1 pch)) (setf pch2 (binary-map bin2 pch)) (setf pch3 (binary-map bin3 pch)) (setf omn1 (make-omn :pitch pch1 :length len1)) (setf omn2 (make-omn :pitch pch2 :length len2)) (setf omn3 (make-omn :pitch pch3 :length len3)) (ps 'gm :fl (list omn1) :fl (list omn2) :fl (list omn3)) ) ;;; Now with intervals (progn (setf lvl (rnd-sample 8 '(8 12 16))) (setf len1 (euclidean-rhythm lvl 1 12 's)) (setf len2 (euclidean-rhythm lvl 1 12 's)) (setf len3 (euclidean-rhythm lvl 1 12 's)) (setf bin1 (length-to-binary len1)) (setf bin2 (length-to-binary len2)) (setf bin3 (length-to-binary len3)) (setf pch '(c4 d4 e4 f4 g4 a4 b4 c5 b4 a4 g4 f4 e4 d4 c4)) (setf pch1 (binary-map bin1 pch)) (setf pch2 (binary-map bin2 (pitch-transpose-n '(-4 -3 -7) pch1))) (setf pch3 (binary-map bin3 (pitch-transpose-n '(-17 -20 -19) pch1))) (setf omn1 (make-omn :pitch pch1 :length len1)) (setf omn2 (make-omn :pitch pch2 :length len2)) (setf omn3 (make-omn :pitch pch3 :length len3)) (ps 'gm :fl (list omn1) :cl (list omn2) :bn (list omn3)) ) ;;; Pitch generation from choral with 7th chords (progn (setf lvl (rnd-sample 8 '(8 12 16))) (setf len1 (euclidean-rhythm lvl 1 12 's)) (setf len2 (euclidean-rhythm lvl 1 12 's)) (setf len3 (euclidean-rhythm lvl 1 12 's)) (setf bin1 (length-to-binary len1)) (setf bin2 (length-to-binary len2)) (setf bin3 (length-to-binary len3)) (setf chords (gen-chord3 '(d3 f3 e3 a3) '((10 16)))) (setf cpch1 (pitch-demix 1 chords)) (setf cpch2 (pitch-demix 2 chords)) (setf cpch3 (pitch-demix 3 chords)) (setf pch1 (binary-map bin1 cpch1)) (setf pch2 (binary-map bin2 cpch2)) (setf pch3 (binary-map bin3 cpch3)) (setf omn1 (make-omn :pitch pch1 :length len1)) (setf omn2 (make-omn :pitch pch2 :length len2)) (setf omn3 (make-omn :pitch pch3 :length len3)) (ps 'gm :fl (list omn1) :cl (list omn2) :bn (list omn3)) ) ;;; Same as above but with chord change only on every bar (progn (setf lvl (rnd-sample 8 '(8 12 16))) (setf len1 (euclidean-rhythm lvl 1 12 's)) (setf len2 (euclidean-rhythm lvl 1 12 's)) (setf len3 (euclidean-rhythm lvl 1 12 's)) (setf bin1 (length-to-binary len1)) (setf bin2 (length-to-binary len2)) (setf bin3 (length-to-binary len3)) (setf chords (gen-chord3 '(d3 f3 e3 a3) '((10 16)))) (setf cpch1 (mclist (pitch-demix 1 chords))) (setf cpch2 (mclist (pitch-demix 2 chords))) (setf cpch3 (mclist (pitch-demix 3 chords))) (setf pch1 (binary-map bin1 cpch1)) (setf pch2 (binary-map bin2 cpch2)) (setf pch3 (binary-map bin3 cpch3)) (setf omn1 (make-omn :pitch pch1 :length len1)) (setf omn2 (make-omn :pitch pch2 :length len2)) (setf omn3 (make-omn :pitch pch3 :length len3)) (ps 'gm :fl (list omn1) :cl (list omn2) :bn (list omn3)) ) SB.
  4. Like
    Stephane Boussuge reacted to JulioHerrlein in GHOST INVISIBLE CHARACTER FOR SPAN and LIST Skipping Needed   
    There are some comments in portuguese...
    Maybe I´ll do a video about it, later.
    Now, I´m in the process of composition.
    Thanks to the forum where I learned the stuff.
    This is my modest contribution. Hope it can help someone to work out things in Opusmodus.
     
  5. Like
    Stephane Boussuge got a reaction from JulioHerrlein in GHOST INVISIBLE CHARACTER FOR SPAN and LIST Skipping Needed   
    Only Janusz can do such a function but indeed I think something like that could be useful for controlling vertical intervalic harmony between multiple voices coming from and already generated chord canevas and extracted with pitch-demix or similar function.
     
     
    S.
  6. Thanks
    Stephane Boussuge got a reaction from JulioHerrlein in GHOST INVISIBLE CHARACTER FOR SPAN and LIST Skipping Needed   
    What about this:
     
    (setf pitchlist '((c4 d4 e4 f4)(cs4 ds4 as4 fs4)(bb4 eb4 ab4)))
    (setf rhy '((s s s)(s s) nil (s s s)(s s)(s s)))
    (remove-nils (gen-swallow  rhy pitchlist))
    => ((c4 d4 e4) (cs4 ds4) (c4 d4 e4) (cs4 ds4) (bb4 eb4))
  7. Thanks
    Stephane Boussuge got a reaction from JulioHerrlein in Initialize sublists as setf variables   
    Hi Julio,
     
    use assign-variable function.
     
     
    S.
  8. Like
    Stephane Boussuge reacted to torstenanders in Announcement: work on extending microtonal/xenharmonic music support in progress   
    Briefly sharing some news: I started to work on greatly improving Opusmodus' support for microtonal/xenharmonic music. I am aiming for supporting arbitrary equal temperaments (both equal divisions of the octave and other intervals), just intonation (JI) for arbitrary prime limits, and arbitrary regular temperaments (https://en.xen.wiki/w/Tour_of_Regular_Temperaments ). I aim to have this whole tuning universe controlled by a single uniform notation embedded in OMN. Still, I try to keep things relatively clear and simple by introducing only a single actual new accidental symbol, and that symbol will then be combined with numbers (for prime limits) to express arbitrary JI pitches, which are then mapped to all the possible tunings. I also aim for some support for dynamic temperaments, so that the tuning can change during the course of a piece.
     
    Now, this is all claiming rather a lot, and the result may not necessarily be perfect (e.g., controlling a non-octave-repeating equal temperament with a notation suitable for JI is possible and may actually work well for some situations, but is perhaps not to everyones liking). Anyway, I already have some rather solid foundation for all this. Will update you on more details at a later time. 
     
    (Technically, pitch deflections will be expressed by articulations, as I cannot change the underlying OMN pitch format. All this depends of course on getting the cent articulations working properly, but I trust that will be sorted at some stage. 😅)
     
    Best,
    Torsten
  9. Like
    Stephane Boussuge reacted to o_e in Point & click   
    Hi,
    I've never got a feedback to my old thread.
    Now I'am working again with Lilypond and find that 'Point& click' feature again so useful!!
    AFAIK Lilypond is written in scheme which is a lisp derivat, is'nt it, so the chances must be good to implement this..?
     
    best
    ole

  10. Like
    Stephane Boussuge reacted to o_e in COOL !! - Length Diminution with fractions   
    What is also very cool, you can choose for every bar another value 🙂
    (length-diminution '(2/1 1/2 1/3 2/3 3/4) (gen-repeat 5 (list '(q e e e e s s s s))))  

  11. Like
    Stephane Boussuge got a reaction from JulioHerrlein in COOL !! - Length Diminution with fractions   
    Cool indeed !
     
    Thanks for the trick !
     
    S.
  12. Thanks
    Stephane Boussuge got a reaction from erka in Pluton for Orchestra   
    In memoriam Narcis Bonet who was one of my teachers.
     

    Opusmodus score attached.
    SB.
    PlutonV1-02.opmo
  13. Like
    Stephane Boussuge reacted to JulioHerrlein in COOL !! - Length Diminution with fractions   
    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
     
  14. Like
    Stephane Boussuge reacted to foxby in Hô Chi Minh City for chamber ensemble   
    Lovely !
     
  15. Like
    Stephane Boussuge got a reaction from myecholalia in Hô Chi Minh City for chamber ensemble   
  16. Like
    Stephane Boussuge got a reaction from etu in Does Opusmodus come with sample library?   
    I've made a soundest for BBC Symphonic Orchestra Core version but it probably works as well with this one.
     
    You will find it attached to this post.
     
    best
     
    SB.
     
    BBCSO.lisp
  17. Like
    Stephane Boussuge got a reaction from AM in Does Opusmodus come with sample library?   
    I've made a soundest for BBC Symphonic Orchestra Core version but it probably works as well with this one.
     
    You will find it attached to this post.
     
    best
     
    SB.
     
    BBCSO.lisp
  18. Like
    Stephane Boussuge got a reaction from foxby in Does Opusmodus come with sample library?   
    Yes, you need to place the EastWest sound sets file into the ~/Opusmodus/Def-Libraries/Def-Sound-Sets directory.
     
    That's the right place.
     
    The Opusmodus sound-sets (default) are part of the app.
     
    SB.
  19. Like
    Stephane Boussuge got a reaction from foxby in Does Opusmodus come with sample library?   
    Attached to this post, you will find my personal soundsets for EastWest Orchestra gold.
    If you need, I can give to you an online lesson about how to use it.
    Enjoy.
     
    Stéphane
     
    EastWest.zip
  20. Like
    Stephane Boussuge got a reaction from foxby in Does Opusmodus come with sample library?   
    Yes, Opusmodus works very well with Sibelius and NotePerformer, I'm using it that way very often.
    If you use Sibelius as default score editor in your Mac to open musicxml files, you can just use my function (last-score-to-editor) at the end of your file and when you evaluate the Opusmodus script (evaluate-all) , it will open directly into Sibelius.
     
    Attached to this post, the function definition of (last-score-to-editor) to put in your Opusmodus  extensions folder.
     
    Best
     
    Stéphane
     
    last-score-to-editor.lisp
  21. Like
    Stephane Boussuge got a reaction from opmo in Abyss1   
    Recorded LiveCoding improvisation performance.

     
    SB.
  22. Like
    Stephane Boussuge got a reaction from foxby in Hô Chi Minh City for chamber ensemble   
  23. Like
    Stephane Boussuge got a reaction from AM in Hô Chi Minh City for chamber ensemble   
  24. Like
    Stephane Boussuge reacted to AM in L-System   
    one other interesting approach could be, to use l-systems on a "higher level"... (a lot of work to this is already made in OPENMUSIC)
    a sequence like '(a b a c a d a a b a e ...) ;; as a "nonsense-l-system-example-seq"
    could be used as a seq for FUNCTIONS... means:
     
    an input/omn-seq would be transformed by an l-system-function-sequence, for example...
     
    a = rotate pitches and lengths
    b = invert pitches
    c = sample-seq pitches
    d = change velocities
     
    so you could work with more complex input-gestalts... and when you are doing this on a second/third-level inside of such GESTALTS you will have something like this MODEL...
     
    Hypercycle (chemistry) - Wikipedia
    EN.WIKIPEDIA.ORG  
     
    i think HANSPETER KYBURZ is "the MASTER" for L-SYSTEMS in MUSICAL COMPOSITION, and i he talked about this things in his lectures
     
    Details - Hochschule für Musik Hanns Eisler Berlin
    WWW.HFM-BERLIN.DE Hanspeter Kyburz - Wikipedia
    EN.WIKIPEDIA.ORG  
    famous pieces with/on this are:
     
    CELLS
     
     
    or
    PARTS
     
     
     
     
     
    https://www.youtube.com/channel/UCkBcN66Y0mYZ8EJ_ihZvkdg
     
  25. Like
    Stephane Boussuge got a reaction from opmo in Hô Chi Minh City for chamber ensemble   
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy