Jump to content
Sign in to follow this  

Modelling Tonality (1) Diatonic Transposition (some intuitions)

Recommended Posts

I'm thinking about the formal conditions of the diatonic transposition.

It may seem trivial, but actually is much more difficult than it appears.

I think that modelling tonality and diatonic stuff is far more difficult

 than  the 12-tone operations.

One of the things I think is that in diatonic transposition you need to

 inform more to the machine, a kind of axis point or map, because the transposition

 of each degree is going to be different.

In the case of the diatonic set, the MyHill property assures that each diatonic distance

 will be in exactly 2 sizes. Seconds: major and minor; Thirds: major and minor;

Fourths: perfect and augmented; Fifths: perfect and diminished and so on...


The Morris pitch spaces are also part of the problem...


Do you have any hint in relation to this intuitions to share ?

Maybe the way that OM make this operations ?





Share this post

Link to post
Share on other sites

Here's my way for diatonic transposition.

It is very simple but do exactly what i want when composing


I use this system extensively in all my compositions now, not always in diatonic context but also with synthetic modes, row, algorithmic pitch material etc...

I love the concept of degree and transpositions inside a scale and use that technique very often.

(setf motiv '((q c4 e4 g4)(q c4 e4 g4)(q c4 e4 g4)(q c4 e4 g4)(q c4 e4 g4)))

(setf degree '(1 4 2 5 1))
(setf harmonic-path (harmonic-progression
                     '(c4 major)
                     :step 1
                     :size 7
                     :base 1
(setf p1 (tonality-map (mclist harmonic-path)  motiv))




Share this post

Link to post
Share on other sites

You already know how to translate a MIDI pitch number into a representation consisting of two pieces of information, a pitch class integer and an octave integer. The conversion can be applied in both directions.


Now, you can apply a similar conversion to a pitch class integers, converting them into a scale degree (integer) and an accidental (another integer), depending on a scale (a set of pitch classes). Again, this conversion can be done in both ways (there are multiple solutions if you allow for enharmonic equivalence).


Once you have such a representation, you can then do diatonic transpositions (depending on whatever scale) within the scale degree domain, and finally translate your  results back into pitch classes, or MIDI pitch numbers.


I have a draft of a paper discussing this formally. A preliminary version of this paper has been published at SMC, http://uobrep.openrepository.com/uobrep/handle/10547/622264 Don't get scared away by the constraint programming aspect. Such conversions can also be implemented as plain deterministic functions.


This can be seen as a kind of mapping, if you want, if you also see the relation between MIDI pitch numbers and pitch classes as a mapping :)





Share this post

Link to post
Share on other sites

Thank you, Torsten. You are digging a lot into the realm of modelling tonality. I think that this is really something more interesting than brownian motions, stochastic stuff,  because there are many constraints in the tonality and also idiomatisms. Models like the xenakian one are amazing but the are in the realm of math. I'd like to find something more idiomatic.



Share this post

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Topics

    • By terekita
      So, this obviously works:
      (setf pitch (integer-to-pitch '(20 19 18 15))) (tonality-map '(minor-pentatonic :root c0 :map step :rotate 20) pitch) but this—passing in a variable to the :rotate key—doesn't. (Assuming because it's inside a quoted list?)
      (let ((offset 20)) (tonality-map '(minor-pentatonic :root c0 :map step :rotate offset) pitch))  
      I'd like to do something like the latter because I'd like to dynamically pass in changing values for :rotate. Any tips or suggestions?
      thanks for taking a look, Michael
    • By AM
      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)))))  
    • By torstenanders
      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! 
  • Create New...