Jump to content

Stephane Boussuge

Moderators
  • Posts

    1,072
  • Joined

  • Last visited

Reputation Activity

  1. Like
    Stephane Boussuge reacted to opmo in Opusmodus 1.4 - Counterpoint   
    Upcoming ver. 1.4
    Function: COUNTERPOINT
     


       
     
     
  2. Like
    Stephane Boussuge reacted to opmo in Opusmodus 1.4 - Choralis   
    Upcoming ver. 1.4
    Function: CHORALIS

     
       
     
     

     
  3. Like
    Stephane Boussuge reacted to torstenanders in Negative Harmony Function   
    Just a brief follow-up. While Partch's book is obviously available in English, the other authors all wrote in German. More recent Neo-Riemannian theory is often pretty math-heavy, so also somewhat hard to digest for us composers. To get a taste of these harmonic theories in a highly developed form (with dualism throughout, but that is only one facet) delivered by a practicing composers, you might want to have a look at the recent English translation and discussion of Sigfrid Karg-Elert's book Acoustic Determination of Pitch, Chord and Function from 1930.
     
    Byrne, D. A. (2018) The Harmonic Theories of Sigfrid Karg-Elert: Acoustics, Function, Transformation, Perception. PhD Thesis thesis. University of Cincinnati. Online available (with a somewhat slow download speed) at https://etd.ohiolink.edu/apexprod/rws_olink/r/1501/10?p10_etd_subid=162928&clear=10   Warning: this is not for the faint of heart 🙂   Best, Torsten
  4. Like
    Stephane Boussuge got a reaction from JulioHerrlein in Composing with Piano Reductions   
    look closest-path and relative-closest-path.
     
    S.
  5. Like
    Stephane Boussuge got a reaction from torstenanders in import pitches/chords from midi-file?   
    midi-to-omn will be super useful for me, thanks !
     
    Stéphane
     
  6. Like
    Stephane Boussuge got a reaction from JulioHerrlein in import pitches/chords from midi-file?   
    midi-to-omn will be super useful for me, thanks !
     
    Stéphane
     
  7. Like
    Stephane Boussuge reacted to opmo in import pitches/chords from midi-file?   
    What you are doing Andre is quite bad and unsafe.
    I made already a function for it and it will be part of the next release:
    (setf 000504b "~/Opusmodus/Media/MIDI/Bach/Chorals/000504b_") (midi-to-omn 000504b :instrument 1) => ((-e g4 ff e. b4 s c5 e d5 f4 ab4 g4) (q e4 -s e4 g4 c4 e f4 ab4 ab4 f4) (e db4 db4 - c4 bb4 bb4 db5 c5) (e ab4 ab4 -s c4 f4 g4 e ab4 f4 e. b4 s c5) (q d5 -e g4 c5 a4 e. gb4 s g4) (e g4 d4 -h -e bb4) (e. bb4 s f4 e e g4 ab4 f4 d5 f4) (e eb4 c4 - c4 bb4 s c5 db5 -e c5) (q a4 -e bb4 bb4 g4 eb4 g4) (q ab4 -e eb4 s db5 bb4 e c5 - eb4) (e eb4 bb3 -q. e g4 bb4 eb4) (e ab4 -s f4 e d5 f4 q eb4 -e c4) (e. g4 s a4 bb4 bb4 bb4 c5 q db5 -e c5) (e a4 a4 c5 f4 ab4 ab4 b3 d4) (e f4 f4 - d4 g4 c4 e. b4 s c5) (e c5 g4)) (midi-to-omn 000504b :type :pitch :instrument 2) => ((c5 c5 d5) (eb5 f5 g5) (g5) (g5 f5 eb5 eb5) (d5) (d5) (eb5 f5 g5 g5) (f5 g5 g5) (eb5 f5 g5 g5) (f5 eb5) (g5) (bb5 g5 g5 g5) (f5 f5 f5) (g5 f5 eb5 f5) (d5 c5)) (midi-to-omn 000504b :type :length :instrument 2) => ((-1) (-1/4 1/4 1/4 1/4) (1/4 1/4 1/2) (-3/4 1/4) (1/4 1/4 1/4 1/4) (1/2 -1/2) (-3/4 1/4) (1/4 1/4 1/4 1/4) (1/2 1/4 1/4) (1/4 1/4 1/4 1/4) (1/2 1/4 -1/4) (-3/4 1/4) (1/4 1/4 1/4 1/4) (1/2 1/4 1/4) (1/4 1/4 1/4 1/4) (1/2 1/2)) (midi-to-omn 000504b :type :pitch) => (((g4 b4 c5 d5 f4 ab4 g4) (e4 e4 g4 c4 f4 ab4 ab4 f4) (db4 db4 c4 bb4 bb4 db5 c5) (ab4 ab4 c4 f4 g4 ab4 f4 b4 c5) (d5 g4 c5 a4 gb4 g4) (g4 d4 bb4) (bb4 f4 f4 g4 ab4 f4 d5 f4) (eb4 c4 c4 bb4 c5 db5 c5) (a4 bb4 bb4 g4 eb4 g4) (ab4 eb4 db5 bb4 c5 eb4) (eb4 bb3 g4 bb4 eb4) (ab4 f4 d5 f4 eb4 c4) (g4 a4 bb4 bb4 bb4 c5 db5 c5) (a4 a4 c5 f4 ab4 ab4 b3 d4) (f4 f4 d4 g4 c4 b4 c5) (c5 g4)) ((c5 c5 d5) (eb5 f5 g5) (g5) (g5 f5 eb5 eb5) (d5) (d5) (eb5 f5 g5 g5) (f5 g5 g5) (eb5 f5 g5 g5) (f5 eb5) (g5) (bb5 g5 g5 g5) (f5 f5 f5) (g5 f5 eb5 f5) (d5 c5)) ((b2) (bb2 ab2 f2) (g2 ab2 e2) (d2) (b2 c3) (d3 g2) (d3 b2) (c3 ab3 e3) (eb3 d3 db3) (c3 b2 bb2 a2) (bb2 eb2) (b2 c3) (db3 e2) (eb2 d2) (b2 c3 ab2) (gb2 g2 c2))) (midi-to-omn 000504b) => (((-e g4 ff e. b4 s c5 e d5 f4 ab4 g4) (q e4 -s e4 g4 c4 e f4 ab4 ab4 f4) (e db4 db4 - c4 bb4 bb4 db5 c5) (e ab4 ab4 -s c4 f4 g4 e ab4 f4 e. b4 s c5) (q d5 -e g4 c5 a4 e. gb4 s g4) (e g4 d4 -h -e bb4) (e. bb4 s f4 e e g4 ab4 f4 d5 f4) (e eb4 c4 - c4 bb4 s c5 db5 -e c5) (q a4 -e bb4 bb4 g4 eb4 g4) (q ab4 -e eb4 s db5 bb4 e c5 - eb4) (e eb4 bb3 -q. e g4 bb4 eb4) (e ab4 -s f4 e d5 f4 q eb4 -e c4) (e. g4 s a4 bb4 bb4 bb4 c5 q db5 -e c5) (e a4 a4 c5 f4 ab4 ab4 b3 d4) (e f4 f4 - d4 g4 c4 e. b4 s c5) (e c5 g4)) ((-w) (-q c5 ff c5 d5) (q eb5 f5 h g5) (-h. q g5) (q g5 f5 eb5 eb5) (h d5 -) (-h. q d5) (q eb5 f5 g5 g5) (h f5 q g5 g5) (q eb5 f5 g5 g5) (h f5 q eb5 -) (-h. q g5) (q bb5 g5 g5 g5) (h f5 q q) (q g5 f5 eb5 f5) (h d5 c5)) ((w b2 ff) (h bb2 q ab2 f2) (q g2 ab2 h e2) (w d2) (h b2 c3) (-q d3 h g2) (h d3 b2) (q c3 ab3 h e3) (q eb3 d3 h db3) (q c3 b2 bb2 a2) (-q bb2 h eb2) (h b2 c3) (h db3 e2) (h eb2 d2) (h b2 q c3 ab2) (q gb2 g2 h c2))) (midi-to-omn 000504b :instrument 1 :bars '(1..4)) => ((-e g4 ff e. b4 s c5 e d5 f4 ab4 g4) (q e4 -s e4 g4 c4 e f4 ab4 ab4 f4) (e db4 db4 - c4 bb4 bb4 db5 c5) (e ab4 ab4 -s c4 f4 g4 e ab4 f4 e. b4 s c5)) Janusz
     
  8. Like
    Stephane Boussuge got a reaction from AM in Melody for Flute and Piano   
    Hi,
     
    A short study about some harmonic procedures and unfold set simple usage.
     
       
     
    SB.
     
    Score:
     
    MelodieFlutePiano280819GM.opmo
  9. Like
    Stephane Boussuge reacted to opmo in Stemlets Notation in OMN / XML   
    I agree, stemlets are better representation of the time signature.
    I will ask James if we could add this to our system.
     
  10. Like
    Stephane Boussuge reacted to opmo in Opposite of gen-swallow for functions that add notes like length-divide?   
    Implemented in 1.3.24952
     
  11. Like
    Stephane Boussuge reacted to opmo in Opusmodus 1.3.24952   
    – Function name changes:
    LENGTH-DIVIDE2 to LENGTH-SUBDIVISION
    LENGTH-DIVIDE3 to LENGTH-SYNCOPATE

    – Function update:
    LENGTH-DIVIDE – changes to arguments.
    LENGTH-SUBDIVISION – changes to arguments.
    LENGTH-SYNCOPATE – changes to arguments.
    POLYGON-RHYTHM – enable fixed sides polygon. 

    – Note:
    If you used any of the functions:
    LENGTH-DIVIDE, LENGTH-DIVIDE2 or LENGTH-DIVIDE3 in your scores,
    please check new documents in order to make the necessary correction.

    – New:
    Enable or disable the DO-VERBOSE macro. 
    (defparameter *do-verbose* nil "Enable or disable traces printed by do-verbose.")  
     
    length-divide
    This function is able to divide number of lengths to a given division value. The :set and :ignore option increases the control for the desired result. When processing the omn-form sequence an optional third value allows you to fill intervalic steps (a root transposition) to new length values derived from the divisions.
     
    (setf rhy '(1/4 1/4 1/4 1/4)) (length-divide '(2 2) rhy) => (1/8 1/8 1/4 1/4 1/8 1/8) (length-divide '(2 4) rhy) => (1/4 1/16 1/16 1/16 1/16 1/16 1/16 1/16 1/16 1/4)  
    Example:
    (length-divide '(1 2) '(1/4 -1/8 1/16 1/16 -1/32 -3/32 1/8 1/1) :seed 34) => (1/4 -1/8 1/16 1/32 1/32 -1/32 -3/32 1/8 1)  
    In the example above only 1 length is divided by 2 - that is the 1/16. In the example below 4 lengths are divided by 2.
    (length-divide '(4 2) '(1/4 -1/8 1/16 1/16 -1/32 -3/32 1/8 1/1) :seed 34) => (1/8 1/8 -1/8 1/16 1/32 1/32 -1/32 -3/32 1/16 1/16 1/2 1/2) (length-divide '(1 2) '(1/4 -1/8 1/16 1/16 -1/32 -3/32 1/8 1/1) :set 'min :seed 34) => (1/4 -1/8 1/32 1/32 1/16 -1/32 -3/32 1/8 1) (length-divide '(1 4) '(1/4 -1/8 1/16 1/16 -1/32 -3/32 1/8 1/1) :set 1/8 :seed 34) => (1/4 -1/8 1/16 1/16 -1/32 -3/32 1/32 1/32 1/32 1/32 1) (length-divide '((2 3) (1 2)) '((1/4 -1/8 1/16 1/16) (1/32 -3/32 1/8 1/1)) :ignore 'max :seed 45) => ((1/4 -1/8 1/48 1/48 1/48 1/48 1/48 1/48) (1/64 1/64 -3/32 1/8 1)) (length-divide '((2 4) (1 2)) '((q -e s s) (s -e. e w)) :set 'max :ignore 1 :seed 65) => ((1/16 1/16 1/16 1/16 -1/8 1/16 1/64 1/64 1/64 1/64) (1/16 -3/16 1/16 1/16 1))
    OMN:
    (setf mat1 '(q c4 d4 e4 f4 g4 a4 b4)) (length-divide '(3 4) mat1 :seed 45) => (s d4 bb3 cs4 b3 cs4 eb4 c4 e4 q s g4 e4 eb4 fs4 q g4 a4 b4)
    Symbol 'r will apply repeat function:
    (length-divide '(3 4 r) mat1 :seed 45) => (s c4 c4 c4 c4 d4 d4 d4 d4 q e4 s f4 f4 f4 f4 q g4 a4 b4)
    Here we use a set of interval values at the end of the division list:
    (length-divide '(3 4 (13 0 1 13)) mat1 :seed 45) => (s cs5 c4 cs4 cs5 eb5 d4 eb4 eb5 q e4 s fs5 f4 fs4 fs5 q g4 a4 b4) (setf mat2 '((e c4 p e4 mp g4 he c5 p) (q c4 f c4 cs4 mp - d5 p d5) (q cs5 mf = - - cs5 p =))) (length-divide '((1 4) (2 4) (2 5)) mat2 :seed 34) => ((e c4 p e4 mp t a4 f4 gs4 fs4 he c5 p) (q c4 f s b3 cs4 bb3 d4 q cs4 mp - d5 p s c5 e5 cs5 eb5) (q cs5 mf cs5 - - 5q eb5 p b4 c5 d5 eb5 c5 eb5 b4 d5 c5))
    In the example below we assign three series of division values to variables s1, s2 and s3:
    (setf s1 '(3 4 (6 12 18 24)) s2 '(3 4 ((13 1 13 0) (13 0 7 1) r)) s3 '(2 5 ((13 0 13 0 13) ?)) ) (length-divide (list s1 s2 s3) mat2 :seed 34) => ((e c4 p t bb4 mp e5 bb5 e6 cs5 g5 cs6 g6 et fs5 p c6 fs6 c7) (q c4 f s cs5 cs4 cs5 c4 q cs4 mp - s eb6 p d5 a5 eb5 d5 d5 d5 d5) (5q d6 mf cs5 d6 cs5 d6 q cs5 - - cs5 p 5q d5 eb5 c5 b4 d5))  
     
    length-subdivision
    This function is able to divide a list of lengths into a number of subdivisions derived from a given length segment value. The :type and :position option increases the control for the desired result. When processing the omn-form sequence an optional third value allows you to fill intervalic steps (a root transposition) to new length values derived from the divisions. This function is a more sophisticated version of LENGTH-DIVIDE. It produces fascinating variants on the simplest of note-lengths, as can be seen below.
     
    (setf rhy '(1/4 1/4 1/4 1/4)) (length-subdivision '(2 1/8) rhy) => (1/8 1/8 1/8 1/8 1/8 1/8 1/8 1/8)
    position 's (start):
    (length-subdivision '(2 1/16) rhy :position 's) => (1/16 1/16 1/8 1/16 1/16 1/8 1/16 1/16 1/8 1/16 1/16 1/8)
    position 'e (end):
    (length-subdivision '(2 1/16) rhy :position 'e) => (1/8 1/16 1/16 1/8 1/16 1/16 1/8 1/16 1/16 1/8 1/16 1/16)
    type 'r (rest), position 'e (end):
    (length-subdivision '(2 1/16) rhy :type 'r :position 'e) => (-1/8 1/16 1/16 -1/8 1/16 1/16 -1/8 1/16 1/16 -1/8 1/16 1/16)
    type 'r (rest), position 's (end):
    (length-subdivision '(2 s) rhy :type 'r :position 's) => (1/16 1/16 -1/8 1/16 1/16 -1/8 1/16 1/16 -1/8 1/16 1/16 -1/8)
    type at random, rest or note :
    (length-subdivision '(2 s) rhy :type '? :position 's) => (1/16 1/16 -1/8 1/16 1/16 -1/8 1/16 1/16 -1/8 1/16 1/16 1/8)
    position and type at random:
    (length-subdivision '(1 e) rhy :type '? :position '? :seed 34) => (1/16 1/8 1/16 1/8 1/8 -1/8 1/8 1/8 1/8) (length-subdivision '((2 5q) (1 3q)) rhy :type '? :position 's :seed 34) => (1/20 1/20 3/20 1/12 -1/6 1/20 1/20 3/20 1/12 -1/6) (length-subdivision '((2 5q) (1 3q) (1 e) (1 s)) rhy :seed 34) => (1/20 1/20 3/20 1/12 1/12 1/12 1/8 1/8 3/16 1/16)  
    Example:
    (setf rhy2 '((1/4 1/4 1/4 1/4) (1/4 1/4 1/4 1/4))) (length-subdivision '(1 e) rhy2 :seed 34) => ((1/8 1/8 1/16 1/8 1/16 1/8 1/8 1/8 1/8) (1/16 1/8 1/16 1/8 1/8 1/8 1/8 1/8 1/8)) (length-subdivision '((1 e) (1 3q)) rhy2 :seed 34) => ((1/8 1/8 1/12 1/12 1/12 1/8 1/8 1/6 1/12) (1/16 1/8 1/16 1/6 1/12 1/8 1/8 1/6 1/12)) (length-subdivision '(((1 e)) ((1 3q))) rhy2 :seed 34) => ((1/8 1/8 1/16 1/8 1/16 1/8 1/8 1/8 1/8) (1/12 1/12 1/12 1/6 1/12 1/12 1/6 1/6 1/12)) (length-subdivision '((3 3q) (1 e)) '((q -e e h) (s e. q h)) :seed 65) => ((1/12 1/12 1/12 -1/8 1/8 1/12 1/12 1/12 1/4) (1/16 3/16 1/8 1/8 1/8 1/12 1/12 1/12 1/8)) (length-subdivision '(((3 3q)) ((1 e))) '((q -e e h) (s e. q h)) :seed 65) => ((1/12 1/12 1/12 -1/8 1/8 1/12 1/12 1/12 1/4) (1/16 1/16 1/8 1/16 1/8 1/16 1/8 3/8)) (length-subdivision '(((2 3q)) ((1 e))) '((q -e e h) (s e. q h)) :type '? :seed 65) => ((1/12 1/12 1/12 -1/8 1/8 1/12 1/12 -1/3) (1/16 -1/16 1/8 1/8 1/8 1/8 3/8))
    OMN:
    (setf mat1 '(q c4 d4 e4 f4 g4 a4 b4)) (length-subdivision '(1 e) mat1 :seed 45) => (s cs4 e b3 s d4 e cs4 e4 s f4 e fs4 s d4 e fs4 eb4 f4 a4 bb4 gs4 bb4 a4)
    The symbol 'r (third value) will apply repeat function:
    (length-subdivision '(1 e r) mat1 :seed 45) => (s c4 e s e d4 d4 s e4 e s e f4 f4 g4 g4 a4 a4 b4 b4)
    Here we define the intervals (third value):
    (length-subdivision '(1 e (13 0 13 0)) mat1 :seed 45) => (s cs5 e c4 s cs5 e eb5 d4 s f5 e e4 s f5 e fs5 f4 gs5 g4 bb5 a4 c6 b4) (length-subdivision '(4 s (13 0 13 0)) mat1 :seed 45) => (s cs5 c4 cs5 c4 eb5 d4 eb5 d4 f5 e4 f5 e4 fs5 f4 fs5 f4 gs5 g4 gs5 g4 bb5 a4 bb5 a4 c6 b4 c6 b4) (length-subdivision '(2 3q (13 0 13 0)) mat1 :type '(r n) :seed 45 :position '(e s s s e s s)) => (-3q cs5 c4 eb5 d4 eb5 f5 e4 - fs5 f4 fs5 - gs5 g4 bb5 a4 bb5 c6 b4 -) (setf mat2 '((e c4 p e4 mp g4 he c5 p) (q c4 f c4 cs4 mp - d5 p d5) (q cs5 mf = - - cs5 p =))) (length-subdivision '((1 e (13 0 13 0)) (2 e (13 0 13 0)) (2 3q (13 0 13 0))) mat2 :type '? :seed 34) => ((e c4 p e4 mp g4 q cs6 p e c5 q cs6) (e cs5 f c4 cs5 c4 -3q d5 mp cs4 -q e eb6 p d5 eb6 d5) (-s e cs5 mf -s e d6 cs5 -q - 3e d6 p 3q cs5 d6 3e cs5 e d6 cs5)) (length-subdivision '(((1 e (13 0 13 0))) ((2 s (13 0 13 0))) ((2 3q r))) mat2 :type '? :seed 34) => ((e c4 p e4 mp g4 q cs6 p e c5 q cs6) (e cs5 f s c4 cs5 -e s cs5 c4 e d5 mp s cs4 d5 -q -s eb6 p d5 - eb6 d5 eb6 d5) (3q cs5 mf cs5 cs5 cs5 cs5 cs5 -q - 3q cs5 p cs5 - - cs5 cs5))  
    In the example below we assign three series of values to variables s1, s2 and s3:
    (setf s1 '(2 e (6 12 18 24)) s2 '(1 3q ((13 1 13 0) (13 0 7 1) r)) s3 '(3 5q ((13 0 13 0 13) ?)) ) (length-subdivision (list s1 s2 s3) mat2 :seed 23) => ((e c4 p 3e bb4 mp 3q e5 e cs6 cs5 p cs6 q.) (e fs4 f c5 3q cs5 cs4 cs5 5h mp 5q c4 g4 c4 -q e c4 p c4 3q d5 3h cs4) (e g5 mf cs6 3q d6 3h d5 -q - 5q d6 p cs5 cs5 5h e d6 cs5))  
     
     
    length-syncopate
    The function LENGTH-SYNCOPATE is a valuable way of bringing more rhythmic interest into a length list. The usual idea of syncopating rhythm is to 'choke' certain attacks so that the attack is delayed or pre-empted.
    (setf rhy '(1/4 1/4 1/4 1/4)) (length-syncopate '(1 4) rhy) => (1/4 3/16 1/16 1/4 1/4) (length-syncopate '(2 4) rhy) => (1/16 3/16 1/4 3/16 1/16 1/4)  
    Example:
    (length-syncopate '(1 4) '(1/4 -1/8 1/16 1/16 -1/8 1/8 1/1) :seed 34) => (1/4 -1/8 1/16 1/64 3/64 -1/8 1/8 1)
    In the example above only 1 length is divided by 4 (1, 3) - that is the 1/16. In the example below 2 values are divided by 3: (1, 2) and (2, 1).
    (length-syncopate '(2 3) '(1/4 -1/8 1/16 1/16 -1/8 1/8 1/1) :seed 34) => (1/4 -1/8 1/48 1/24 1/16 -1/8 1/8 2/3 1/3) (length-syncopate '(1 4) '(1/4 -1/8 1/16 1/16 -1/8 1/8 1/1) :set 1/8 :seed 34) => (1/4 -1/8 1/16 1/16 -1/8 1/32 3/32 1)
    Example with :set for each list:
    (length-syncopate '((2 3) (1 4)) '((1/4 -1/8 1/16 1/16) (1/32 -3/32 1/8 1/1)) :set '(min 1/8) :seed 45) => ((1/4 -1/8 1/24 1/48 1/24 1/48) (1/32 -3/32 3/32 1/32 1)) (length-syncopate '((2 3) (1 5)) '((q -e s s) (s -e. q h)) :set 'max :ignore 'h :seed 65 :omn t) => ((3h 3q -e s 3s 3e) (s -e. 5q 5w h))
    OMN:
    (setf mat '(q c4 d4 e4 f4 g4 a4 b4)) (length-syncopate '(3 4) mat :seed 12) => (s b3 e. cs4 q d4 e. fs4 s d4 q f4 g4 a4 e. bb4 s c5)  
    Here we use a set of interval values:
    (length-syncopate '(3 4 ((13 0) (0 14) (1 13))) mat :seed 23) => (s cs5 e. c4 d4 s e5 q e4 f4 s gs4 e. gs5 q a4 b4) (setf mat2 '((e c4 p e4 mp g4 he c5 p) (q c4 f c4 cs4 mp - d5 p d5) (q cs5 mf = - q cs5 stacc p = =)) (length-syncopate '((1 3 (-3 6)) (2 4 (6 0)) (2 5 (11 13))) mat2 :seed 34) => ((e c4 p e4 mp 3e 3q cs5 he c5 p) (q c4 f s fs4 e. c4 q cs4 mp - e. gs5 p s d5 q) (q cs5 mf cs5 - 5w c6 stacc 5q d6 stacc q cs5 p 5q c6 5w d6 q cs5))
     
     
    polygon-rhythm
    In the next three examples below we use a list of fixed polygon sides (non-symmetrical):
    (circle-rhythm-plot (polygon-rhythm '(1 6 10) 16 1) :points 16) To rotate the polygon we change the starting point value:
    (circle-rhythm-plot (polygon-rhythm '(1 6 10) 16 2) :points 16) (circle-rhythm-plot (polygon-rhythm '(0 2 5 7 10 12 13 15 16 18 19 21 23) 24 0) :points 24 :value 1/24)  
    Best wishes,
    JP
  12. Thanks
    Stephane Boussuge got a reaction from JulioHerrlein in Music xml import, convert to Score?   
    That is the main and most important point on the todo list i'm waiting for !
     
    SB.
  13. Like
    Stephane Boussuge reacted to JulioHerrlein in Music xml import, convert to Score?   
    Looking forward to this. Now I´m trying to get some Ravel Piano scores onto OMN to make some tweaks.
  14. Like
    Stephane Boussuge got a reaction from ydepps in Après la pluie Trio   
    Lasse, i write many many unfinished Bits and pieces, and in past almost only that. 
    Long time ago, when speaking with a friend, i said i never finish my piece but i said it was not to important because it was only training, but this friend reply: i understand but finishing a piece is also a training and finishing a piece is a different training than starting a piece....
    From this day and discussion with that friend, i have started to finish some of my pieces :-)
     
    SB.
  15. Like
    Stephane Boussuge got a reaction from JulioHerrlein in replace-map Question   
    May be try substitute map ? or pattern-map ?
     
    S.
  16. Thanks
    Stephane Boussuge got a reaction from opmo in Providing code examples to students   
    The integers are the number of pitch to shift for the offset.
    If chords size parameter is 3, an offset of 1 will keep 2 pitch in common, offset of 2 will keep one pitch etc...
    (gen-chord2 8 3 '(c4 d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 g5 a5 b5) :offset '(0 1 2 3 0 3 2 1)) => (c4d4e4 d4e4f4 f4g4a4 b4c5d5 b4c5d5 e5f5g5 g5a5b5 a5b5c4) The :offset is the shift into the pitch list but related from chord to chord.
    Another example for clarity:
    (gen-chord2 2 3 '(c4 d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 g5 a5 b5) :offset '(1 5)) => (d4e4f4 b4c5d5) SB.
  17. Like
    Stephane Boussuge reacted to opmo in Opposite of gen-swallow for functions that add notes like length-divide?   
    Possible solution to 'fill' the added values:
    :repeat and :ornament
     
    This shouldn't be difficult to implement.
  18. Like
    Stephane Boussuge reacted to torstenanders in Opposite of gen-swallow for functions that add notes like length-divide?   
    The function LENGTH-DIVIDE and friends are a useful device for introducing some rhythmic variation to some material. However, when the processed sequence is a full OMN expression (see example below), then the added notes cause all other parameters to shift forward (additional parameters are added at the end by looping). For introducing only a slight variation to some existing material (e.g., motif) these functions are therefore not so useful, because this shift of all parameters to basically "fill" the new added notes with pitches etc. greatly change the varied material for a listener.
    (length-divide 1 2 '(q f3 leg+m1 q ab3 leg e c4 leg bb3 leg ab3 leg g3))  
    Basically, this is the opposite situation of the situation addressed by swallowing. Swallowing (e.g., with GEN-SWALLOW and the swallow argument of many other functions) avoids the shift of parameters like pitch etc. that would result from removing notes and turning them into rests. For addressing the situation above properly we would need something like the opposite of swallowing, some way to fill in parameters like pitch etc. for new notes to avoid shifting existing notes. I hope my explanation makes sense and you can see why something like the opposite of swallowing would be useful for functions that add notes to some input material.
     
    Now, the tricky question is of course, what parameters (pitch etc.) should be added in such cases. Musically useful and common in the classical literature would be, e.g., repeating the parameters (pitch etc.) of the predecessor note (though that might be a bit too simplistic and annoying at times) or somehow interpolating some pitch gap between the previous and next note with a little scale or arpeggio and only repeating the other parameters like articulations (resulting in some variation that is likely most similar to the input material, so it would be good to have that as an option).  If the pitch interval between the two original notes is too small to add some pitch in between for the new now (or as an option in general for variety), it would also be good  to add some ornamentation (e.g., using PITCH-ORNAMENT), but for a close similarity between the original material and the variation it would be best as an option to apply such ornamentation only to the newly added notes, not all notes. Of course, other options could also be useful for variations that vary the input material a bit more strongly, e.g., some random pitch for the new notes within certain interval bounds.
     
    Does some function that kind of is the opposite of GEN-SWALLOW in that it adds parameters like pitches for subdivided rhythmic values (to avoid the shifting) sound like a good idea?
     
    The idea with the interpolation of gaps could be implemented by turning the original duration values and pitches into some envelope and then reading that envelope with the new rhythmic values. So, that is rather strait forward. However, that would not allow for some ornamentation, because such algorithm would not recognise which notes are new that should be ornamented.
     
    Any other idea perhaps? Thanks! 
  19. Like
    Stephane Boussuge reacted to JulioHerrlein in Polygon1 for Flute, clarinet, bass clarinet and Piano   
    I Love pieces with Scores !! Thank you and congrats for the music, Stephane !
    Sounds great !
    Best,
    Julio
  20. Like
    Stephane Boussuge got a reaction from lviklund in Polygon1 for Flute, clarinet, bass clarinet and Piano   
    Hi, here's a new piece with score.
     
       
     
    All the best to all of the Opusmodus users !
    S.B.
     
    18/07/19 => Small update, missing function added.
     
    PolygonsV1-05-Forum.opmo
    Polygons1-05.mp3
  21. Like
    Stephane Boussuge got a reaction from ydepps in Polygon1 for Flute, clarinet, bass clarinet and Piano   
    Hi, here's a new piece with score.
     
       
     
    All the best to all of the Opusmodus users !
    S.B.
     
    18/07/19 => Small update, missing function added.
     
    PolygonsV1-05-Forum.opmo
    Polygons1-05.mp3
  22. Thanks
    Stephane Boussuge got a reaction from opmo in Polygon1 for Flute, clarinet, bass clarinet and Piano   
    18/07/19 => Small update, missing function added, see above.
    S.B
     
  23. Like
    Stephane Boussuge got a reaction from opmo in Polygon1 for Flute, clarinet, bass clarinet and Piano   
    Hi, here's a new piece with score.
     
       
     
    All the best to all of the Opusmodus users !
    S.B.
     
    18/07/19 => Small update, missing function added.
     
    PolygonsV1-05-Forum.opmo
    Polygons1-05.mp3
  24. Like
    Stephane Boussuge got a reaction from j111 in Logic X 16midiInstrument Template   
    Here is one of my Logic X template for working with Opusmodus.
    16MidiInInstrTemplate.zip
  25. Like
    Stephane Boussuge got a reaction from j111 in Mapcar Study 1 for small ensemble   
    Here's a short study for a small ensemble.
     
       
     
    All the best !
    SB.
     
    Mapcar1.opmo
     
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy