Jump to content
Sign in to follow this  
RST

Pitch Mapping Project Idea

Recommended Posts

Here is a small project to explore pitch-mapping.  There are some results but not the best ones yet.  If anyone has an idea on how to improve this I would really appreciate the advice.  What would be ideal as the result would be the same musical list (and notation) but with the transformed pitches.  As you can see from the result, there are many changes and the result is not clean but rather seriously garbled instead! :smile:

 

The goal is to remap the pitch content of the original with a new tonality-map.  Here is the beginning attempt.  A confusing element is the return of NIL when parsing :articulation from the original material.

 

;;; Pitch mapping project idea

;;; Original musical sequence:

(setf alto-flute-orig
'(
(-q e b4 -e (-app e eb4 f4) h. eb4 (-acc e f4 eb4 f4))


(-3q 3q b4 -3q (-app e eb4 f4) q eb4 (-acc e f4) h eb4 (-acc e f4 a4 b4))

(-q e f5 -e (-app e b4 ds5) a4 (-app e. g4) a4 t b4 a4 b4 -e (-app e eb5) e f5) 

((acc e b4 d5 ds5) q. c5 (acc s f5) e. b4 (acc e c5 d5 ds5) e. a4 (acc e b4 a4) e b4)

(-q e b4 (app e f4 a4 f4) e b4 t g4 a4 eb4 a4 q. b4 (-acc e f4 a4) h bb4 t bb4 c5)  

(-e. b4 -e (acc a4 b4) h bb4 (app e c5) q b4 (acc e d5 ds5 e5) q. b4 (app e f4 bb4) s c5)

(-e gs5 3s a4 d4 gs4 -e. bb4 tie q bb4 (3e b4 a4 b4 -e -e))

((acc e a4 b4 fs4) h c5 (acc e b4) q c5 (acc e ds5 e5 fs5) 3e b4 c5 fs4 q a4 tie q a4 tie e. a4 s bb4 a4 e b4)

(-e (acc e eb4) h f4 tie e. f4 s gb5 -e (acc eb5 f5) e e5 tie q e5 tie 3q e5 3q e5 3q f5 3q b4 -3q -3q)

((acc e bb4 b4) a4 (acc e bb4) h a4 (acc e bb4) e a4 s gs5 -s)
)
)

 

;;;
;;; Disassemble OMN: There are some errors here - in particular for :articulation which seems to return NIL

(disassemble-omn alto-flute-orig)
(setf pit (omn :pitch alto-flute-orig))
(setf len (omn :length alto-flute-orig))
;;; next line result is confusing - returns nil
(setf art (omn :articluation alto-flute-orig))
;;; next line returns a result
(setf artr (omn :rest-articulation alto-flute-orig))

 

;;; Create 12-tone mapping and pitch transformation of original

(setf map '(0 1 3 4 7 8 10 11 17 18 21))
(setf mapping (integer-to-pitch map))
(create-tonality 12T2 '(0 1 3 4 7 8 10 11 17 18 21))
(setf output (tonality-map '(12T2 :root c3 :fixed t) pit))

 

;;; Assemble the parameters into a new OMN with transformed pitches

(make-omn 
 :length len
 :pitch output
 :articulation art
 :rest-articulation artr
)

;;; The result is unsuable so far.  There are some things to iron-out here! :-)

Share this post


Link to post
Share on other sites

A bit more with another kind of confusing result:

 

;;;
(def-case fragments

(2 '(-q e b4 -e (-app e eb4 f4) h. eb4 (-acc e f4 eb4 f4)))

(3 '(-3q 3q b4 -3q (-app e eb4 f4) q eb4 (-acc e f4) h eb4 (-acc e f4 a4 b4)))

(4 '(-q e f5 -e (-app e b4 ds5) a4 (-app e. g4) a4 t b4 a4 b4 -e (-app e eb5) e f5))

(5 '((acc e b4 d5 ds5) q. c5 (acc s f5) e. b4 (acc e c5 d5 ds5) e. a4 (acc e b4 a4) e b4))

(6 '(-q e b4 (app e f4 a4 f4) e b4 t g4 a4 eb4 a4 q. b4 (-acc e f4 a4) h bb4 t bb4 c5)) 

(otherwise '(-e. b4 -e (acc a4 b4) h bb4 (app e c5) q b4 (acc e d5 ds5 e5) q. b4 (app e f4 bb4) s c5))) 


(setf v1 '(1 2 3 4 5 6))
(setf p1 (flatten (gen-eval 16 '(rnd-order v1))))
(setf p1_s (remove-duplicates p1))
(setf p1_out (fragments p1_s))

(setf mat (fragments '(2)))
(setf mat1 (pitch-transpose -12 (omn :pitch mat)))

(setf pit (omn :pitch mat))
(setf len (omn :length mat))
(setf art (omn :articulation mat))
(setf artr (omn :rest-articulation mat))

(make-omn
:pitch mat1
:length len
:articulation art
:rest-articulation artr
)

 

There is an notation result as a snippet but...as it is, it is not playable as a snippet.  

 

Error: division-by-zero detected
>        performing / on (1/16 0)
> While executing: ccl::divide-by-zero-error, in process Listener-2(7).

 

 

There are also some notational issues.

 

It seems that parsing articulation and the manner in which this is notated in OMN is part of the problem.  It may be better to consider composing out the small notes, the appoggiaturas and such with precise note values. (?).

 

Like this:

 

'(-q e b4 -e t eb4 f4 h. eb4 t f4 eb4 f4)
'(-q -3q 3q b4 -3q t e4 f4 q e4 t f4 h eb4 t f4 a4 b4)
'(-q f5  -e t b4 cs5 q. a4 t g4 e a4 tie t a4 b4 a4 b4 -e t eb5 e f5)
'(-e t b4 d5 ds5 q. c5 t f5 e. b4 tie t c5 d5 ds5 s a4 tie q a4 tie e a4 t b4 a4 s b4 -s)
'(-e b4 t f4 a4 f4 e b4 -e t g4 a4 eb4 a4 e b4 tie q b4 t f4 a4 h bb4 t bb4 c5 -e.)
'(b4 -e a4 b4 h bb4 t c5 q bb4 t d5 ds5 e5 q b4 tie e. b4 t f4 bb4 s c5 -e)
'(e gs5 3e a4 d5 gs4 e. bb4 tie h bb4)

Share this post


Link to post
Share on other sites

you need to fix the grace note forms first.

Share this post


Link to post
Share on other sites

Thanks!  I will try, though not really sure how...yet...:smile:

Share this post


Link to post
Share on other sites

grace note must be bound to a length note and not to a rest.

Share this post


Link to post
Share on other sites

Super helpful...thanks, I will look into this editorial aspect.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Topics

    • By JulioHerrlein
      In my Dissertation, I worked a way to convert every chord and set in a modulo 12 rhythm,
      so the entire catalog of FORTE are converted to rhythms, following the steps of Babitt:
       

       
      As a hardcore serialist, Babbitt was interested in converting 12-tone rows to rhythms, in a kind of 12-tone rhythm theory.
      Below, Wuorinen show one example of a typical Babbitt idea:
       

       
      For the sake of explaining my idea of function, it's important to have in mind that for Babbitt, the order of the
       row is very important and lead to different results in the pitch to rhythm conversion. Take a look in the example
       below:
       

       
      In the preceeding figure, the order of the C major triad generate different rhythms. In the example (0 4 7) have a
      different result from (4 0 7) or (7 0 4).
       
      In the system I developed in my Dissertation, the order does NOT matter, since (0 4 7), (7 0 4) or (4 0 7) will result
       in exactly the same rhythm, as you can see below:

       
      In my system, the transposition equals rotation (as well as in Babbitt)

       
      And every chord symbol can be transformed in a rhythm:
       

      Even voicings can be converted in longer Rhythms (the more spread the voicing, the longer the rhythm):
       

       
       
      So I did every FORTE SET in the catalog, in this way:
      Below, you can see the example of the rhythm of the major triad (Forte number 3-11b).
      In the 1st bar there is the prime form (0 4 7).
      In each subsequent bar there is a rotation of the first set by 16th note increments.
       
      HERE IS THE POINT, for the sake of the new function !
       
      The note C (that I call Rhythmic Fundamental, the "root" of the rhythm) is being displaced, as
       you can see in the circled notes.
       
      THE SET WRAP AROUND ITSELF, always forming 12 time-points (always twelve 16th notes),
      in a different way from Babbit, where the order of the sets generates longer rhythms.
      THIS WAY IS MORE INTERESTING For Popular and Minimalist Repetition Music, as
       well as 12 tone music.
       
      In the bottom staff, there are the complementary rhythm of the 3-11b set, i.e., the 9-11a
       set. In the catalog, every set is presented alongside its complementary set and every set is
      presented in 3/4 (16th notes) and in 12-8 (with the 8th note as the base value for the increments
       and rotations).

       
      So the function needed would be the one that mirror exacty this kind of conversion, not the tradicional time-point-system conversion,
      so I could use my catolog inside Opusmodus, connecting the diferent sets, like this:
       

       
      Or even using portions of the Rhythmic Sets, by truncating some of them, like this:
       

       
      In the preceeding example, only parts of the 2 sets are used (9 time points out of 12 in the 
      first and 8 time points out of 12 in the second).
       
      So, I hope someone could help me to find a way of implementing this.
      Maybe Janusz or Stephane could find interesting to develop this kind of idea inside
       the software.
       
      All the best !
      Julio Herrlein
    • By AM
      ;;; ...an idea ;;; how to import some TEXT and translate it to integer-sequences to use this data ;;; for LIVE-CODING. also possible without .txt, but i tried to IMPORT it. perhaps ;;; in your live-coding session a friend of you is writing the text in a different ;;; location and you could share it (the path) via CLOUD :-D ;;; i know, this kind of data... is not very smart, but a little bit steam-punky :-) (defparameter *map-integer1* '(((a à á â ã ä å æ ą) 0) (b 1) ((c ç ć) 2) (d 3) ((e è é ê ë ę) 4) (f 5) (g 6) (h 7) ((i ì î ï) 8) (j 9) (k 10) ((l ł) 11) (m 12) ((n ñ ń) 13) ((o ò ó ô õ ö) 14) (p 15) (q 16) (r 17) ((s ś ß) 18) (t 19) ((u ù ú û ü) 20) (v 21) (w 22) (x 23) ((y ý ÿ) 24) ((z ż ź) 25))) ;;; 1) open/write a .txt-file ;;; 2) define your path (inside the loop) ;;; 3) start the loop ;;; 4) write/change your .txt, and SAVE it ;;; => every 2 seconds it will be read by the code (loop repeat 60 do (progn (print (progn (setf x (string-to-list (let ((in (open "/Users/meierandre/Desktop/test.txt"))) ;; use your own path!! (read-line in)))) (text-map *map-integer1* (loop for i in x append (explode i))))) (print x)) do (sleep 2)) ;;; every 2 seconds the loop is reading your .txt, change variable x and PRINT it  
      for this example i used PRINT (so you see what is happening), but you could also "rewrite" a variable inside your sound-live-coding-CODE/FUNCTION
       
       

      Bildschirmvideo aufnehmen 2019-11-02 um 23.16.58.mov  
    • By AM
      ;;; a little extension for lsystems, i needed all generations, not only the final one. i think for in-time-processes it's more interesting, because you will hear/see the way of "growing/developing" ;;; perhaps JANUSZ could extended the original OPMO-function. keep attention about stack-overflow if you have LARGE DEPth :-) ;;; function (defun all-gen-lsystem (ls &key depth ) (loop repeat (1+ depth) for i from 0 to depth collect (rewrite-lsystem ls :depth i))) ;;; setup (defclass sieve_1 (l-system) ((axiom :initform '(1)) (depth :initform 10))) (defmethod l-productions ((ls sieve_1)) (choose-production ls (1 (--> 2 1)) (2 (--> 4)) (4 (--> 2 6)) (6 (--> 1)))) ;;; example ; new => all gen (all-gen-lsystem 'sieve_1 :depth 3) => ((1) (2 1) (4 2 1) (2 6 4 2 1)) ; original => only last gen (rewrite-lsystem 'sieve_1 :depth 3) => (2 6 4 2 1)  
×
×
  • Create New...