Jump to content

Search the Community

Showing results for tags 'tonality-map'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Welcome To Opusmodus
    • Announcements
    • Pre Sales Questions
  • Support Forum
    • Support & Troubleshooting
    • OMN Lingo
    • Function Examples
    • Score and Notation
    • Live Coding Instrument
    • Library Setup
    • MIDI Setup, Templates and Customisation
  • Sharing
    • Made In Opusmodus
    • User Extensions Source Code
    • Suggestions & Ideas


  • Stephane Boussuge
  • Didier Debril


  • Tutorial Guide
  • OMN The Language


  • Getting Started
  • Howto
  • Live Coding
  • Music Theory and Analysis

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start



Website URL




About Me

Found 9 results

  1. I have a basic lisp question - I'd like to create a function that takes a tonality as its argument and performs something like the following line: (setf test (tonality-map '((pcs '3-2) :root b3 :map shift) (make-scale 'c4 12))) So (defun pitches (tonality) .....) - and then (pitches (pcs '3-2)) would return the list (b3 c4 d4 b4 c5 d5 b5 c6 d6 b6 c7 d7) Thanks so much!
  2. like this (?)... ;;; mapping to MAJOR (setf sort-seq (integer-to-pitch (flatten (gen-sort (rnd-order (gen-integer 24)) :type 'selection)))) (def-score example-score (:key-signature 'atonal :time-signature '(4 4) :tempo 90 :layout (treble-layout 'seq)) (seq :omn (make-omn :pitch (setf n (tonality-map '(major :map step :root 'c4) sort-seq)) :length (gen-repeat (length (flatten n)) '(t))))) ;;; mapping to MESSIAEN-mode (setf sort-seq (integer-to-pitch (flatten (gen-sort (rnd-order (gen-integer 24)) :type 'insertion)))) (def-score example-score (:key-signature 'atonal :time-signature '(4 4) :tempo 90 :layout (treble-layout 'seq)) (seq :omn (make-omn :pitch (setf n (tonality-map '(messiaen-mode5 :map step :root 'c4) sort-seq)) :length (gen-repeat (length (flatten n)) '(t))))) ;;; mapping to a XENAKIS-SIEVE -> how can i do that with TONALITY-MAP? (but not necessary) (setf sieve (gen-sieve '((c4 g7) (c1 g7)) '((2 1 12) (3 5)) :type :pitch)) (setf sort-seq (flatten (gen-sort (rnd-order (gen-integer (length sieve))) :type 'insertion :sort '?))) (def-score example-score (:key-signature 'atonal :time-signature '(4 4) :tempo 90 :layout (treble-layout 'seq)) (seq :omn (make-omn :pitch (setf n (loop for i in sort-seq collect (nth i sieve))) :length (gen-repeat (length (flatten n)) '(t)))))
  3. I like how the function tonality-map allows specifying some input harmony (called tonality) and raw music, where the "raw" music is then quasi-quantised into the given harmony. However, I would like to control in which octaves specific tones are allowed to occur. tonality-map allows specifying an underlying harmony that ranges over multiple octaves, but it seems that internally only octave-less pitch classes are used, and any tone in the harmony can occur in any octave in the result. By contrast, in the spectral tradition of music thinking, you change the underlying spectrum if you scramble in which octaves pitches occur. For example, if you have a spectrum or chord that approximates the overtone series, then that spectrum sounds rather consonant, regardless how far up in the overtone series you allow tones to be included. However, if you then randomly octave-transpose the pitches of this spectrum/chord, then it can become much more dissonant, without changing any pitch classes. To be more specific here is a dummy example with simple traditional chords where tones are distributed across octaves in a certain way. (tonality-map ;; underlying harmony or spectra '((c4g4e5b5d6) (g3d4b5f5a4)) ;; input music '((h c4f5 cs4fs5) (d4g5 cs4gs5) (eb4as5 f4a5) (e4gs5 c4gs5)) ;; harmonic rhythm :time '(w w w_w)) => ((h c4e5 c4g5) (h a3d5 g3d5) (h e4b5 e4b5) (h e4g5 c4g5)) As you can see, the tone G in the first tonality occurs only in octave 4, but in the result, in the second chord of the first bar (still following the first tonality) we have a g5 instead. Now, you might feel that the g5 does not musically do any harm, but in the second tonality, there is an A only in octave 6, while in the function output in the related third chord the A occurs three octaves lower in octave 3, where it greatly increases the dissonance degree of this chord/scale. So, is there a way to restrict the octaves of tones in the result to be restricted to the octaves of these tones in the respective tonalities? Alternatively, is there another function that complements tonality-map, where I can force some "raw" music to follow some underlying harmony with a given harmonic rhythm, and where the octaves of the resulting pitches can be restricted? Thank you! Best, Torsten
  4. Hello, I'm a little confused about how to include the :map step tonality form in this example. I start with my tonality-series: (setf g-tonality (tonality-series '( (0 3 5 7 10)) :root '(8 11 4 7 0 4 11 4 7 0 3 8 0 7 0 4 11 4 8 3 8 0 7 0 8 3))) Next, I grab an omn list: (setf bomn1 '(#|1|# (q^e.. b4 q^e.. -e e^s. b4) #|2|# (q^e.. a4 q^e.. -e e^s. d5) #|3|# (q^e.. d5 q^e.. cs5 -e e^s. g4) #|4|# (e.^et g4 s^t e4 q^e.. fs4 -e e^s. a4) #|5|# (e.^et d4 s^t e4 q^e.. f4 -e e^s. g4) #|6|# (e.^et g4 s e4 d4 e. c4 -e e4) #|7|# (e. a3 s b3 q c4 -e d4) #|8|# (e. d4 s b3 q g3 -) #|9|# (e. g5 3e^t fs5 t e5 q d5 -e s b5 tie 3e tie 3t tie) #|10|# (3t b5 q a5 a5 -e s a5 tie 3e tie 3t tie) #|11|# (3t a5 q q g5 -e s g5 tie 3e tie 3t tie) #|12|# (3t g5 e. s e5 b4 e. a4 -e s g5 tie 3e tie 3t tie) #|13|# (3t g5 e. s e5 e5 e. fs5 -e s a5 tie 3e tie 3t tie) #|14|# (3t a5 e. b5 s fs5 fs5 e. g5 -e s g5 tie 3e tie 3t tie) #|15|# (3t g5 q q cs5 -e s a4 tie 3e tie 3t tie) #|16|# (3t a4 e. s e4 e4 e. fs4 -e -s -3e -3t) #|17|# (-3t e fs4 tie t - e4 - q fs4 -e s. d4 -3s) #|18|# (-3t e g4 tie t - a4 - a4 - e. b4 -e s. g5 -3s) #|19|# (-3t e. e5 s b5 q a5 -e s a5 tie 3e tie 3t tie) #|20|# (3t a5 e tie t - fs5 - q ds5 -e s. fs5 -3s) #|21|# (-3t e g5 tie t - fs5 - q e5 tie s. -t s g5 tie 3e tie 3t tie) #|22|# (3t g5 q q f5 -e s a5 tie 3e tie 3t tie) #|23|# (3t a5 e. s fs5 q ds5 -e s fs5 tie 3e tie 3t tie) #|24|# (3t fs5 e. s ds5 t e5 ds5 e. e5 -3e e3 fs3 g3 a3 t b3 tie) #|25|# (3t b3 e e4 -s gs4 e. a4 s b4 e c5 tie s tie 3e tie 3t tie) #|26|# (e c5 tie 3t -s fs4 e. g4 s a4 e b4 tie s tie 3e tie 3t tie) #|27|# (e b4 tie 3t -s e4 e. fs4 s g4 e. a4 3e g4 tie 3t tie) #|28|# (3t g4 3s fs4 tie fs4 3t g4 tie t 3e fs4 cs4 d4 e4 fs4 e4 fs4 g4 fs4 g4 3e^t a4 g4 a4 b4 g4 t a4 tie) #|29|# (3t a4 3s b4 tie b4 3t c5 tie t 3e b4 fs4 g4 a4 3e^t b4 a4 b4 c5 b4 c5 d5 c5 d5 e5 c5 t d5 tie) #|30|# (3t d5 3s e5 tie e5 3t f5 tie t 3e e5 b4 c5 d5 3e^t e5 d5 e5 fs5 e5 fs5 g5 fs5 g5 a5 fs5 t g5 tie) #|31|# (3t g5 3s a5 tie a5 3t b5 tie t 3e a5 fs5 g5 a5 b5 a5 b5 d6 c6 b5 a5 g5 fs5 e5 d5 t c5 tie) #|32|# (3t c5 3s b4 tie b4 3t a4 tie t 3e g4 fs4 g4 d4 s. b3))) And finally, do the tonality map: (setf mapped-g (omn-to-time-signature (tonality-map g-tonality bomn1 :time '(4/8 2/8 4/8 2/8 3/4 4/8 2/8 4/8 2/8 4/8 2/8 3/4 4/8 2/8 3/4 4/8 2/8 3/4 4/8 2/8 3/4 4/8 2/8 3/4 4/8 2/8) :loop t ) '(3 4))) Ok, all of that works, but I'd like to use :map step when I create the tonality-map, and I can't figure out where to put that. It seems like it wants to be part of a list with, in my example, g-tonality, but I'm not seeing quite how to do it. Any tips would be greatly appreciated. Thanks!, Michael
  5. Added new keyword :type to TONALITY-MAP and TONALITY-SERIES function with three options: prime-form, normal-order and row. Examples: (setf seq2 (rnd-row :type :pitch :seed 345)) => (c4 d4 g4 f4 cs4 b4 gs4 e4 fs4 a4 bb4 eb4) (tonality-map '((0 1 11 6 3 2 4 9) :map step :type normal-order) seq2) => (a4 c4 fs4 eb4 b4 cs5 a5 d4 e4 b5 c5 cs4) (tonality-map '((0 1 11 6 3 2 4 9) :map step :type prime-form) seq2) => (c4 eb4 a4 fs4 d4 e5 c5 f4 g4 d5 eb5 e4) (tonality-map '((0 1 11 6 3 2 4 9) :map step :type row) seq2) => (c4 d4 b4 fs4 cs4 eb5 c5 e4 a4 cs5 d5 eb4) (tonality-map '((0 1 11 6 3 2 4 9) :map step :type normal-order :rotate 1) seq2) => (b4 cs4 a5 e4 c4 d5 b5 eb4 fs4 c5 cs5 d4) (tonality-map '((0 1 11 6 3 2 4 9) :map step :type prime-form :rotate 1) seq2) => (d4 e4 c5 g4 eb4 f5 d5 fs4 a4 eb5 e5 f4) (tonality-map '((0 1 11 6 3 2 4 9) :map step :type row :rotate 1) seq2) => (cs4 eb4 c5 a4 d4 e5 cs5 fs4 b4 d5 eb5 e4) Best wishes, JP
  6. Changes to TONALITY-MAP function: The map shift name is changed to step. The sort by default is nil. The function TONALITY-MAP can be used to map tonalities on to a chromatic pitch series. There are two types of map: step and NIL. The step map use the sequence interval steps to map the tonalities on to the sequence. The map NIL use the sequence integers to map the tonalities to the closest integer on to the sequence. In the following example we use the closest type map: (tonality-map '((0 2 4 7 9 11)) '(c4 cs4 d4 cs4 eb4 f4 e4)) => (c4 d4 d4 c4 e4 f4 e4) Here we use the step map: (tonality-map '((0 2 4 7 9 11) :map step) '(c4 cs4 d4 cs4 eb4 f4 e4)) => (c4 d4 e4 d4 g4 b4 a4) New keywords :extend and :end added to the GEN-DYNAMIC and VELOCITY-TO-DYNAMIC function: GEN-DYNAMIC Example with optional :end velocity value: (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f) :end 'p) => (pp< < < f< < < < < ff> > > > mf< < < < f> > > > p) (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f) :end '>) => (pp< < < f< < < < < ff> > > > mf< < < < f> > > > >) (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f) :end '<) => (pp< < < f< < < < < ff> > > > mf< < < < f< < < < <) (gen-dynamic '((3 5) (4 4) (5 3)) '((pp f) (p mf) (f p)) :end 'f) => ((pp< < < f> > > > >) (p< < < < mf< < < <) (f> > > > > p< < f)) Setting the :extend to t will removes intermediate textual dynamic indicators and replace them with extended hairpins: (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f) :end 'p :extend t) => (pp< < < < < < < < ff> > > > mf< < < < f> > > > p) (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f) :end '< :extend t) => (pp< < < < < < < < ff> > > > mf< < < < < < < < <) (gen-dynamic '((3 5) (4 4) (5 3)) '((pp f) (p mf) (f p)) :end 'f :extend t) => ((pp< < < f> > > > >) (p< < < < < < < <) (f> > > > > p< < f)) VELOCITY-TO-DYNAMIC (velocity-to-dynamic '(p p mp mp f ff mp mp p f)) => (p< < mp< < f< ff> mp> > p< f) (velocity-to-dynamic '(p p mp mp f ff mp mp p f) :extend t) => (p< < < < < ff> > > p< f) (velocity-to-dynamic '(p p mp mp f ff mp mp p f) :end 'pp) => (p< < mp< < f< ff> mp> > p> pp) (velocity-to-dynamic '((pppp ppp ppp pp ppp p p mp mf mf) (f ff mf mp p ppp pppp))) => ((pppp< ppp< < pp> ppp< p< < mp< mf< <) (f< ff> mf> mp> p> ppp> pppp)) Setting the :extend to t will removes intermediate textual dynamic indicators and replace them with extended hairpins: (velocity-to-dynamic '(p p mp mp f ff mp mp p f) :end 'pp :extend t) => (p< < < < < ff> > > > pp) (velocity-to-dynamic '((pppp ppp ppp pp ppp p p mp mf mf) (f ff mf mp p ppp pppp)) :extend t) => ((pppp< < < pp> ppp< < < < < <) (f< ff> > > > > pppp)) Please check the documentation for more details. If you used the TONALITY-MAP with :map shift then you need to change the name shift to step. To make the changes to all of your scores you can use the 'Search Files...' tool. Minor fixes and code optimisation. Best wishes, JP
  7. i'm sure that it would also work with tonality-map, but i was interested to code a simple version for my own to understand all the things :-) ;;; i wanted to map every interval-sequence to every possible pitchfield... ;;; all the sequences are "centered" (i needed that for my project) ;;; with :base you could move up and down the center ;;; :pitchfield has to be a OMN-pitch-sequence ;;; FUNCTION (defun interval-projection-on-pitchfield (&key pitchfield intervals (base 0)) (let ((integers (pitch-to-integer (interval-to-pitch intervals))) (base-0-integers) (centering) (pos)) (setq base-0-integers (loop for i in integers collect (+ (abs (find-min integers)) i))) (setq centering (if (evenp (find-max base-0-integers)) ;; finds the center of the seq (/ (find-max base-0-integers) 2) (/ (1+ (find-max base-0-integers)) 2))) (loop for i in base-0-integers do (setq pos (+ i (* -1 centering) base)) ;; compensating center & base when (< pos 0) do (setq pos 0) ;; corr if intervals to big (+/-) when (> pos (1- (length pitchfield))) do (setq pos (1- (length pitchfield))) collect (nth pos pitchfield)))) ;;; EXAMPLE (interval-projection-on-pitchfield :pitchfield (append (expand-tonality '(c4 messiaen-mode5)) (expand-tonality '(c5 messiaen-mode5)) (expand-tonality '(c6 messiaen-mode5))) :intervals '(1 2 3 1 2 -4 -3 -2 3 5 7 -2) :base 12) short question: is there a possibilty to build this (append (expand-tonality '(c4 messiaen-mode5)) (expand-tonality '(c5 messiaen-mode5)) (expand-tonality '(c6 messiaen-mode5))) with ONE function (i need more ambitus then 1 octave)... thanx, andré
  8. Here is a small project to explore pitch-mapping. There are some results but not the best ones yet. If anyone has an idea on how to improve this I would really appreciate the advice. What would be ideal as the result would be the same musical list (and notation) but with the transformed pitches. As you can see from the result, there are many changes and the result is not clean but rather seriously garbled instead! The goal is to remap the pitch content of the original with a new tonality-map. Here is the beginning attempt. A confusing element is the return of NIL when parsing :articulation from the original material. ;;; Pitch mapping project idea ;;; Original musical sequence: (setf alto-flute-orig '( (-q e b4 -e (-app e eb4 f4) h. eb4 (-acc e f4 eb4 f4)) (-3q 3q b4 -3q (-app e eb4 f4) q eb4 (-acc e f4) h eb4 (-acc e f4 a4 b4)) (-q e f5 -e (-app e b4 ds5) a4 (-app e. g4) a4 t b4 a4 b4 -e (-app e eb5) e f5) ((acc e b4 d5 ds5) q. c5 (acc s f5) e. b4 (acc e c5 d5 ds5) e. a4 (acc e b4 a4) e b4) (-q e b4 (app e f4 a4 f4) e b4 t g4 a4 eb4 a4 q. b4 (-acc e f4 a4) h bb4 t bb4 c5) (-e. b4 -e (acc a4 b4) h bb4 (app e c5) q b4 (acc e d5 ds5 e5) q. b4 (app e f4 bb4) s c5) (-e gs5 3s a4 d4 gs4 -e. bb4 tie q bb4 (3e b4 a4 b4 -e -e)) ((acc e a4 b4 fs4) h c5 (acc e b4) q c5 (acc e ds5 e5 fs5) 3e b4 c5 fs4 q a4 tie q a4 tie e. a4 s bb4 a4 e b4) (-e (acc e eb4) h f4 tie e. f4 s gb5 -e (acc eb5 f5) e e5 tie q e5 tie 3q e5 3q e5 3q f5 3q b4 -3q -3q) ((acc e bb4 b4) a4 (acc e bb4) h a4 (acc e bb4) e a4 s gs5 -s) ) ) ;;; ;;; Disassemble OMN: There are some errors here - in particular for :articulation which seems to return NIL (disassemble-omn alto-flute-orig) (setf pit (omn :pitch alto-flute-orig)) (setf len (omn :length alto-flute-orig)) ;;; next line result is confusing - returns nil (setf art (omn :articluation alto-flute-orig)) ;;; next line returns a result (setf artr (omn :rest-articulation alto-flute-orig)) ;;; Create 12-tone mapping and pitch transformation of original (setf map '(0 1 3 4 7 8 10 11 17 18 21)) (setf mapping (integer-to-pitch map)) (create-tonality 12T2 '(0 1 3 4 7 8 10 11 17 18 21)) (setf output (tonality-map '(12T2 :root c3 :fixed t) pit)) ;;; Assemble the parameters into a new OMN with transformed pitches (make-omn :length len :pitch output :articulation art :rest-articulation artr ) ;;; The result is unsuable so far. There are some things to iron-out here! :-)
  9. Greetings friends, I have a little project I am working on - to map a two-octave scale 12-tone scale. I want to be able to re-write pitches into this scale and to use the results in both harmonic and melodic contexts. However, I am finding some puzzlement! Here is a code fragment of what I am working on: (create-tonality 12-tone-2 '(0 1 3 4 7 8 10 11 14 17 18 21)) (tonality-map '(12-tone-2 :root c4 :shift t) '(c3 d3 e3 f3)) My thought is that it SHOULD result in: 0 1 3 4 - c cs ds e - as the result. Specifically: c4 cs4 ds4 e4 (or the enharmonic equivalent). But, the result is: c eb (ds) g gs !! Specifically: c3 ebb g3 gs3. Perhaps someone can help by pointing out my mistake? With thanks, Robert
  • Create New...