Jump to content

Featured Replies

Posted

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.

  • 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

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))

  • 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.

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.opmo

  • Author

Thank you very much Stephane, I understand now.

  • Author

I wanted to better understand the nuances of the map types for tonality-series and tonality-map

Looking 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 types

nil = ((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 types

nil = ((q g3 g3 g3 g3)) -- g3 is the closet note to each of the motif notes, makes sense

step = ((q c3 e4 e5 c3)) ???????

octave = ((q g4 g4 g4 g4)) ????????

spectra = ((q c3 e3 g3 c3))

extend = ((q c5 e5 g5 c5))

;; 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 types

nil = ((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 example

octave = (q c3 e3 g3 c3)

spectra = ((q c4 e4 g4 c4))

extend = ((q c3 e3 g3 c3))

  • 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?

  • Author

So G4 = index: 7

because c4 = 0, then

cs4 = 1

d4 = 2

ds4 = 3

e4 =4

f4 = 5

fs4 =6

g4 = 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?

  • 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 works

So 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


Copyright © 2014-2025 Opusmodus™ Ltd. All rights reserved.
Product features, specifications, system requirements and availability are subject to change without notice.
Opusmodus, the Opusmodus logo, and other Opusmodus trademarks are either registered trademarks or trademarks of Opusmodus Ltd.
All other trademarks contained herein are the property of their respective owners.

Powered by Invision Community

Important Information

Terms of Use Privacy Policy