Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 01/16/2018 in all areas

  1. 7 points
    Dear all, I updated my library tot (https://github.com/tanders/tot) in various ways. In particular, there are many new functions available. You can now read the documentation online at https://tanders.github.io/tot/. However, remember that you can directly evaluate the many examples in the documentation when (after installing the library) you drag the library folder into your Opusmodus project navigator and open the documentation within Opusmodus. If you are interested in the details of how the library developed, you can see a changelog at https://github.com/tanders/tot/commits/master . NOTE: When you install/upgrade this library, make sure you also install/upgrade all its dependencies, as described in the detailed installation instructions at https://github.com/tanders/tot. Best, Torsten PS: This is not an official release. As I am primarily developing this library for my own purposes, I keep it rather informal and extend it on a continuous basis for my own composition projects. Anyway, I thought at least some of you might be interested to learn that there have been many developments 🙂
  2. 6 points
    Since some time we are working on implementing Bill's Schottstaedt 'Synthesis package CLM' into Opusmodus. As expected we make the CLM working with OMN form sequence or with single parameters - example below. The score is using partials from The Bells of the Campanile: La Marangona. Below you will find an audio file of the score which is rendered each time you make evaluation. Best wishes to all, Janusz ;; --------------------------------------------------------- ;; MARANGONA ;; --------------------------------------------------------- ;; Parameters (defparameter count 50) (setf partials1 (library 'marangona-partials 'partials nil :random 50)) (setf partials2 (library 'marangona-partials 'partials nil :random 50)) (setf partials3 (library 'marangona-partials 'partials nil :random 50)) (setf partials4 (library 'marangona-partials 'partials nil :random 50)) (setf par1 (rnd-sample count (partial :freq (flatten partials1)))) (setf par2 (rnd-sample count (partial :freq (flatten partials2)))) (setf par3 (rnd-sample count (partial :freq (flatten partials3)))) (setf par4 (rnd-sample count (partial :freq (flatten partials4)))) (defparameter freq1 (gen-divide (rnd-sample count '(2 3 4 5)) par1)) (defparameter freq2 (gen-divide (rnd-sample count '(1 2 3 4 5)) par2)) (defparameter freq3 (gen-divide (rnd-sample count '(1 2 3 1 4 5)) par3)) (defparameter freq4 (gen-divide (rnd-sample count '(1 2 3 1 4 5)) par3)) (defparameter len1 (list (length-span 42 (rnd-sample count '(w h q w))))) (defparameter len2 (list (length-span 42 (rnd-sample count '(d h h))))) (defparameter len3 (list (length-span 42 (rnd-sample count '(h. w q))))) (defparameter len4 (list (length-span 42 (rnd-sample count '(d d h))))) (do-timeline '( len1 (---xxx-xx- ---xxx---- --x--xx--- ---x------ x-) len2 (---xxx-xx- ---xx-x--- --x--xx--- ---x------ x-) len3 (---xxx-xx- ---xx--x-- --x--xx--- ---x------ --) len4 (---xxx-xx- ---xx---x- --x--xx--- ---x------ --) ) '(gen-pause x) :time '(w)) (defparameter dur1 (omn :length (flatten len1))) (defparameter dur2 (omn :length (flatten len2))) (defparameter dur3 (omn :length (flatten len3))) (defparameter dur4 (omn :length (flatten len4))) (defparameter amp1 (rnd-number count 0.05 0.43)) (defparameter amp2 (rnd-number count 0.05 0.43)) (defparameter amp3 (rnd-number count 0.05 0.43)) (defparameter amp4 (rnd-number count 0.05 0.43)) (defparameter env '((0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 60 .1000 80 .2000 90 .4000 95 1 100 0) (0 0 10 1 16 0 32 .1000 50 1 56 0 60 0 90 .3000 100 0) (0 0 30 1 56 0 60 0 90 .3000 100 0) (0 0 50 1 80 .3000 100 0) (0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 10 1 32 .1000 50 1 90 .3000 100 0) (0 0 60 .1000 80 .3000 95 1 100 0) (0 0 80 .1000 90 1 100 0))) ;; --------------------------------------------------------- ;; Score (with-sound (:play nil :reverb jc-reverb :scaled-to .7 :statistics t :channels 2 :output "marangona-series") (fmviolin-synth dur1 freq1 amp1 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :fm1-rat (rnd-number count 0.00 6.718) :fm2-rat (rnd-number count 0.00 4.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur2 freq2 amp2 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :fm1-rat (rnd-number count 0.00 4.718) :fm2-rat (rnd-number count 0.00 6.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur3 freq3 amp3 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :fm1-rat (rnd-number count 0.00 1.718) :fm2-rat (rnd-number count 0.00 4.414) :fm3-rat (rnd-number count 0.00 6.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur4 freq4 amp4 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :fm1-rat (rnd-number count 0.00 4.718) :fm2-rat (rnd-number count 0.00 6.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) ) Score with omn-form sequence: (with-sound (:play nil :channels 2 :reverb jc-reverb :scaled-to .6 :statistics t :output "quartet") (fmviolin-omn vn1 :reverb-amount 0.20 :bpm 44) (fmviolin-omn vn2 :reverb-amount 0.20 :bpm 44) (fmviolin-omn va :reverb-amount 0.20 :bpm 44) (fmviolin-omn vc :reverb-amount 0.20 :bpm 44) )
  3. 6 points
    Yuichi Yamamoto

    Quantization

    Hi people, Though I've been using Opusmodus for about 2 years now, and in great love with it, I haven't really had a chance to share my work on the community. But here I have my piano piece vastly written with Opusmodus, and guess what, it's got a cool video, too! Yamaha corporation kindly offered me to use their automated piano for filming, and I think an algorithmic music like this goes very well with it! Yuichi
  4. 5 points
    Stephane Boussuge

    Brin d'Or

    Here's a short piece for violin solo and Strings ensemble with Fibonacci based harmony. Full score attached to this post fully commented but in French 🙂 SB. BrinD'or-V04.opmo
  5. 4 points
    Works with tuplets, section and exclude. Now: value 1/16 on 1/12 = 1/24 value 1/16 on 3/20 = 1/20 etc... Here are the final function results: length-staccato (sequence &key (value 1/16) section exclude omn) (length-staccato '(q - = =) :omn t) => (s -e. -q s -e. s -e.) (length-staccato '(3q -3q 3q 3q 3q 3q) :omn t) => (3q - = = = =) (length-staccato '((3q g4 gs4 a4 tie) (3q a4 b4 c5))) => ((3q g4 gs4 a4 tie) (-3q b4 c5)) (length-staccato '(5q f4 - === 3q g4 = a4)) => (5q f4 - f4 -5h 3q g4 g4 a4) (length-staccato '((q c4 -q e d4 q e4 q f4 tie) (5q f4 - === 3q g4 = a4 tie) (q a4 tie e a4 -q q b4 tie) (q b4 -q e c5 e d5 tie) (e d5 -q e5 q f5 q g5))) => ((s c4 -e. -q s d4 - e4 -e. s f4 tie -e.) (-5q - f4 -5h 3q g4 g4 a4 tie) (-q. -q s b4 tie -e.) (-q - s c5 - d5 tie -) (-e - - s e5 -e. s f5 -e. s g5 -e.)) (length-staccato '(q e4 mp q tasto q -q q q)) => (s e4 mp -e. s e4 tasto -e. s e4 -e. -q s e4 -e. s e4 -e.) (length-staccato '((q c4 -q e d4 q e4 q f4 tie) (5q f4 - === 3q g4 = a4 tie) (q a4 tie e a4 -q q b4 tie) (q b4 -q e c5 e d5 tie) (e d5 -q e5 q f5 q g5)) :section '(0 3)) => ((s c4 -e. -q s d4 - e4 -e. s f4 tie -e.) (-5q - 5h. f4 3q g4 g4 a4 tie) (q. a4 -q b4 tie) (s b4 -e. -q s c5 - d5 tie -) (-e - - q e5 f5 g5)) Best wishes, Janusz
  6. 4 points
    > I got just four 16th notes. This function allows for various controls that you did not use – Of course this function also allows for plain sequences of 1/16-notes, when you select its arguments accordingly 🙂 I am interested in CAC as a means of control on a higher level instead of some automatic "magic". You might want to run the examples below in Opusmodus to get music notation outputs, which are likely more easy to read than the OMN expressions, but nevertheless I provide the OMN expressions for completeness as well. The argument position (3rd argument) controls the kind of rhythmic cell that you get, see the doc for details. Here is an example where different rhythmic cells are returned. Note that by default all returned cells carry potentially a durational accent. (gen-karnatic-cell 4 4 '(0 4 3 2 1 0)) => ((1/4) (1/16 1/16 1/16 1/16) (1/8 1/16 1/16) (1/8 1/8) (3/16 1/16) (1/4)) Now, if you use the same positions but different gati or jathi settings then you get a somewhat similar rhythm in that different gati/jathi. Below I slightly adapted the positions to make the results even more similar. (gen-karnatic-cell 4 5 '(0 6 3 2 1 0)) => ((5/16) (1/16 1/16 1/16 1/16 1/16) (3/16 1/16 1/16) (3/16 1/8) (1/4 1/16) (5/16)) You can, of course, use these in a different time signature (e.g., the tala of your choice). (omn-to-time-signature (gen-karnatic-cell 4 5 '(0 6 3 2 1 0)) '(4 4)) => ((q c4 tie s s s s s s e. s s s tie) (e c4 c4 q s q tie s)) If you want to keep track of where the accents are located, you could mark them before this transformation (the function articulate-phrase is defined below this post). You could then manually later revise the notation to instead you the beam-breaking that Reina recommends. (omn-to-time-signature (articulate-phrase (gen-karnatic-cell 4 5 '(0 6 3 2 1 0)) :accent 'marc) '(4 4)) => ((q c4 tie+marc s marc s marc s s s s e. marc s s s tie+marc) (e c4 c4 q marc s q tie+marc s marc)) After the changed jathi above, here is a different gati. Results are more similar, because the underlying data is the same with different gati but the same jathi. Here is an example with quintuplets. (gen-karnatic-cell 5 4 '(0 4 3 2 1 0)) => ((1/5) (1/20 1/20 1/20 1/20) (1/10 1/20 1/20) (1/10 1/10) (3/20 1/20) (1/5)) Here is the same with triplets -- exactly the same, only slower. (gen-karnatic-cell 3 4 '(0 4 3 2 1 0)) => ((1/3) (1/12 1/12 1/12 1/12) (1/6 1/12 1/12) (1/6 1/6) (1/4 1/12) (1/3)) You can also change the jathi (or even gati) on the fly in a phrase. The given pattern is then 'cycled through'. (gen-karnatic-cell 4 '(5 5 3 3) '(0 6 3 2 1 0)) => ((5/16) (1/16 1/16 1/16 1/16 1/16) (1/16 1/16 1/16) (1/16 1/16 1/16) (1/4 1/16) (5/16)) You can also randomise your position (gen-karnatic-cell 4 5 '(0 1 ? ? 0)) => ((5/16) (1/4 1/16) (3/16 1/8) (3/16 1/16 1/16) (5/16)) And I did not even start discussing the other parameters yet. For example, you can set whether or not cells start with a durational accent (not a karnatic concept, but very useful notion for Western ears when dealing with rhythm). (gen-karnatic-cell 4 5 '(3 3 3 3) :accented? '(T nil nil T)) => ((3/16 1/16 1/16) (1/16 3/16 1/16) (1/16 3/16 1/16) (3/16 1/16 1/16)) You can filter in various ways want kind of rhythm you want, e.g., set the minimum or maximum number of notes per cell. (gen-karnatic-cell 4 5 '(? ? ? ?) :min-number '(3 3 3 3) :seed 1) =>((1/8 1/8 1/16) (3/16 1/16 1/16) (1/16 1/16 1/16 1/16 1/16) (1/8 1/8 1/16)) EDIT: Oops, that are is seemingly not fully working as expected. I stop here and refer you do the documentation for more details: there are several more arguments that I did not even mention yet. I know that my documentation is rather concise and not a textbook, but it briefly discusses every detail. I said from the beginning, I wrote this for myself, so you might want to first spend a bit of time with the doc 🙂 As you hopefully can see, this function alone allows for a rather rich world of rhythm with rather precise control that allows varying some rhythmic idea in various ways. I am interested here in clearly perceivable rhythmic similarities, e.g., between rhythms in different gati and jathi combinations in the Western tradition of thematic variation. Of course, you can also process the result further in various ways. E.g., I am adding ties after long notes and/or subdivide short notes to increase the rhythmic contrast, and I am turning certain notes into rests... Best, Torsten (defun articulate-phrase (sequence &key (accent 'marc)) "Add articulations to phrase for more clear rhythmic accents, e.g, an accent on every first beat. NOTE: This function assumes that `sequence' is a purely rhythmic OMN expression with only length values and perhaps ties. However, a sequence with (constant) pitches is returned, because certain Opusmodus functions do not support an OMN sequence without pitches. Examples: (articulate-phrase '((h h) (q q q q tie) (q q q q) (-q q) (q q q q)) :accent 'marc) => ((h marc h) (q marc q q q tie) (q q q q) (-q q) (q marc q q q)) " (cons ;; First bar ;;; NOTE: code repetition... (let ((bar1 (first sequence))) (if (length-notep (first bar1)) (if (and (= (count-notes bar1) 1) (eql (first (last bar1)) 'tie)) (tu:replace-element (merge-articulations (list accent 'tie)) 1 bar1) (tu:insert-after bar1 0 accent)) bar1)) ;; other bars (loop :for (bar1 bar2) :on sequence :while bar2 ;;; NOTE: code repetition :collect (if (and (length-notep (first bar2)) (not (eql (first (last bar1)) 'tie))) (if (and (= (count-notes bar2) 1) (eql (first (last bar2)) 'tie)) (tu:replace-element (merge-articulations (list accent 'tie)) 1 bar2) (tu:insert-after bar2 0 accent)) bar2))))
  7. 4 points
    This is the EASIEST Method to achieve the result !!! FINALLY !! Without the need of Meier's Functions !! (binary-map (row-rotation 0 (gen-binary-row 12 (pcs '3-11)))1/16) YEEEEESSSSS !!! added 10 minutes later (binary-map (row-rotation 1 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation 0 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -1 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -2 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -3 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -4 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -5 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -6 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -7 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -8 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -9 (gen-binary-row 12 (pcs '3-11)))1/16) (binary-map (row-rotation -10 (gen-binary-row 12 (pcs '3-11)))1/16) AND FINALLY, back to que original (binary-map (row-rotation -11 (gen-binary-row 12 (pcs '3-11)))1/16) It works !
  8. 4 points
    JulioHerrlein

    Turing Piano (Julio Herrlein)

    Dear Friends, I'd like to share a composition all made in Opusmodus. The composition is part of the Portfolio of my Doctoral Dissertation. I'd like to thank you so much, Opusmodus and the support of you here in this forum was amazing !! Love you all !! TURING PIANO (Julio Herrlein) Here is the commented code for the First Section: ;;;PART A ;PITCHES – The pitch structure are based on "chevron-like" patterns. This can be related to some Xenakis ideas: the arborescences, the music as a plot idea. (setf patpit (integer-to-pitch (gen-integer-step 0 68 '(1 -2 3 -4 5 -6 7 -8 9 -10 11)))) (setf patpit2 (integer-to-pitch (gen-integer-step 0 68 '(11 -10 9 -8 7 -6 5 -4 3 -2 1)))) ;;; This interval pattern leads to an infinite ascending movement, like the picture below: ;;; After that, I decided to restrict the ambitus of the pattern, otherwise it goes ascending forever. I did the restriction thinking in the hands of the pianist, in a way to not collide or crossing the hands. ;;;After the ambitus restriction, the next step was find some partitions to make some chords for the piece, so each hand have a diferent partition of the chevron-like pattern, like below (setf pitpartition (ambitus '(g3 c6)(chordize-list (gen-divide '(1 1 1 3 1 1 1 2) patpit)))) (setf pitpartition2 (ambitus '(g1 g3)(chordize-list (gen-divide '(2 1 1 1 1 2 1 1 1 1 1 1 1 1) patpit2)))) ;;; Next, i decided on the Rhythms to use. The rhythms are complementary, i.e., each hand plays on the silence of the other, using the following pattern: DIGRESSION: The FORTE NUMBERS are part of my dissertation that makes the conversion of the entire Forte sets onto Rhythms modulo 12. The dissertation (in portuguese) can be downloaded HERE: Das alturas ao ritmo : teoria dos conjuntos rítmicos como ferramenta composicional From pitches to rhythm: rhythmic set theory as a compositional tool. http://hdl.handle.net/10183/179457 Abstract This doctoral dissertation is divided into two parts: the first deals a rhythmic set theory, and the second contains the portfolio of compositions developed during this period of studies. This dissertation presents a system of rhythmic organization parallel to the musical set theory pitch class organization FORTE (1973), as well as an adaptation of the time-point-system (BABBITT, 1962). From the standpoint of the traditional set theory, and also from the diatonic set theory, this unified approach allows to estabilish a connecting tissue of basic aspects: from the harmony and chords symbols to the rhythmic organization. At one time, in a complete catalog, the families of pitch class sets and chord symbols are related to their respective rhythmic counterparts. The musical motivation for this research came from my interest in the swinging and groovy repetitive rhythms called timelines (TOUSSAINT, 2013), commonly used in popular music. These dancing timelines have properties similar to those of the diatonic sets, and for this reason, this dissertation presents some properties of the diatonic pitch class sets, drawing a parallel with their rhythmic counterparts. These relationships also appear in the portfolio of compositions, characterizing some procedures used. The portfolio of compositions, which includes a composition for symphony orchestra, is presented form the standpoint of a duality between transparency and opacity. This duality address the essential differences in the audibility of the results from various composition techniques. This study of Rhythmic Set Theory will serve as an analytical approach of my compositional output in popular music, with a systematic way to understant and to extrapolate some aspects already used in my practice as composer and improviser. Here is the rhythm used in Turing Piano (with Forte numbers and rotations) (setf ritmo1 (gen-repeat 10 '(s s -s s s -s -s -s s -s -s s -s s -s -s s -s s -s -s -s s -s))) (setf ritmo1b (length-invert ritmo1 :omn t)) ; DINAMICS: Following the parametric stuff, I decided to set the dynamics, according to the harmonic density, i.e. the more notes, the more louder. (setf din1 (span pitpartition '(p p p ff p mf pp ff))) (setf din2 (span pitpartition2 '(f p p p p ff p p ff pp pp f mf mf))) ;ASSEMBLING of the materials (setf lhmat1 (make-omn :length ritmo1 :pitch (pitch-transpose 4 pitpartition) :velocity din1)) (setf rhmat1 (make-omn :length ritmo1b :pitch (pitch-transpose 4 pitpartition2) :velocity din2)) ;MONTAGE of music blocks (assemblage) (setf pianoassemblerh (assemble-seq lhmat1)) (setf pianoassemblelh (assemble-seq rhmat1)) ;;;SCORE- Layout (def-score Miniatura-pno1 (:key-signature 'atonal :time-signature '(3 4) :tempo 85 :octave-shift '(c2 c6) :layout (grand-layout 'pno :all-accidentals 'all)) (pno :omn (merge-voices lhmat1 rhmat1) :channel 1 :sound 'gm :program 0) ) COMPLETE VIDEO
  9. 4 points
    JulioHerrlein

    FORTE NUMBERS as Rhythms

    Dear Friends In my Doctoral Dissertation, I converted every FORTE number in a modulo 12 Rhythm via time-point-system. There is a complete catalog included (see the link below). It's in portuguese. After Janusz adjusted the Forte numbers to have the inversion, using "a" and "b" to differentiate the prime forms from the inversions, it was easy to convert using codes like this: (setf ch0 (time-point-system (pcs '5-11b :pitch)'s :start 0)) (setf ch1 (time-point-system (pcs '6-33 :pitch)'s :start 1)) (setf ch2 (time-point-system (pcs '7-11b :pitch)'s :start 2)) (setf ch3 (time-point-system (pcs '3-11b :pitch)'s :start 3)) (setf ch4 (time-point-system (pcs '3-11b :pitch)'s :start 0)) The dissertation (in portuguese) can be downloaded HERE: Das alturas ao ritmo : teoria dos conjuntos rítmicos como ferramenta composicional From pitches to rhythm: rhythmic set theory as a compositional tool. http://hdl.handle.net/10183/179457 Abstract This doctoral dissertation is divided into two parts: the first deals a rhythmic set theory, and the second contains the portfolio of compositions developed during this period of studies. This dissertation presents a system of rhythmic organization parallel to the musical set theory pitch class organization FORTE (1973), as well as an adaptation of the time-point-system (BABBITT, 1962). From the standpoint of the traditional set theory, and also from the diatonic set theory, this unified approach allows to estabilish a connecting tissue of basic aspects: from the harmony and chords symbols to the rhythmic organization. At one time, in a complete catalog, the families of pitch class sets and chord symbols are related to their respective rhythmic counterparts. The musical motivation for this research came from my interest in the swinging and groovy repetitive rhythms called timelines (TOUSSAINT, 2013), commonly used in popular music. These dancing timelines have properties similar to those of the diatonic sets, and for this reason, this dissertation presents some properties of the diatonic pitch class sets, drawing a parallel with their rhythmic counterparts. These relationships also appear in the portfolio of compositions, characterizing some procedures used. The portfolio of compositions, which includes a composition for symphony orchestra, is presented form the standpoint of a duality between transparency and opacity. This duality address the essential differences in the audibility of the results from various composition techniques. This study of Rhythmic Set Theory will serve as an analytical approach of my compositional output in popular music, with a systematic way to understant and to extrapolate some aspects already used in my practice as composer and improviser. Here is an analysis of a Wayne Krantz improvisation, using the rhythmic set theory system. Hope you enjoy !! Best, Julio
  10. 4 points
    Audition format (excerpts) of various personal application studies for Opusmodus. .. .
  11. 4 points
    Hi, here's for study purpose the Opusmodus score of the first movement of my piano trio. All the best to the wonderful Opusmodus users community ! SB. PianoTrio-SlonimskyV2.opmo
  12. 4 points
    opmo

    Posting seed value

    I think it will help us to work even more freely and this is what we expect from Opusmodus :-) Thank you for the suggestion.
  13. 4 points
    opmo

    Posting seed value

    I found a way to display an internal seed if seed is nil (random process). Example without a seed (each time different result): (rnd-number 12 1 10) ? rnd-number :seed 678732 => (10 6 10 6 1 9 5 6 10 2 4 2) Now the same function with a manually "lock" using the :seed (rnd-number 12 1 10 :seed 678732) ? rnd-number :seed 678732 => (10 6 10 6 1 9 5 6 10 2 4 2) (rnd-pick '((q c4 p d4 ff s a4 stacc) (s e4 app q c5 d5 pp))) ? rnd-pick :seed 598336 => (q c4 p d4 ff s a4 stacc) I hope everybody will be happy with the solution :-) To add this functionality to all the functions using random seed will take some time to do. Hopefully tomorrow :-) Best, Janusz
  14. 4 points
    Stephane Boussuge

    Nuit d'hiver For Woodwinds

    Small piece for Woodwinds. S.
  15. 3 points
    opmo

    Idea for a Rhythmic Set Theory Function

    pcs-rhythm (pcs &key points invert (rotate 0) (value 1/16) legato omn) (pcs-rhythm '3-11 :invert t :points 9 :omn t) => (-s = = - = = = - =) (pcs-rhythm '3-11 :invert t :points 9 :rotate 7 :omn t) => (s = - = = = = - =) (pcs-rhythm '3-11 :points 9 :legato t :omn t) => (e. q e) ;; Interval list to prime-form: (pcs-prime-form '(2 5 7 11)) => (0 3 6 8) (pcs-rhythm '(2 5 7 11) :omn t) => (s - - = - - = - = - - -) (pcs-rhythm '(2 5 7 11) :rotate 7 :omn t) => (-s = - = - - - = - - = -) (pcs-rhythm '(3-11 6-5) :points '(8 9) :omn t) => ((s - - = - - - =) (s = = = - - = = -)) (pcs-rhythm '((2 5 7 11) (1 6 3 9 2)) :omn t) => ((s - - = - - = - = - - -) (s = = - - = - - = - - -)) and (pcs-rhythm '(3-11 6-21) :points '(8 9 7 9) :rotate '(0 1 2 3) :legato '(0 1 1 0) :value '(s e s 3q) :omn t) => ((s - - = - - - =) (-e q e = q =) (-e e. e) (-3q - - = - = = = -)) (pcs-rhythm '3-11 :rotate '(0 1 2 3 4 5 6 7 8 9 10 11) :omn t) => (( s - - = - - - = - - - -) (-s = - - = - - - = - - -) (-s - = - - = - - - = - -) (-s - - = - - = - - - = -) (-s - - - = - - = - - - =) ( s - - - - = - - = - - -) (-s = - - - - = - - = - -) (-s - = - - - - = - - = -) (-s - - = - - - - = - - =) ( s - - - = - - - - = - -) (-s = - - - = - - - - = -) (-s - = - - - = - - - - =)) (pcs-rhythm '(6-z25b 6-z41b) :points '(9 8) :omn t) => ((s - = = - = - = =) (s - = - - = = =)) (pcs-rhythm '(6-z39 5-13 4-24 6-9) :rotate '(0 3 9 2) :omn t) => ((s - = = = = - - = - - -) (-s - - = = = - = - - - =) (-s = - - - = - - - = - =) (-s - = = = = - = - = - -)) There is an error in the 3rd bar, it should read: 4-24(s)R9 3rd bar: with 4-24(s)R8
  16. 3 points
    > all your hard work to document I actually do such detailed documentation for my own benefit as well. I once spent several months on developing some personal library that I used for composing some piece, but when I wanted to re-use it some two years later, I could not really understand my own functions anymore. Since then I better err on the side of overdoing the docs 🙂 Best, Torsten
  17. 3 points
    opmo

    Slonimsky Stuff HELP

    I think this could be done.
  18. 3 points
    Hi, here are the two functions i use daily in my workflow. The first gen-pitch-line can be used as this but is also required for the second function svoice1. svoice1 is a generic omn generator i find useful for my work. ;;; ------------------------------------------------------------------------------ ;;; GEN-PITCH-LINE ;;; Fonction de génération de hauteurs basées sur une conversion de vecteur de bruit ;;; avec un grand choix de type de bruit, taux de compression du vecteur, filtrage des répétitions et ambitus. (defun gen-pitch-line (nb-pitch &key (compress 1) (ambitus '(c4 c6)) seed filter-repeat (type :white)) (setf seed (rnd-seed seed)) (let (pitches) (do-verbose ("gen-pitch-line :seed ~s" seed) (labels ((white-or-pink (nb-pitch seed type) (if (eq type ':pink) (gen-pink-noise nb-pitch :seed seed) (gen-white-noise nb-pitch :seed seed :type (if (eq type ':white) :normal type)))) (process (nb-pitch &key (compress 1) (ambitus '(c4 c6)) seed filter-repeat type) (setf pitches (vector-to-pitch ambitus (vector-smooth compress (white-or-pink nb-pitch seed type)))) (when filter-repeat (setf pitches (gen-trim nb-pitch (filter-repeat filter-repeat pitches)))) pitches) ) (process nb-pitch :compress compress :ambitus ambitus :filter-repeat filter-repeat :seed (seed) :type type))))) #| USAGE (gen-pitch-line 24 :compress 0.42 :type :white :filter-repeat 1) (gen-pitch-line 24 :compress 0.42 :type :pink :filter-repeat 1) (gen-pitch-line 24 :compress 0.42 :type :extreme :filter-repeat 1) (gen-eval 8 '(make-omn :pitch (gen-pitch-line 24 :compress 0.42 :type :white :filter-repeat 1) :length (euclidean-rhythm 16 1 16 's :type 2) ) :seed 33) |# ;;; ------------------------------------------------------------------------------ ;;; SVOICE1 ;;; VERSION 0.1 (defun svoice1 (nb-pitch &key (level 16) (low 1) (high 16) (ratio 1/16) (e-type 2)(e-rotate nil)(e-variant nil) (compress 1)(filter-repeat nil)(pline-type :white) (p-divide nil)(articulation nil) (length nil)(pitch nil)(velocity nil) (seed nil)(articulation-map nil) (add-interval-if-length nil) (i-length '1/16) (i-list '(-4 -5 -3 -7)) ) (setf seed (rnd-seed seed)) (do-verbose ("svoice1 :seed ~s" seed) (let* (( pitch (if pitch pitch (if p-divide (gen-divide p-divide (gen-pitch-line nb-pitch :compress compress :seed (seed) :filter-repeat filter-repeat :type pline-type)) (gen-pitch-line nb-pitch :compress compress :seed (seed) :filter-repeat filter-repeat :type pline-type)))) (len (if length length (euclidean-rhythm level low high ratio :type e-type :rotate e-rotate :variant e-variant :seed (seed)))) (art (if articulation articulation (if articulation-map (length-map articulation-map len :otherwise '(default)) ))) (velo (if velocity velocity '(mf))) ) (if add-interval-if-length (add-interval-if-length (make-omn :pitch pitch :length len :velocity velo :articulation art ) :length-val i-length :interval-list i-list ) (make-omn :pitch pitch :length len :velocity velo :articulation art ))))) #| USAGE (svoice1 32) (svoice1 32 :seed 1234) (svoice1 32 :pitch '(c4 d4 e4) :articulation '(marc)) (svoice1 32 :length '((h h)(q q e e e e))) (svoice1 32 :pitch '(c4 g4) :length '((h h)(q q e e e e)) :velocity '((f)(pp))) (svoice1 32 :i-list '(-7 -4 -5 -3) :low 1 :high 4) (svoice1 128 :p-divide 8 :level (gen-repeat 12 '(16)) :compress 0.16) (svoice1 128 :p-divide 8 :level (gen-repeat 12 '(16)) :compress 0.16 :articulation-map '((1/8 stacc)(1/16 leg))) (svoice1 128 :p-divide 8 :level (gen-repeat 12 '(16)) :low 8 :high 8 :compress 0.16 :articulation-map '((1/8 stacc)(1/16 leg))) (svoice1 128 :p-divide 8 :level (gen-repeat 12 '(16)) :low 8 :high 8 :compress 0.16 :articulation-map '((1/8 stacc)(1/16 leg)) :add-interval-if-length t) (svoice1 128 :p-divide 8 :level (gen-repeat 12 '(16)) :low 2 :high 16 :compress 0.16 :articulation-map '((1/8 stacc)(1/16 leg))) (tonality-map '(((0 2 4 6 8 10) :root d4)) (svoice1 128 :p-divide 8 :level (gen-repeat 12 '(16)) :low 2 :high 16 :compress 0.16 :articulation-map '((1/8 stacc)(1/16 leg))) ) |# S.
  19. 3 points
    ... a keyword/text search within the feature descriptions would be very useful.... so if i search "all-interval" i could find AIR etc....
  20. 3 points
    You find them all in the snippet document.
  21. 3 points
    Eno/Byrne-esque 'Beat-Betas' as audition tape (i.e. 60 second continuous excerpts). Opusmodus generated MIDI...Mixed as "prototypes" in Logic 9.1.8,'auditioned' in iTunes 'live' to "Audio Hijack Pro".
  22. 3 points
    AM

    sorting algorithms

    i solved the problems. here is a workspace/files to experiment with SORTING ALGORITHMS thanx to torsten and philippe! greetings andré functions.opmo abstract examples.opmo sound examples.opmo sorting algorithms.opmows
  23. 3 points
    This example illustrate how this could be done: (metronome :omn (metronome phrase-lh) :channel 16 :sound 'gm :program 'woodblock) Function: (defun metronome (sequence &key (pitch 'c4) (velocity 'ff)) (let* ((ts (get-time-signature sequence)) (len (loop for i in ts collect (gen-repeat (last1 i) (gen-repeat (car i) (list (/ 1 (second i))))))) (vel (loop for i in ts collect (append (list velocity) (gen-repeat (1- (car i)) (list 'mf)))))) (make-omn :length len :pitch (list pitch) :velocity vel))) (setf sequence '((-h.) (-e g3cs3 mp arp fs3b2 arp-down g3as2 arp-down gs3as2 arp) (-e - fs3c3 f fs3as2 g3cs3 a3as2 gs3c3 gs3cs3) (-q._q))) (metronome sequence) => ((q c4 ff mf c4) (e c4 ff mf c4 c4 c4) (q c4 ff mf c4 c4) (e c4 ff mf c4 c4 c4)) Score example: (setf phrase-rh '((h. cs3gs2as5cs5cs4as3gs3g3as4gs4g4 f arp) (-e g5d5g4 mp arp fs5ds5fs4 arp-down g5ds5g4 arp-down gs5e5gs4 arp) (-e - a5d5 f c6f5 d5b5 g5d5 gs5ds5 gs5e5) (-e h c6d5cs5g4cs4g3d3 p arp-down))) (setf phrase-lh '((-h.) (-e g3cs3 mp arp fs3b2 arp-down g3as2 arp-down gs3as2 arp) (-e - fs3c3 f fs3as2 g3cs3 a3as2 gs3c3 gs3cs3) (-q._q))) (setf ts (get-time-signature phrase-lh)) (def-score arpeggiation-chords-3 (:key-signature 'chromatic :time-signature ts :tempo 60 :layout (harp-grand-layout '(rh lh))) (metronome :omn (metronome phrase-lh) :channel 16 :sound 'gm :program 'woodblock) (rh :omn phrase-rh :channel 1 :sound 'gm :program 'orchestral-harp) (lh :omn phrase-lh) ) I will add the METRONOME function to the next release. JP
  24. 3 points
    opmo

    Quantization

    Thank you Yuichi for sharing, great piece, I am very happy to see Opusmodus is able to help you realise your ideas.
  25. 3 points
    We will add this, I love it too :-)
×