Jump to content
Sign in to follow this  
opmo

Opusmodus 1.2.23354

Recommended Posts

Opusmodus 1.2.23354


New: All-Combinatorial Hexachords

 

GEN-AC-HEXACHRD

AC-HEXACHORD-COMPLEMENT-FORM-SET

HEXACHORD-COMPLEMENT

 

________________________________

 

The function GEN-AC-HEXACHRD generate a hexachord (H1) set and its complement (H2) set form a given name (all-combinatorial hexachords) by randomising the order and applying an inversion into the the H1 set first. The result is a sequence with two hexachords, H1 and H2 or an aggregate (twelve-tone row). The AC in the function name stand for 'All-Combinatorial Hexachords'.

 

All-Combinatorial Hexachords names and there pitch class prime form sets:

 

A = (0 1 2 3 4 5)

B = (0 2 3 4 5 7)

C = (0 2 4 5 7 9)

D = (0 1 2 6 7 8)

E = (0 1 4 5 8 9)

F = (0 2 4 6 8 10)

 

All-Combinatorial Hexachords in Forte notation:

 

 

(pcs-prime-form
'((0 1 2 3 4 5)
  (0 2 3 4 5 7)
  (0 2 4 5 7 9)
  (0 1 2 6 7 8)
  (0 1 4 5 8 9)
  (0 2 4 6 8 10)
  ) :forte)
=> (6-1 6-8 6-32 6-7 6-20 6-35)

 

 

Example:

In the first example we use A set (0 1 2 3 4 5):

 

 

(gen-ac-hexachord 'a)
=> ((6 4 3 1 5 2) (7 9 10 0 8 11))

 

 

Here the result is a twelve-tone row (aggregate):

 

 

(gen-ac-hexachord 'b :aggregate t)
=> (11 7 2 9 10 0 4 8 1 6 5 3)

 

 

In the example below the hexachords are generated from set C and with start 0:

 

(gen-ac-hexachord 'c :start 0)
=> ((0 2 5 4 9 7) (3 1 10 11 6 8))

(gen-ac-hexachord 'd :aggregate t :start 7)
=> (7 11 5 1 0 6 8 4 10 2 3 9)

(gen-ac-hexachord 'e)
=> ((0 9 8 1 5 4) (3 6 7 2 10 11))

(gen-ac-hexachord 'f :seed 456)
=> ((9 1 7 5 11 3) (4 0 6 8 2 10))

 

________________________________

 

The function AC-HEXACHORD-COMPLEMENT-FORM-SET returns all form sets with all combinations of the complement hexachord (H2) set.

 

Example:

(setf ac-hex '((0 4 5 11 6 10) (7 3 1 2 9 8)))

(ac-hexachord-complement-form-set ac-hex)
=> ((9 1 2 8 3 7) (3 7 8 2 9 1)
    (8 7 2 3 1 9) (2 1 8 9 7 3)
    (7 3 2 8 1 9) (1 9 8 2 7 3)
    (8 9 2 1 3 7) (2 3 8 7 9 1))

 

Here we reverse the hexachords order:

 

 

(ac-hexachord-complement-form-set (reverse ac-hex))
=> ((10 6 4 5 0 11) (4 0 10 11 6 5)
    (0 4 11 5 6 10) (6 10 5 11 0 4)
    (0 4 6 5 10 11) (6 10 0 11 4 5)
    (10 6 11 5 4 0) (4 0 5 11 10 6))

 

 

In the next example we generate the all-combinatorial hexachords with GEN-AC-HEXACHORD function:

 

 

(setf hexachords (gen-ac-hexachord 'd :seed 965)
=> ((11 5 3 10 9 4) (6 0 2 7 8 1))

(ac-hexachord-complement-form-set hexachords)
=> ((8 2 0 7 6 1) (2 8 6 1 0 7)
    (1 6 7 0 2 8) (7 0 1 6 8 2)
    (6 0 2 7 8 1) (0 6 8 1 2 7)
    (1 8 7 2 0 6) (7 2 1 8 6 0))

 

 

To get the form set names we set the keyword :form-names to T:

 

 

(ac-hexachord-complement-form-set
(gen-ac-hexachord 'c :seed 965) :form-names t)
=> (p6 ri3 i9 r0)

(rnd-octaves '(c2 c6)
(rnd-order
  (get-form-set (gen-ac-hexachord 'c :seed 965)
                '(p6 ri3 i9 r0) :segment '(3 3) :type :pitch)))
=> ((gs3 c5 f5) (eb4 bb2 cs5) (d4 b4 g2) (e3 fs2 a2)
    (cs3 eb5 bb4) (f4 c4 gs2) (e5 fs3 a4) (g2 d3 b3)
    (f2 cs5 gs4) (eb5 bb3 c3) (d4 b4 fs3) (e5 a3 g5)
    (bb2 c4 eb5) (f3 cs4 gs4) (a3 e4 g2) (b2 d4 fs4))

 

 

________________________________

 

This function collect complement pitch classes of a given hexachord. The combination of the hexachord and of the result will constitute the makeup of an aggregate (twelve-tone row).

 

Example:

(hexachord-complement '(0 1 2 6 7 8))
=> (5 4 3 11 10 9)

(hexachord-complement '(0 1 2 6 7 8) :pitch)
=> (f4 e4 eb4 b4 bb4 a4)

 

________________________________

 

Small changes to the documentation structure.Function name changes:

12tone-analysis -> twelve-tone-analysis
12tonep         -> twelve-tonep
12tone-forms    -> twelve-tone-matrix
get-12tone      -> twelve-tone-filter
rnd-12tone-form -> rnd-form-set
get-12tone-form -> get-form-set

 

Transpose added to PCS-INVERT function:
 

 

(pcs-invert (pcs '9-7) 0)
=> (0 11 10 9 8 7 5 4 2)

(pcs-invert '((6 7 9 11 0 2 3) (1 3 6 9 0 11 4 7)) 0)
=> ((6 5 3 1 0 10 9) (11 9 6 3 0 1 8 5))

(pcs-invert '((6 7 9 11 0 2 3) (1 3 6 9 0 11 4 7)) 5)
=> ((11 10 8 6 5 3 2) (4 2 11 8 5 6 1 10))

(pcs-invert '((6 7 9 11 0 2 3) (1 3 6 9 0 11 4 7)) '(5 8))
=> ((11 10 8 6 5 3 2) (7 5 2 11 8 9 4 1))

 

LENGTH-TEMPO-MAP function name changed to LENGTH-TO-TEMPO

Fix to TIME-POINT-SYSTEM

 

That's all for now,
best wishes,
JP

 

 

 

 


 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×