Jump to content
View in the app

A better way to browse. Learn more.

Opusmodus

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

tonality-map changed behavior

Featured Replies

The tonality-map function isn't working as expected on my Intel MacBook Pro (Monterey 12.6.6) in Opusmodus (v3.0.29006). I have an Opusmodus v2.2.26941M on an Intel iMac (Monterey 12.6.7) that I have tested and it yields something more like I'd expect. Did the default behavior of tonality-map change between versions?  Below, I've included sample code along with the different output from the two different versions.

 

Thanks,

Jon

 

;;; code -- common between versions

(setf progression (harmonic-progression
                   '(1 6 4 2 5 1 2 4 5)
                   '(c4 natural-minor)
                   :size 7
                   :step 1
                   :base 1
                   ))

(setf progression-list (mclist progression))

(setf accomp-shell '((q c3 p g3e4 c4e4 e3c4)))

(setf accomp-phrase (gen-repeat 8 accomp-shell))

(setf accomp-map (tonality-map progression-list accomp-phrase))

;; Opusmodus 3 output
OM 2 > harmonic-progression
(c4d4eb4f4g4gs4bb4 gs4bb4c5d5eb5f5g5 f4g4gs4bb4c5d5eb5 d4eb4f4g4gs4bb4c5 g4gs4bb4c5d5eb5f5 c4d4eb4f4g4gs4bb4 d4eb4f4g4gs4bb4c5 f4g4gs4bb4c5d5eb5 g4gs4bb4c5d5eb5f5)

OM 3 > mclist
((c4d4eb4f4g4gs4bb4) (gs4bb4c5d5eb5f5g5) (f4g4gs4bb4c5d5eb5) (d4eb4f4g4gs4bb4c5) (g4gs4bb4c5d5eb5f5) (c4d4eb4f4g4gs4bb4) (d4eb4f4g4gs4bb4c5) (f4g4gs4bb4c5d5eb5) (g4gs4bb4c5d5eb5f5))

OM 4 > 
((q c3 p g3e4 c4e4 e3c4))

OM 5 > gen-repeat
((q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4))

OM 6 > tonality-map
((q c4 p c4f4 c4f4 c4) (q gs4 p gs4 gs4 gs4) (q f4 p f4 f4 f4) (q d4 p d4f4 d4f4 d4) (q g4 p g4 g4 g4) (q c4 p c4eb4 c4eb4 c4) (q d4 p d4eb4 d4eb4 d4) (q f4 p f4 f4 f4))

;; Opusmodus 2 output
? harmonic-progression
(c4d4eb4f4g4gs4bb4 gs4bb4c5d5eb5f5g5 f4g4gs4bb4c5d5eb5 d4eb4f4g4gs4bb4c5 g4gs4bb4c5d5eb5f5 c4d4eb4f4g4gs4bb4 d4eb4f4g4gs4bb4c5 f4g4gs4bb4c5d5eb5 g4gs4bb4c5d5eb5f5)
? mclist
((c4d4eb4f4g4gs4bb4) (gs4bb4c5d5eb5f5g5) (f4g4gs4bb4c5d5eb5) (d4eb4f4g4gs4bb4c5) (g4gs4bb4c5d5eb5f5) (c4d4eb4f4g4gs4bb4) (d4eb4f4g4gs4bb4c5) (f4g4gs4bb4c5d5eb5) (g4gs4bb4c5d5eb5f5))
? 
((q c3 p g3e4 c4e4 e3c4))
? gen-repeat
((q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4))
? tonality-map
((q c3 p g3f4 c4eb4 f3c4) (q gs3 p eb4c5 gs4c5 c4gs4) (q f3 p c4bb4 f4gs4 gs3f4) (q d3 p bb3f4 d4g4 g3d4) (q g3 p d4c5 g4bb4 bb3g4) (q c3 p g3eb4 c4f4 eb3c4) (q d3 p gs3f4 d4g4 g3d4) (q f3 p c4bb4 f4bb4 bb3f4))
? 

 

Hi Jon,

 

indeed the tonality-map behaviour is changed recently for very good reasons and now you can do extraordinary things with tonality-map like mapping a full orchestra with a pitch remapping by register according to each playing register for the instruments.

This is the default now for tonality-map (:map nil), it means tonality-map remap always to the closest pitch according to the register, so if you provide some chords, it is necessary to extend the register of this chords before the mapping using the keyword :map '(octave). There is also another possibility: :map '(extend) and :map '(step).

 

To get your intended output, you have to use :map '(octave) like this:

 

(setf progression (harmonic-progression
                   '(1 6 4 2 5 1 2 4 5)
                   '(c4 natural-minor)
                   :size 7
                   :step 1
                   :base 1
                   ))

(setf progression-list (mclist progression))

(setf accomp-shell '((q c3 p g3e4 c4e4 e3c4)))

(setf accomp-phrase (gen-repeat 8 accomp-shell))

;;; Here i'm preparing the harmonic path with the keyword :map '(octave)
(setf path (tonality-series progression-list :map '(octave)))

(setf accomp-map (tonality-map path accomp-phrase))

Best !

 

Stéphane

 

Create an account or sign in to comment


Copyright © 2014-2026 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

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.