Jump to content

Blogs

 

Simple algorithmic example Strings + Flute

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

Stephane Boussuge

Stephane Boussuge

 

Short example of tendency masking

Tendency masking is first described by the composer G.M. Koenig. It is a random selection between two envelope based boundaries. I have tried to reproduce here this technique for pitch and length selection in a very simple way. ;;; First, boundary description (setf highb (gen-palindrome '(6 6 6 7 8 8 9 10 10 11 12 13 14 15 16 16 16))) (setf lowb (gen-palindrome '(6 6 6 5 4 4 3 3 3 2 2 2 2 1 1 1 1))) ;;; Plotting (list-plot (list highb lowb) :join-points t) ;;; Random pitch selection between boundary (setf pitch (integer-to-pitch (mapcar (lambda (x y) (rnd-range x y)) highb lowb))) ;;; Random length selection between boundary (setf len (vector-to-length '1/16 1 8 (mapcar (lambda(x y) (rnd-range x y)) highb lowb))) ;;; OMN Assembly (setf phrase (make-omn :pitch pitch :length len)) SB.

Stephane Boussuge

Stephane Boussuge

 

Patterns replacement

Patterns finding and replacement can be very useful when composing. For example, we may want to replace some unwanted motive in a melody, or we may want to generate articulation or velocity based on some patterns of length or pitch. Another use is to compose a new section based on and old one with patterns replacement from old to new etc, etc... the possibility are naturally endless.   I propose here a function named motive-replace who are able to execute this task. This function is not in a "good" Lisp but works for me and i hope it can be useful for other users. Naturally, if you can improve this function, i invite you to share your thoughts on this blog. First, we define some utility function, starting with a function for find one motive and replace it: (defun one-motive-replace (old new mat) (flatten (loop for idx from 0 to (-(length mat)1) collect (if (equal (loop for i from 0 to (-(length old)1) collect (nth (+ idx i) mat)) old) (and (setf idx (+ idx (-(length old)1))) new) (nth idx mat))))) #|Usage (one-motive-replace '(a b c) '(1 2 3) '(d b s a b c e j g)) => (d b s 1 2 3 e j g) (one-motive-replace '(a b c) '(1 2) '(d b s a b c e j g)) => (d b s 1 2 e j g) |#   Now, we define a function able to find and replace multiple motives: (defparameter *res* '()) (defun multi-motives-replace (oldlist newlist mat) (cond ((null oldlist) '()) (t (setf *res* (one-motive-replace (car oldlist) (car newlist) mat)) (multi-motives-replace (cdr oldlist) (cdr newlist) *res*))) *res*) #|Usage (multi-motives-replace '((a b c) (e j)) '((1 2 3) (8 9)) '(d b s a b c e j g)) => (d b s 1 2 3 8 9 g) |#   And finally we define the final function for motivic-replacement who choose between one or multiple motif replace functions based on the list predicate of the first parameter: (defun motive-replace (old new mat) "motive-replace will find an exact motive (old) in a list and will replace it by a new one (new). Note: It is not pattern matching but can be useful." (do-verbose ("motive-replace") (if (listp (car new)) (multi-motives-replace old new mat) (one-motive-replace old new mat)))) #|Usage (motive-replace '(a b c) '(1 2 3) '(d b s a b c e j g)) => (d b s 1 2 3 e j g) (motive-replace '(a b c) '(1 2) '(d b s a b c e j g)) => (d b s 1 2 e j g) (motive-replace '((a b c) (e j)) '((1 2 3) (8 9)) '(d b s a b c e j g)) => (d b s 1 2 3 8 9 g) |# SB.

Stephane Boussuge

Stephane Boussuge

 

Opusmodus & microtonalité

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...

Deb76

Deb76

 

Découverte d'Opusmodus : opérations dodécaphoniques, analyse et Set theory

Bonjour,   je commence à maîtriser quelque peu Opusmodus sur certains aspects et jour après jour je me rends compte de la puissance de cet outil qui conjugue autant la création de A à Z, en partant d'une page blanche avec en final une partition enrichie avec notamment les nuances, les articulations, et dans un affichage plus que satisfaisant, avec des flux midi envoyés dans une STAN (station audio numérique) et sur lesquels chaque note, chaque hauteur peut-être ajustée dans son placement panoramique très précisément, tout comme d'ailleurs les ajustements microtonals tempérés ou non dans des synthés virtuels, banques d'instruments ou synthés hardware. Bref, c'est un superbe outil de création qui permet d'explorer diverses possibilités musicales avec toute la puissance de la CAO , et avec une notation pas si complexe que ça (notation américaine entre autres, mais aussi en entiers (intégers) et intervalles, durées similaires aux raccourcis des éditeurs de partitions (w, h, q, e, s, t, etc.), la partition exportable en midi et XML. Et très clairement, pour ce que j'en découvre tous les jours, on en fait ce qu'on en veut, de la simple saisie d'exemples dans un ouvrage théorique à la des opérations extrêmes au niveau des manipulations sur le matériau musical. C'est l'éditeur "Logic" de Cubase en plus simple en utilisation mais en puissance 10.000. En fait, via le script c'est la liberté totale de créer et a priori sans beaucoup de contrainte.   Mais c'est aussi un outil d'analyse avec notamment les outils implantés de la Set Theory - et dont Janusz Podrazik est un expert en Lisp - et qui permettent d'illustrer les segmentations, les exemples avec une série de graphiques. Pour des musiciens comme moi qui n'ont pas effectué de cursus en conservatoire, qui n'ont pas suivi de classes d'analyse et d'écriture, cette série d'outils implantés dans Opusmodus permet d'entrer, d'analyser la structure de la musique atonale notamment. Cette facilité de pouvoir segmenter une phrase, d'en extirper son ADN via une fonction comme pcs-analysis, est vraiment un plus. En tout cas pour moi.   J'ai créé un premier PDF - d'autres suivront sur d'autres spécificités, d'autres thèmes - intitulé "Découverte d'Opusmodus : opérations dodécaphoniques et Set Theory dans l'idée de démontrer que somme toute la prise en main d'Opusmodus n'est pas si complexe que ça. En tout cas, c'est indéniablement un outil de création, d'analyse et surtout qui laisse la part belle à l'imagination et quasiment sans contrainte, sinon que celle la maîtrise, de la connaissance d'OPMO. Mais c'est bien. Pour ma part, tous les jours je découvre de nouvelles possibilités, de nouvelles pistes à explorer.   http://www.deb8076.eu/CAO/Pdf/DecouverteOpusmodus.pdf

Deb76

Deb76

 

Quelques bases concernant l'usage du système de Tonalité d'Opusmodus.

L'utilisation des tonalités est basée sur quelques principes, le plus important étant que: si vous voulez appliquer plusieurs tonalités, il faut les appliquer à plusieurs listes sinon, Opusmodus vous renverra un signal d'erreur. Par exemple, pour appliquer '((major) (natural-minor)) il faut au moins 2 listes à traiter: (setf ex1 (tonality-map '((pentatonic)(natural-minor)) '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4))))   vous pouvez également spécifier des paramètres de tonalité directement au niveau de la tonalité: (setf ex2 (tonality-map '((pentatonic :root f4) (natural-minor :root e5)) '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4))))   vous pouvez utiliser à peu près n'importe quoi comme tonalité: (setf ex3 (tonality-map '((d4e4f4G4a4b4c5) (f4g4ab4c5d5e5)) '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4)))) (setf ex4 (tonality-map '(((0 1 2 4 5 7 8)) ((0 2 3 6 7 11))) '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4)))) (setf ex5 (tonality-map '(((f mb5)) ((d maj7))) '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4))))   Maintenant tonalité et bibliothèques: J'utilise la fonction MCLIST (mapcar 'list) devant LIBRARY pour "parentheser" la sortie, car comme vous avez pu le constater dans mes exemples au dessus, TONALITY-MAP à besoin de tonalités entre parenthèses. (setf ex6 (tonality-map (mclist (library 'modes 'minor nil :random 3)) '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4))))   Maintenant, nous allons utiliser TONALITY-SERIES qui sert à "préparer" des suites de tonalité et qui simplifie beaucoup le travail des parenthèses ;-) Préparation de la structure harmonique (setf ex7-path (tonality-series (library 'modes 'minor nil :random 3)))   Application de la structure: (setf ex7-path (tonality-map ex7-path '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4))))   Autre exemple: Préparation de la structure harmonique (setf ex8-path (tonality-series '(d4f4g4a4c5 e4gs4as4c5d5)))   Application de la structure: (setf ex7-path (tonality-map ex8-path '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4))))   Autre exemple: préparation de la structure harmonique (setf ex9-path (tonality-series '((c m) (f maj))))   Application de la structure: (setf ex9-path (tonality-map ex9-path '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4))))   Autre exemple: Préparation de la structure harmonique (setf ex10-path (tonality-series '(pentatonic dorian) :root '(d4 g4) :closest 'down))   Application de la structure: (setf ex10-path (tonality-map ex10-path '((c4 d4 e4 f4 g4) (c4 d4 e4 f4 g4))))   Voila, ce ne sont que quelques exemples très basiques mais qui, je l'espère, pourrons vous éclairer un peu sur l'usage de tonality-.... dans Opusmodus. SB.

Stephane Boussuge

Stephane Boussuge

 

Génération de structures de hauteurs à partir d'une série avec gen-chord2

La fonction GEN-CHORD2 d'Opusmodus peut se révéler très utile pour la génération de structures harmoniques.     En voici un petit exemple. Nous commençons par générer une série qui nous servira de base pour la génération de nos accords. (setf row (rnd-row :type :pitch))   Voici pour commencer l'utilisation la plus simple de gen-chord2. Quand le paramètre :offset n'est pas précisé la fonction déplace la fenêtre dans la série du nombre de pas correspondant au parametre taille (size) de l'accord. (setf chords1 (gen-chord2 8 4 row))   Voici maintenant un exemple avec l'utilisation de :offset pour garder des notes communes entre les accords. Un offset de '(2 3) aura pour effet de conserver sur des accords de 4 sons, 1 et 2 notes commune alternativement, permettant ainsi une transition plus douce d'accord en accord. La fonction commence par effectuer un offset (déplacement de la fenetre) de 2 dans la série et génère un accord de 4 sons puis se déplace de 1 dans la série, ressort l'accord de 4 sons correspondant à sa position et ainsi de suite. (setf chords2 (gen-chord2 8 4 row :offset '(2 3)))   Utilisation des transpositions. Même chose que précédement mais avec des transposition aléatoire des accords entre -6 et +6 demi-tons. Tout d'abord, création d'une liste de valeurs de transpositions: (setf transpo-val (rnd-sample 8 (gen-integer -6 6)))   Puis utilisation de la liste dans la fonction: (setf chords3 (gen-chord2 8 4 row :offset '(2 3) :transpose transpo-val))   Ajout d'une contrainte de tessiture avec :ambitus (setf chords4 (gen-chord2 8 4 row :offset '(2 3) :transpose transpo-val :ambitus '(c4 c5)))   Voici maintenant une partition utilisant la structure que nous venons de créer. Utilisation des accords comme base de mapping pour une application sur un contour mélodique: Contour basé sur un vecteur. (setf vecteur (gen-white-noise 200)) (setf smooth-vect (vector-smooth 0.63 vecteur))   Contour mélodique (on transforme le vecteur en notes) (setf contour (vector-to-pitch '(g3 c6) smooth-vect))   Longueurs Choix aléatoire de 24 mesures dans une liste de mesures pré-définies: (setf len (rnd-sample 24 '((s s s s q -q) (e e q s s s s s s s s) (h) (s s q s s s s) (q q e e q -q) )))   Assemblage OMN (setf melo (make-omn :pitch contour :length len ))   Application de la progression d'accords (setf melo.map (tonality-map (mclist chords4) melo))   Contrainte de tessiture: (setf melo.amb (ambitus '(g3 c6) melo.map))   Accompagnement piano Création d'une liste de figures possibles: (setf fig '((h c2 e3c4g4)(q c2 e3c4 g3e4 e3c4)(e c4 e3 g3 c3 h c2)))   Choix aléatoire de 24 figures parmi cette liste (setf rchoice (rnd-sample 24 fig))   Récupération de la structure des mesures de la mélodie: (setf mspan (get-span melo.amb))   Application de la structure de mesures sur l'accompagnement (setf acc (length-span mspan rchoice))   Application de la structure harmonique sur l'accompagnement (setf accmp.map (tonality-map (mclist chords4) acc))   Définition du score: (def-score etude   (:key-signature 'atonal :time-signature (get-time-signature melo.map) :tempo 123 :layout (violin-layout 'violin)) (violin :omn melo.amb :channel 1 ;:port 0 :sound 'gm :program 'violin) (piano :omn accmp.map :channel 2 ;:port 0 :sound 'gm :program 'acoustic-grand-piano))   Voila, en espérant que ce petit exemple vous a donné des idées. Vous trouverez en pièce jointe à ce post ce fichier au format .opmo   SB.

Stephane Boussuge

Stephane Boussuge

 

Utilisation de rnd-order (hauteurs, durées, dynamiques) et sortie dans Ableton Live 9

Bonjour,   J'ai testé la fonction RND-ORDER qui est décrite dans les exemples d'Opusmodus et dans une (ou plusieurs vidéos très utiles de Stéphane Boussuge pour l'apprentissage) et j'ai été très intéressé par les différents résultats obtenus à partir du même matériau musical. J'ai inséré une série dodécaphonique et différentes phrases de jazz que j'utilise à la guitare, et j'ai soumis pour la main droite ce matériau à deux réorganisations avec RND-ORDER et la même chose pour la main gauche mais avec en plus un rétrograde (GEN-RETROGRADE). De même, j'ai expérimenté plusieurs niveaux de dynamiques, des tempi différents et surtout des durées "ré-ordonnées" avec RND-ORDER différentes. Et comme je n'ai pas utilisé la fonction seed, j'ai obtenu à chaque fois des résultats différents. Pour ma part, je note que le choix des durées est vraiment important pour obtenir des phrasés intéressants. Je suis très curieux d'avoir votre avis.        

Deb76

Deb76

 

Dialogue avec Notion 5

Bonjour,   Jour après jour, je découvre les possibilités d'Opusmodus. Après avoir dans un premier temps testé les fonctions concernant les listes, maintenant, après avoir regardé les vidéos de Stéphane Boussuge qui m'ont été fort utiles, je me lance à découvrir ce que permet Opusmodus avec des synthés virtuels via un éditeur de partitions comme Notion 5 ou un séquenceur comme Ableton Live 9. Ici, une courte vidéo avec différents enregistrements à partir du même matériau musical créé avec Opusmodus dans Notion 5 mais en jouant sur des valeurs différentes dé quantisation de Notion 5, de l'enregistrement "note à note" à une compression de la phrase musicale. A la base, l'idée était de voir si le dialogue avec Notion pouvait s'établir. Le dialogue s'effectue mais uniquement sur un seul instrument (natif de Notion 5 ou Vsti). Mais portée par portée, on peut vérifier avec différents timbres. La notation standard et celle du piano roll permet de visualiser les compressions ou dilatations des hauteurs. Les instruments utilisés sont les deux vibraphones de Pianoteq 5 et celui, natif, de Notion 5.   Et une tentative de traduction en anglais :    

Deb76

Deb76

  • Blog Statistics

    2
    Total Blogs
    9
    Total Entries
×