Jump to content

Stephane Boussuge

Moderators
  • Posts

    1,059
  • Joined

  • Last visited

Everything posted by Stephane Boussuge

  1. Hi, it is not repeated because gen-loop repeat the process itself, it mean a new output for each iteration of the loop. Best. S.
  2. Another possible way: (setf seeds (vector-round 1 100 (gen-white-noise 8 :seed 13))) (setf rhythm (mapcar (lambda(x) (euclidean-rhythm 16 4 16 's :type 2 :seed x)) seeds)) SB.
  3. I've experimented different approach to this in past. One of the possible way is to use passing-interval function to populate between you anchor chords. SB.
  4. I use HARMONIC-PATH function to apply harmony when I want to keep the voice leading of my applied chords. HARMONIC-PATH change totally the harmonic content when applying. TONALITY-MAP just "map" pitches on closest other pitches. Try to use as path some chords with a very typical classical and well defined voice leading with both functions on a more complex material and you will see the difference . S.
  5. Opusmodus as a library sound perfect for me. Opusmodus ltd may sell separately from Opusmodus the library but without asking any fee to developers. I think this will be the best solution, it will increase the sales for Opusmodus and motivate the developers to use Opusmodus as the best platform / library for development of musical applications. Also, it will allow people to use Opusmodus on Linux and Windows. s.
  6. You can use a list of sizes: (harmonic-progression '(1 6 2 5 2) '(c major) :size '(3 3 3 4 3) :base 1) S.
  7. Dear Rangarajan, You can use the :size parameter in the harmonic-progression function to create 4 pitch chords. S.
  8. Yes, it is because the randomness in tonality-map process call randomly the parameter up or down in the :closest option. You can fix this by setting up or down explicitly: (setf path (tonality-series modes :map '(octave) :root roots :closest '(up))) S.
  9. I've tried a bit Ircam instruments2 but still feel a lack of dynamics variety... S.
  10. A possibility is to use plogue Bidule to create a kind of meta-instrument with keyswitch to switch from classical to extended techniques. I will have a look. S.
  11. Hi, yes I have this lib but still not used it really and still not did any soundest for it. But I will investigate in future. Best S.
  12. Hi, The values for density control has to be between something greater than 0, for example 0.01, and 1.00. Here's a better code: (setf size (car (rnd-number 1 12 32))) (setf psets '(c4 fs4 g4 e4 gs4 f4 a4 cs5 ds5 as4 d5 b4)) ;;; RHYTHM (setf dens-tend (vector-round 0.01 1.00 (pitch-to-integer psets))) (setf dens1 (vector-round 0 100 (gen-tendency size dens-tend))) (setf dens2 (vector-round 0 100 (gen-tendency size dens-tend))) (setf dens3 (vector-round 0 100 (gen-tendency size dens-tend))) (setf dens4 (vector-round 0 100 (gen-tendency size dens-tend))) (setf dens5 (vector-round 0 100 (gen-tendency size dens-tend))) (setf dens6 (vector-round 0 100 (gen-tendency size dens-tend))) SB.
  13. Hi, here it is: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ADD-INTERVAL-IF-LENGTH ;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (in-package :Opusmodus) ;;; USAGE #| (setf seq '((e c4 p stacc d4 stacc e4 stacc f4 stacc q g4 g3) (q c4 mf e c6 b5 a5 g5 f5 d5) (s e4 f4 e4 d4 q g4 b4 d5) (q g5 ff marc g4 marc h c5 ))) ; with default parameters (add-interval-if-length '(1/4 c4 d4 e4 1/8 e4 f4)) (add-interval-if-length seq) ; with specified condition (add-interval-if-length seq :condition '<) (add-interval-if-length seq :condition '=) ; with specifird conditions en length value specification (add-interval-if-length seq :condition '= :length-val '1/4) |# ;;; VERSION REVISEE PAR TORSTEN ;;; ============================================== ;;; UTILITY FUNCTIONS ;;; (defun add-interval-if-length-aux (omn &key (test #'>) (length-val 1/8) (interval-list '(4 3 4 7 4 3 5 4 7 3))) (let ((s-events (single-events omn))) (loop for e in s-events for i in (gen-trim (length s-events) interval-list) when (funcall test (omn-encode (first e)) length-val) append (omn-replace :pitch (chord-interval-add (list i) (list (second e))) e) else append e))) ;(add-interval-if-length-aux '(q c4 d4 e4 f4 e g4 a4) :interval-list '(10 11)) ;;; ============================= ;;; MAIN FUNCTION (defun add-interval-if-length (omn &key (test #'>) (length-val 1/8) (interval-list '(4 3 4 7 4 3 5 4 7 3))) (do-verbose ("add-interval-if-length") (let ((test-fn (case test (> #'>) (< #'<) (= #'=) (otherwise test)))) (if (listp (car omn)) (mapcar #'(lambda (x) (add-interval-if-length-aux x :test test-fn :length-val (omn-encode length-val) :interval-list interval-list)) omn) (add-interval-if-length-aux omn :test test-fn :length-val (omn-encode length-val) :interval-list interval-list))))) ;(add-interval-if-length '((q c4 d4 e4 f4 e g4 a4) (e f4 e4 q d4 c4 a4 g4 f4)) :interval-list '(10 11)) ;(add-interval-if-length '((q c4 d4 e4 f4 e g4 a4) (e f4 e4 q d4 c4 a4 g4 h f4)) :interval-list '(3 4) :test #'>= :length-val 'q)
  14. (setf size 8) (setf ph1 (ambitus '(g3 g6) (filter-tie (make-omn :pitch (gen-loop size (interval-ambitus 6 (rnd-sample 12 (make-scale 'd4 12 :alt '(2 1 3))))) :length (gen-loop size (length-legato (rnd-sample 4 '(s -s)))) :velocity (rnd-pick '((pp)(p)(mp)(mf)(f))) )))) ;;; Controled repetitions of ph1 with vector-map (with index numbers) (setf reps1 (vector-map ph1 '(0 0 1 3 3 3 2 3 4 3 2 4 5 6 6 7 7 7))) ;;; Apply variations to this repetitions with unfold: (setf reps1.proc (unfold 'om '((ld23 (4 5 6 12 16))(ld24 (2 8 13 16))(t4 (1 3 5 7))) reps1))
  15. Here's the video files from this session. The score files are already inside Opusmodus in score examples documentation section in Utility panel. This is the scores : Craft for alto and piano. and the score Duet for violin and piano. All the best to all of the Opusmodus community ! SB. ZoomIntoOM-Videos141120.zip
  16. Hi, just a small example here about parts extraction with pitch-demix, from piano part to string quartet. Not a perfect solution but do the job in many cases and it is always possible to refine a bit the output manually. S. (setf base '(#|1|# (z^h. c4e4a4 h.^w fs3 q b4) #|2|# (z^h c4e4a4 h^h. fs3 q c5 b4) #|3|# (z^h. c4e4a4 h.^w fs3 e g4 a4) #|4|# (z^h. c4e4a4 h.^w fs3 q g4) #|5|# (z^h. d4f4 h.^w c3gs3 q e4) #|6|# (z^q f4 q^h. c3gs3 g4 f4 e4) #|7|# (z^h d4e4 h^w c3gs3 tie f4) #|8|# (h. c3gs3d4 q e4) #|9|# (z^h. cs4fs4 h.^w as2fs3 q gs4) #|10|# (z^h. cs4as4 h.^w as2fs3 q c5) #|11|# (z^e a2 e^h. e4d5 he^h.. f3 tie q e5) #|12|# (z^w f3 h c4e4d5 q c5 b4) #|13|# (w f3c4e4a4))) (setf base-merged (dissolve-voices base)) (setf v1 (pitch-demix 1 base-merged)) (setf v2 (pitch-demix 2 base-merged)) (setf v3 (pitch-demix 3 base-merged)) (setf v4 (pitch-demix 4 base-merged)) (ps 'gm :sq (list v1 v2 v3 v4))
  17. Hi folks, here's the material from this session. Best ! Stéphane auto-explode.lisp auto-split.lisp split-point.lisp Zoom07112020a.opmo ZoomIntoOMVideos071120.zip
  18. Hi, Just added the split-point function who was necessary to run the auto-split function and was missing. Best Stéphane
  19. Move-set is a function inspired by Mikael Kuhn's move-set function in PGen for Csound. https://mikelkuehn.com/index.php/ng It allows you to make random choices by moving progressively in a morphing from one set to another linearly or by following a convex or concave curve controlled by the parameter: curve. <1 = concave, 1 = linear,> 1 = convex. The norep option allows you to remove direct repeats in random choices. ;;;====================================== ;;; MOVE-SET ;;; SB. 01.11.2020 ;;;====================================== ;;; Move-set est une fonction inspirée de la fonction move-set de Mikael Kuhn dans PGen pour Csound. ;;; Elle permet de faire des choix aléatoire en passant progressivement d'un ensemble à un autre ;;; de manière linéaire ou alors en suivant une courbe convexe ou concave controlée par le ;;; parametre :curve. <1 = concave, 1 = lineaire, >1 = convexe. ;;; l'option norep permet d'éviter les répétitions directes dans les choix aléatoires. ;;; Parametres: ;;; set1 liste ;;; set2 liste ;;; nbsteps entier ;;; nbval entier ou liste d'entiers ;;; curve <1 = concave, 1 = lineaire, >1 = convexe. Par défaut 1 ;;; norep nil ou t. par défaut nil. ;;; seed un entier. Par défaut nil. ;;; Definition de la fonction MOVE-SET (defun move-set (set1 set2 nbsteps nbval &key (curve 1) (norep nil) seed) "Move-set est une fonction inspirée de la fonction move-set de Mikael Kuhn dans PGen pour Csound. Elle permet de faire des choix aléatoires en passant progressivement dans un morphing d'un ensemble à un autre de manière linéaire ou alors en suivant une courbe convexe ou concave controlée par le parametre :curve. <1 = concave, 1 = lineaire, >1 = convexe. L'option norep permet d'éviter les répétitions directes dans les choix aléatoires. Parametres: set1 liste set2 liste nbsteps entier nbval entier ou liste d'entiers curve <1 = concave, 1 = lineaire, >1 = convexe. Par défaut 1 norep nil ou t. par défaut nil. seed un entier." (setf seed (rnd-seed seed)) (do-verbose ("move-set :seed ~s" seed) (init-seed seed) (let ((idx (gen-transition 0 (- nbsteps 1) nbsteps curve :rounded t)) (bmat (gen-morph nbsteps set1 set2 :seed (seed))) ) (loop for i in idx for v in (gen-trim nbsteps (list! nbval)) collect (rnd-sample v (nth i bmat) :norep norep)) ))) ;;; Exemples d'utilisation: #| (move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8) (move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8 :norep t) (move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8 :curve 0.2 :seed 4) (move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8 :curve 0.2 :seed 4 :norep t) (move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 8 :curve 1.5 :seed 4 :norep t) (move-set '(c4 d4 e4) '(fs4 as4 cs5) 12 '(8 4 12 5) :curve 1.5 :seed 4 :norep t) (move-set '(e e e e) '(s s s s) 12 8 :seed 7) (setf melo (filter-tie (make-omn :pitch (setf pch (move-set '(c4 d4 fs4 gs4 b4) '(e4 g4 a4 bb4 cs5) 12 (rnd-number 6 2 16))) :length (gen-tuplet 1 1 'm '? 'w (mapcar 'length pch)) ))) |# SB. move-set.lisp
  20. Yes Musescore is very interesting indeed. It sounds a bit different in Sibelius but it is exactly the same VSL instrument hosted in Vienna Ensemble Pro but my OM soundset is a bit different than my Sibelius one , indeed. Best Stéphane
  21. SoloCelloExempl.mp4 As you can see , I don't need any extra staves to have key switch . All the best Stéphane
  22. But I'm speaking about Musicxml. S. One moment, I'm doing a video. S.
  23. The problem comes from Musescore because it have no soundest and by the way don't send any key switch to instruments. I'm working with Sibelius, and I just need to open the xml file in Sibelius and it plays immediately all articulations. Stéphane
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy