-
Posts
1,062 -
Joined
-
Last visited
Content Type
Forums
Events
Store
Video Gallery
Everything posted by Stephane Boussuge
-
Midi export function?
Stephane Boussuge replied to torstenanders's topic in Support & Troubleshooting
compile-score function can write midi files -
Several possibilities depend what kind of variations you want. The simplest one is random order applied only to lengths. (setf mat '((e d4 e4 fs4 gs4 q a4)(s b4 c5 b4 gs4 q a4 e fs4 e4))) (rnd-order mat :type :length) Another way I appreciate particularly is length divide: (length-divide '((3 4)(1 2)) mat :set 'max) but this last one add some intervals so it may be not what you're searching for... S.
-
Hi folks, Get this opportunity to improve you Opusmodus knowledge, until 2.4.24, you will get -30% on everything on Composer Workshop with the coupon code: easter24. Enjoy !
-
2 videos on orchestral sections
Stephane Boussuge replied to Stephane Boussuge's topic in Made In Opusmodus
The opmo file is a variant of one of the templates given with my video lesson pack: Designing generative orchestral templates with Opusmodus (level 2) - Composer Workshop WWW.COMPOSERWORKSHOP.COM Welcome to the course on "Designing Generative Orchestral Templates with Opusmodus"! In this course, we will explore the fascinating world of computer-assisted composition, specifically focusing on the powerful music composition environment known as Opusmodus. Opusmodus is a cutting-edge software tool that empowers composers, music theorists, and researchers to create... but I will share another one soon S. -
Here's two videos, a long one playing with live coding, generating some sections before assembly and another very short one showing evaluation and assembly for the construction of a short orchestral passage. S.
-
start-swank does not work in OM 3
Stephane Boussuge replied to HenryT's topic in Support & Troubleshooting
I still can't start swank on OM 3 unfortunately. -
Hi folks, a short electronic track in honor of Hubble telescope discovery... I've used the template shared here as starting point: Attached the Audio file, Opmo score and VCVRack. Best S. PillarsOfCreation.wav PillarsOfCreation.vcv PillarsOfCreation.opmo
-
Hi folks, Here's an example using a template for Opusmodus and vcvrack. Feel free to use it as a starting point for your own experimentations, VCVRack is free and driving it with OM is a great fun ! Attached to this post, the 2 files used in this short video example. That file will be probably available in the next OM update. Enjoy ! VCVRackTemplate1.opmo VCVRackTemplate1.vcv
-
Get-Time-Signature to Length-Span
Stephane Boussuge replied to JulioHerrlein's topic in Function Examples
Hi Julio, you can use get-span function: (setf ritmos (gen-repeat 4 (gen-length '((1 2 1 2 1 1) (1 1 1 1 1 2 1) (1 -3 1 -3 2 -2 4) (-3 1 -1 1 1 1)) '(16)))) (get-span ritmos) => (1/2 1/2 1 1/2 1/2 1/2 1 1/2 1/2 1/2 1 1/2 1/2 1/2 1 1/2) S. -
How to : Speaking piano with Opusmodus
Stephane Boussuge commented on Stephane Boussuge's video in How-To
I use the software Spear: https://www.klingbeil.com/spear/ -
musicxml-to-ly but if you use the great Lilypond Editor Frescobaldi, it is included in the menu and works very very well.
-
Lilypond works also very well with Opmo.
-
You may use :butlast
-
Working with Dictum, Dictum not evaluating
Stephane Boussuge replied to LeopoldMozart's topic in Support & Troubleshooting
Hi, the output of your loop get too many nested parenthesis. Use assemble-seq function to arrange this material as correct OMN expression usable by dictum. ;=====BIRDCALLS===== (setf bird1 '(3q d5 leg gs4 d5 leg gs4 d5 leg gs4)) (setf bird2 '(q a3 e. b3 x c5 leg e.. bb4)) (setf bird3 '(e fs4 leg c5 q bb4 3q fs4 stacc c5 bb4)) (setf rest1 '(-e)) (setf rest2 '(-q.)) (setf rest3 '(-e.)) ;=====OMN MAKER===== (setf loop1 (assemble-seq (gen-loop 7 (list (rnd-pick (list bird1 bird2 bird3)) (rnd-pick (list rest1 rest2 rest3)) (rnd-pick (list rest1 rest2 rest3)))))) (dictum '(:if e :do q) loop1) -
Hi, you can try this: ;=====BIRDCALLS===== (setf bird1 '(3q d5 leg gs4 d5 leg gs4 d5 leg gs4)) (setf bird2 '(q a3 e. b3 x c5 leg e.. bb4)) (setf bird3 '(e fs4 leg c5 q bb4 3q fs4 stacc c5 bb4)) (setf rest1 '(-q.)) (setf rest2 '(-h)) (setf rest3 '(-w)) ;=====OMN MAKER===== (apply-eval (rnd-sample 4 '(bird1 bird2 bird3 rest1 rest2 rest3)))
-
Hi, I've made a function long long time ago around this idea not following strictly Hindemith if I remember it correctly but it was based on the same idea/concept. Here's my function, you can probably tweak it to your needs. Please, if you improve it in anyway, share your improvement so it could be useful for me and community as well. Stephane ;;;=============================================================== ;;; sort chords by tension ;;;=============================================================== ;;Idée: classer des accords generés de maniere X par tension avec une courbe de tensions. ;;Analyser un accord ;;1. extraire un vecteur d'intervalles ;;2. Analyser le vecteur ;;3. retourner le resultat (defun ana-tens (ivect) "renvoie le taux de tension harmonique d'un vecteur d'intervalles. utilitaire pour h-tens" (let* ((v1 (*(nth 0 ivect) 6)) (v2 (*(nth 1 ivect) 4)) (v3 (*(nth 2 ivect) 3)) (v4 (*(nth 3 ivect) 2)) (v5 (*(nth 4 ivect) 1)) (v6 (*(nth 5 ivect) 5)) (r (+ v1 v2 v3 v4 v5 v6))) r)) (defun h-tens (chord) (do-verbose ("h-tens") "renvoie le taux de tension harmonique relatif d'un accord." (let* ( (r0 (if (equal chord '(nil)) '(c4) chord)) ; Si nil, remplace par une valeur simple (c4) (r1 (melodize r0)) ;extraction du vecteur d'intervalles (r2 (pitch-to-integer r1)) (r3 (find-unique (modus r2))) (r4 (if (> (length r3) 1) (pcs-prime-form r3 :vector) '(0 0 0 0 0 0))) (r5 (ana-tens r4)) ;analyse du vecteur d'intervalles ;il faut ensuite diviser le resultat obtenu par le nombre de pcs (cardinal-number) du set et on obtient le niveau relatif de tension harmonique. ; on s'assure d'abord de ne pas avoir un accord à 1 seul accord (r6 (float (/ r5 (length r1)) 1.0))) r6 ;retourne le resultat ))) ;;;creation d'une fonction qui prend en entrée une suite d'accords et qui renvoie cette suite triée ;;;par ordre de tension harmonique croissant ou decroissant. (defun extraitcar (lst) (loop for i in lst collect (car i))) (defun extraitcdr (lst) (loop for i in lst collect (cdr i))) (defun sort-chords-tens-up (chords) "ordonne une suite d'accords par ordre croissant de tension harmonique" (do-verbose ("sort-chords-tens-up") (let* ((tens (mapcar 'h-tens chords)) (a-list (pairlis chords tens)) (sorted (stable-sort a-list #'< :key #'cdr)) (chordprog (extraitcar sorted))) chordprog))) (defun sort-chords-tens-down (chords) "ordonne une suite d'accords par ordre decroissant de tension harmonique" (do-verbose ("sort-chords-tens-down") (let* ((tens (mapcar 'h-tens chords)) (a-list (pairlis chords tens)) (sorted (stable-sort a-list #'> :key #'cdr)) (chordprog (extraitcar sorted))) chordprog))) #| ;;;Usage ;;we generate some chords (setf chords (chordize (gen-loop 12 (rnd-unique 4 (integer-to-pitch (gen-integer 12)))))) ;;we sort chords by up tension (setf chords-up (flatten (sort-chords-tens-up chords))) ;;we sort chords by down tension (setf chords-down (flatten (sort-chords-tens-down chords))) |# ;;;====================================================================================
-
Infer scale from get-harmonic-path result
Stephane Boussuge replied to Cliff's topic in Suggestions & Ideas
Hi, you can have a look to the function: pcs-super-sets