Posted May 16May 16 I want to map a melody over chords taking into consideration both of their durations.(setf motif '(s b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3))(setf chords '(q c3e3g3 d3f3a3 h g3b3d3))(setf map-1 (harmonic-path chords motif))yet I get(s c3 e3 g3 d3 f3 a3 g3 b3 d3 c3 e3 g3 d3 f3 a3 g3)I find that no matter what notes I put in motif, I always get the same result which is just the 9 chord notes being arppegiated 16 times in sequence.Ideally I would like the notes of motif, to find it's closest match in the chord.
May 16May 16 Author Thanks,So this seems to work.(setf motif '(s b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3 b3))(setf chords '(q c3e3g3 d3f3a3 h g3b3d3))(tonality-map (tonality-series (omn :pitch chords)) motif :time (omn :length chords))Actually looks like I can simplify to(tonality-map (tonality-series chords) motif :time (omn :length chords))Is that the correct approach
May 16May 16 It’s a viable approach, but I prefer using more variables for better code visibility.Also, don’t forget to handle the :map parameter (refer to the documentation for more details).For instance, your example could look like this:(setf motif ‘((s b3 c4 d4 e4 fs4 g4 b4 a4) (s e5 d5 b4 c5 a4 g4 e4 b3)))(setf harmonic-rhythm ‘(q q h))(setf chords ‘((c3e3g3) (d3f3a3) (g3b3d3)))(setf path (tonality-series chords :map ‘(octave)))(setf p1 (tonality-map path motif :time harmonic-rhythm))However, since you’ll have repeated notes due to the proximity of your chords, I recommend using harmonic-path for a more musical result.Here’s an example:(setf motif ‘((s b3 c4 d4 e4 fs4 g4 b4 a4) (s e5 d5 b4 c5 a4 g4 e4 b3)))(setf harmonic-rhythm ‘(q q h))(setf chords ‘((c3e3g3) (d3f3a3) (g3b3d3)))(setf p1 (harmonic-path chords motif :time harmonic-rhythm))Alternatively, you can still use tonality-map but with a step mapping type.Here’s an example:(setf motif ‘((s b3 c4 d4 e4 fs4 g4 b4 a4) (s e5 d5 b4 c5 a4 g4 e4 b3)))(setf harmonic-rhythm ‘(q q h))(setf chords ‘((c4e4g4) (d4f4a4) (g4b4d4)))(setf path (tonality-series chords :map ‘(step)))(setf p1 (tonality-map path motif :time harmonic-rhythm))
May 16May 16 Author Thanks! I got these all working. I can't seem to tell exactly what the :map '(step) is doing? What is the purpose of the map parameter. It doesn't seem to be document except for the values you can use.
May 16May 16 The :map ‘(step) parameter will take each note from your motif material as an index number to pick in the Mapping reference, for example if your motive is c4 d4 e4 = 0 2 4 and your mapping reference is: f4 g4 a4 b4 c5 d5 e5 you will get: f4 a4 c5.If you don’t use map (:map nil), your mapping reference have to cover the entire range of your material (motif in this case).This feature is extremely useful for mapping large spectral chords on a full orchestra, as demonstrated in the example I’ve attached to this post.On the other hand, if you want to map on a simple one-octave scale, it’s best to use :map ‘(octave) because it will « replicate » your scale on each octave to ensure a correct mapping. If you use :map nil for a simple scale with a one-octave range, your output will never be wider than the octave of the mapping scale. That’s why it’s important to use :map ‘(octave) in that specific case.SpectralExample.mp3SpectralExample.opmo
May 19May 19 Author I wanted to better understand the nuances of the map types for tonality-series and tonality-mapLooking more closesly, I'm still confused with the result of step and octave. I think the only two I truly understand are nil and extend.;; Here is a simple example to test the map types(setf motif ‘((q c3 e3 g3 c3)))(setf harmonic-rhythm ‘(w))(setf chords ‘((c3e3g3)))(setf path (tonality-series chords :map ‘(nil))) ;; results of different map types are listed below(setf p1 (tonality-map path motif :time harmonic-rhythm));; results of different map typesnil = ((q c3 e3 g3 c3))step = ((q c3 e4 e5 c3)) ???????octave = ((q g2 g2 g2 g2)) ????????spectra = ((q c3 e3 g3 c3))extend = ((q c3 e3 g3 c3));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(setf motif ‘((q c5 e5 g5 c5)))(setf harmonic-rhythm ‘(w))(setf chords ‘((c3e3g3)))(setf path (tonality-series chords :map ‘(nil))) ;; results of different map types are listed below(setf p1 (tonality-map path motif :time harmonic-rhythm));; results of different map typesnil = ((q g3 g3 g3 g3)) -- g3 is the closet note to each of the motif notes, makes sensestep = ((q c3 e4 e5 c3)) ???????octave = ((q g4 g4 g4 g4)) ????????spectra = ((q c3 e3 g3 c3))extend = ((q c5 e5 g5 c5))
May 19May 19 ;; Here is a simple example to test the map types(setf motif ‘((q c3 e3 g3 c3)))(setf harmonic-rhythm ‘(w))(setf chords ‘((c4e4g4))) I've change that chord to start on C4 (0)(setf path (tonality-series chords :map nil)) ;; results of different map types are listed below(setf p1 (tonality-map path motif :time harmonic-rhythm));; results of different map typesnil = ((q c4 c4 c4 c4)) ;; Normal because with this kind of mapping you need a large mapping mat. covering the range you are using in your motives.step = ((q c4 e5 e6 c4)) ; index are negatives in your example (c3 = -12) here, you have to use as mapping mat. a chord based on C4 (index = 0) like in this exampleoctave = (q c3 e3 g3 c3)spectra = ((q c4 e4 g4 c4))extend = ((q c3 e3 g3 c3))
May 19May 19 Author Thanks, I didn't realize that these were getting mapped to negative numbers below c4. Is this a form of music theory that I can study somewhere or is this only an opusmodus feature? If so, what is this theory called so I can study it. In Step, why does the 3rd note map to e6. what math is happening?
May 19May 19 Chord C4 E4 G4 .. C5 E5 G5 C6 E6 G6 C7...Index 0. 1. 2.... 3. 4. 5. 6. 7. 8. 9G4 in motif = index: 7 = E6 in the chord mapping.
May 20May 20 Author So G4 = index: 7because c4 = 0, then cs4 = 1d4 = 2ds4 = 3e4 =4f4 = 5fs4 =6g4 = 7 ***So then I would assume(setf motif ‘((q c4 cs4 d4 ds4 e4 f4 fs4 g4))) would result in C4 E4 G4 C5 E5 G5 C6 E6 yet it results in ((q c4 e4 g4 c5 c4 e4 g4 c5)). So in this case g4 index 7 mapped to c5, which would indicate index 3 ?I think I'm missing how g4 in the original motif has index 7, because in this later motif it seems to have index 3?
May 20May 20 Index is only for Step mapping.All works fine here.(setf motif ‘((q c4 cs4 d4 ds4 e4 f4 fs4 g4)))(setf chord '((c4e4g4 :map 'step)))(tonality-map chord motif);=>((q c4 e4 g4 c5 e5 g5 c6 e6))
May 20May 20 Author Doing it in the style we were before, is working differently(setf motif ‘((q c4 cs4 d4 ds4 e4 f4 fs4 g4)))(setf harmonic-rhythm ‘(w))(setf chords ‘((c4e4g4)))(setf path (tonality-series chords :map ‘(step)))(setf p1 (tonality-map path motif :time harmonic-rhythm))Oh, it's length of the motif. If I change it to eighth notes, it worksSo I assume with the way I have it, the index of the motif is resetting to 0 on e4
Create an account or sign in to comment