Jump to content

Blogs

Our community blogs

  1. An important prerequisite for composing music with the aid of computers is that the musical ideas of a composition must be communicated to the computer: OMN provides a notation for music, just as traditional notation does on paper. The immediate question then is: how does OMN work so a composer can express musical ideas? Like traditional notation, OMN expresses musical units such as rhythms and pitches. The 'Introduction to OMN - the Language' explains the four elements, indicating:

     

    length as 'q (quarter),
    pitch as 'c4,
    velocity as mp,
    and articulation trem(olo),

     

    - in that order:

    (q c4 mp trem)

     

    Such a musical unit is expressed between parenthesis to allow a clear distinction between other units:

    ((q c4 mp trem) (q c5 ff fermata))

     

    Clearly, musical units can be sequenced:

    ((s a4 d5 fs4 d5 g4 d5)
     (s a4 d5 fs4 d5 g4 d5)
     (s a4 d5 cs5 b4 a4 g4)
     (s fs4 d4 e4 c4 e d4))

     

    To make OMN (and Lisp) do something for you, you type an expression. An expression is simply a list, starting with an opening parenthesis, followed by an number of symbols and finally closed by a close parenthesis:

    (gen-retrograde '(s a4 d5 fs4 d5 g4 d5))
    => (s d5 g4 d5 fs4 d5 a4)

     

    The expression above is a list. The first element of the list is a function name. The rest of the list are arguments or values to which the function is applied. As Lisp will (try to) evaluate everything you type at it, there must be a way to tell Lisp to take expressions as data. To inform Lisp that you want an expression to be treated as data, quote that expression:

    '((s a4 d5 fs4 d5 g4 d5)
      (s a4 d5 fs4 d5 g4 d5)
      (s a4 d5 cs5 b4 a4 g4)
      (s fs4 d4 e4 c4 e d4))

     

    It is just like a quotation in real life: in case we want to say that Paris is the capital of France, we use the word without quotes, but we do use quotes when saying that "paris" has five letters.

    So, if you want Lisp to see (q c5 ff tr2) as data, let the expression be preceded by a single quote:

    '(q c5 ff tr2)

     

    Now, lets try the expression (gen-integer 12) with and without a quote to see the difference. To do that we need to evaluate our expression. Place the curser after the last closing paranthesis ')' and press 'Enter' key. The evluation will display in the Listener panel.

    (gen-integer 12)    ; returns list of numbers from 0 to 12
    => (0 1 2 3 4 5 6 7 8 9 10 11 12)
    '(gen-integer 12)   ; is a list with 2 values
    => (gen-integer 12)

     

    By the way, an arrow sign (=>) means evaluation, what is written after semicolon is a comment.

     

     

    Here are two functions you will find useful during your work:

     

    Setf

    If you want to process a sequence it is useful to assign that sequence to a variable. SETF allows us to do that. Here the variable is named 'song' and is assigned to a sequence of omn lists:

    (setf song
          '((3e gb6 bb6 db6 gb6 eb6 gb6 db6 gb6 bb5 db6 gb5 bb5)
            (3e gb5 bb5 db5 gb5 eb5 gb5 db5 gb5 bb4 db5 gb4 bb4)
            (3e db4 db5 ab4 db5 ab4 ab5 ab4 ab5 eb5 ab5 eb5 eb6)
            (3e eb5 eb6 ab5 eb6 ab5 ab6 ab5 ab6 db6 ab6 db6 db7)))

     

    After assignment, you can use 'song' to refer to its value.

     

    List

    The function LIST makes lists, as its name says. Lists can have any length, therefore the function LIST takes any number of arguments (data):

    (list '(q c4 mp tr2) '(q c5 f fermata)
          '(q c5 ff tr2) '(q c6 fff fermata))

     

    As we have assigned the variable named song. We might as well use it in our expression.

    (list song song)


     

  2. A simple example based on an All Interval Row for pitch material and euclidean rhythm for Flute rhythmic generation.

    ;; All interval row generation
    (setf row (air 16 :prime :type :pitch))
    ;;; Strings chords
    ;; Chords gen from Air
    (setf chords1 (harmonic-progression
                   '(0 0 0 0 2 2 2 2)
                   row
                   :size 4
                   :step '(1 2 2 1) ;; step throught row
                   :relative t      ;; chords relative path voice leading
                   :seed 8392
                   ))
    
    ;; Strings chords assembly with pitches from chords1 
    ;; and length generation (whole notes '(w) repeated 32 times)
    ;; dynamic = pp
    (setf chords1.omn (filter-tie   ;; tie repeated notes
                       (make-omn
                        :length (gen-repeat 32 '((w)))
                        :pitch chords1
                        :velocity '((pp))
                        )))
    
    ;;; Melody generation for Flute
    ;; Get the length (size) of chords1.omn
    (setf size (length chords1.omn))
    
    ;; Pitch material
    (setf melo1.pmat (rnd-order
                      (melodize
                       (gen-trim
                        size
                        (mclist
                         (harmonic-progression
                          '(0 0 0 0 2 2 2 2)
                          row
                          :size 5
                          :step '(1 2 2 1)
                          ))))))
    
    ;; Melodic generation with euclidean rhythm
    (setf melo1.omn (pitch-transpose
                     12
                     (make-omn
                      :pitch melo1.pmat
                      :length (euclidean-rhythm 
                               (gen-repeat size '(16)) 
                               1
                               12
                               's
                               :type 2
                               )
                      :velocity '((mf))
                      )))
    
    (def-score temp 
               (
                :key-signature 'chromatic 
                :time-signature '(4 4) 
                :composer "Stéphane Boussuge"
                :copyright "Copyright © 2017 s.boussuge"
                :tempo 64
                )
    
    (strings1
     :omn chords1.omn
     :channel 1
     :port 0
     :sound 'gm
     :program 'acoustic-grand-piano
     :controllers (1 (gen-dynamic-controller chords1.omn))
     )
    
    (flute1
     :omn melo1.omn
     :channel 2
     :port 0
     :sound 'gm
     :program 'acoustic-grand-piano
     :controllers (1 (gen-dynamic-controller melo1.omn))
     )
    )

     

    SB.

    AudioOutput.mp3

  3. Bonjour,

     

    Un des particularités d'Opusmodus qui me séduit totalement, c'est de pouvoir explorer des territoires microtonals, et au-delà des habituels quart, huitième, voir seizième de ton, avec des timbres de synthétiseurs virtuels ou hardware de qualité via une station audio numérique (STAN). C'est la possibilité avec une banque comme l'Ircam Solo Instruments d'obtenir des frottements, des glissements de fréquences, de vriller des timbres de trombone virtuel, flûte, clarinette, de les confronter avec des timbres électroniques, de leur faire jouer des hauteurs non tempérées comme du 500 ou 50 Hz, simuler avec des timbres acoustiques une ring modulation ou une modulation de fréquence.

     

    Cela fait des années que je m'intéresse à la microtonalité. J'ai commencé avec les possibilités que m'offrait mon premier synthétiseur hardware l'Ems Synthi Aks, puis j'ai commencé à vouloir comprendre comment calculer une fréquence microtonale précise avec une calculatrice puis avec Open Music afin d'obtenir des listes sur des tempéraments précis. Et à dire vrai, c'est le livre du compositeur Jean-Etienne Marie qui m'a donné les clés, m'a ouvert les portes de la microtonalité avec son ouvrage "L'Homme Musical" (chez Artaud) dans lequel il consacre un très long chapitre à la microtonalité. Avec notamment la publication, en partie, des tables de progression des tempéraments établies par Augusto Novaro pour calculer les fréquences Hz (1). Ces tables sont consultables sur le PDF mis en ligne sur le Net par la Augusto Novato Society dans l'ouvrage Sistema Natural de la Musica (publié en 1951) et dont les "progresiones géométricas" vont du 2e d'octave au 65e d'octave (pages 53 à 58). A ce livre, on peut ajouter "A Natural System of Music, based on the Approximation of Nature", qu'Augusto Novato a publié en 1927. Il explore les ratios concernant les harmoniques, les intervalles et leurs inversions, les notations, les "Geometric progressions" (arithmétiques et géométriques), etc.

     

    A la fin de l'Homme Musical, Jean-Etienne Marie donne dans son lexique où il illustre le terme Tempérament un exemple qui m'a toujours intrigué : "Sur un synthétiseur on peut par exemple obtenir la division en 17 intervalles égaux d'un intervalle de quarte augmentée".

     

    Aujourd'hui, outre la possibilité de calculer les 17 intervalles égaux - ce qui est possible aussi avec une calculette scientifique ou sur celles de nos ordinateurs - avec Opusmodus, ce dernier me permet de pouvoir - enfin - écouter ces 17 intervalles égaux d'une quinte diminuée ou triton comme le montre cette vidéo :

     

     

     

    J'ai commencé à calculer les fréquences Hz (2) avec Open Music pour obtenir leur liste, j'ai reproduit le calcul fréquence par fréquence (2) à partir de la formule que m'avait indiqué Stephane Boussuge tout au début de ma découverte d'Opusmodus puis j'ai effectué les ajustements avec les cents en vérifiant avec le Tuner de ma carte son (Motu 828 mk3) et celui de Studio One l'exactitude des fréquences ajustées par rapport à leur hauteur initiale. Pour ce faire, je me suis créé un petit "utilitaire" avec OPMO qui me permet d'ajuster rapidement chaque hauteur. Au préalable, pour vérifier la souplesse d'OPMO, j'ai inséré plusieurs fréquences non tempérées avant de lire les 17 parties égales de l'intervalle de quarte diminuée mais dans un ordre non ordonné. Les 17 fréquences ont été insérées dans une représentation circulaire où le cercle est divisé et noté en 17 parties égales, avec en regard leur ajustement en cents comme on peut le découvrir dans le début de la vidéo. Il y a trois lectures, la première est effectuée avec Pianoteq 5 et qui respecte les ajustements, la seconde, plus courte est lue avec le Player de Kontakt. Ce dernier filtre les ajustements midi et donc ne tient pas compte des ajustements envoyés par Opusmodus. La troisième lecture conjugue la lecture avec Pianoteq et le player de Kontakt.

     

    Je mets en lien une seconde vidéo et qui est plus classique dans la démarche. Il s'agit de l'ajustement et de la lecture des gammes en quart et huitièmes de ton. En préambule, un calcul est inscrit, il permet de calculer pour un intervalle de quinte (ou un autre) le nombre de quart de ton et de huitième de ton, et non pas comme je l'ai noté le nombre de demi-tons :

     

     

     

    - (1) Le calcul est simple à partir des tables de Novaro, on choisit une progression, disons un 17/31 d'octave - 1,4624 - d'une fréquence n - 261,63 Hz - et on multiplie la progression par la fréquence. Cette progression étant celle obtenue par le calcul 2 ^ (1/31)^17 = 1,4624 soit 1,4624 * 261,63 Hz = 382, 62 Hz.

     

    - (2) J'ai un problème concernant le calcul des fréquences : je n'arrive pas à trouver la solution pour obtenir la liste de l'ensemble des fréquences que je calcule. C'est à dire que je n'arrive pas incrémenter mon calcul à partir des fréquences ou des indices de progression comme je peux le faire avec Open Music. Je suppose qu'il y a une solution et j'aimerais bien la connaître.

    Pour la gamme chromatique, je contourne le problème en convertissant les hauteurs en Hz :

    (setf ListeTC (pitch-to-hertz (make-scale 'c1 85)))
    (setf rowHz (pitch-to-hertz (list row)))

     

    J'ai essayé différents calculs, mais là je tourne en rond...

  • Blog Statistics

    3
    Total Blogs
    16
    Total Entries
×