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

12 tone issue

Featured Replies

Dear Friends,

 

I was revisiting some 12-tone theory today and I found something strange:

 

This returns NIL

 

(twelve-tonep '(c3 eb3 d3 f3 e3 g3 fs3 a3 gs3 b3 bb3 cs4))

 

but this returns TRUE

 

(twelve-tonep '(c4 eb4 d4 f4 e4 g4 fs4 a4 gs4 b4 bb4 cs4))

 

It´s the SAME tone-row

 

NIL for this

(twelve-tonep (pitch-transpose -12 '(c4 eb4 d4 f4 e4 g4 fs4 a4 gs4 b4 bb4 cs4)))

 

TRUE for this

 

(twelve-tonep (pitch-transpose 0 '(c4 eb4 d4 f4 e4 g4 fs4 a4 gs4 b4 bb4 cs4)))

 

Maybe the algorithm to find the row is based in the c4 octave...

 

I don´t know...

 

Best

 

Despite the documentation says Return true if sequence is a twelve-tone row, from what I observed it seems the algorithm used is:

 

(defun twleve-tone-p (omn)
  (equal (sort (pitch-to-integer omn) #'<) (range 0 11)))

 

I think you might want this:

(defun tw-p (omn)
  (equal (let ((x (sort (pitch-to-integer omn) #'<)))
           (x-b x (apply #'min x)))
         (range 0 11)))

 

And in you example it seems should be '(c3 eb3 d3 f3 e3 g3 fs3 a3 gs3 b3 bb3 cs3) instead of cs4.

 

(let ((x (pitch-to-integer '(c3 eb3 d3 f3 e3 g3 fs3 a3 gs3 b3 bb3 cs3))))
           (x-b x (apply #'min x)))

(0 3 2 5 4 7 6 9 8 11 10 13)

 

  • Author

Dear Janusz,

 

Just for testing. When the octave changes, the function give wrong result.

I´m doing a workaround putting before an (ambitus-octave c4 1

 

Best,

Julio

Maybe it´s better to embed the ambitus constraint in the function or something similar in order to get right results in any octave.

Since the concept of "pitch class" is octave independent...

  • Author

Is this a  wrong use ?

 

(twelve-tonep '(c3 eb3 d3 f3 e3 g3 fs3 a3 gs3 b3 bb3 cs4))

 

 

why ?

Quote

Since the concept of "pitch class" is octave independent...

Use modus first and than the twelve-tonep

 

This is correct:

(twelve-tonep '(c3 eb3 d3 f3 e3 g3 fs3 a3 gs3 b3 bb3 cs4))
=> nil

 

is not 12 tone row.

 

With modus:

(twelve-tonep (modus '(c3 eb3 d3 f3 e3 g3 fs3 a3 gs3 b3 bb3 cs4)))
=> t

 

  • Author

Thanks. 

It have to be constrained in one octave.

 

 

I´ll remember to put modus before any octave independent use of tone-row.

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

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.