Jump to content
TangoTango

Providing code examples to students

Recommended Posts

Hello,

 

I'm making a presentation on 12-tone composition in an educational context. While my focus is on a 12-tone map (including OMN and OpusModus code) I want to begin with some more simple examples e.g. a Canon, a Fugue, first second and third species counterpoint.

 

While I can create a canon, counterpoint and a fugue myself with a bit of time, it would be much less time-consuming for me if I were able to use existing examples. Is there an existing library of OMN examples of these types of compositions?

If not, I'm happy to post mine once I'm done.

Tom

Share this post


Link to post
Share on other sites

Such an example will be very useful indeed.

Looking forward to see how you made it work.

Best, J

Share this post


Link to post
Share on other sites

Dear Friends,

 

Here 's a way to produce chords from 12 tone rows (Schoenberg opus 25 row):

(setf op25arnie '(e4 f4 g4 cs4 fs4 ds4 gs4 d4 b4 c4 a4 as4))

(respell (gen-chord2 20 '(3 3 3 1) op25arnie))

Hope it helps a little.

 

Best,

Julio

 

 

Also check this !

And the Nigel Morgan Parametric Composition book, of course !

More specific, to keep track of the row:

(setf op29webernLib (expand-libraries '(library vienna webern r19)))
(setf rowint (pitch-to-integer op29webernLib))
(setf pitches (gen-repeat 10 op29webernLib))
(setf lengths (span pitches (gen-repeat 10 '(s s s s -s s e -s s s -s e e -q q))))
(setf text
      (span pitches rowint))
(def-score Stage-1
           (:key-signature 'chromatic 
            :time-signature '(4 4) 
            :tempo 80
            :layout (treble-layout 'piano-rh))
  (piano-rh
   :length lengths
   :pitch pitches
   :text text
   ;:velocity dynamics
   :channel 1
   :sound 'gm
   :program 'acoustic-grand-piano)
)

Best,

Julio

Share this post


Link to post
Share on other sites
(setf op25arnie '(e4 f4 g4 cs4 fs4 ds4 gs4 d4 b4 c4 a4 as4))

(respell (gen-chord2 20 '(3) op25arnie :offset '(2 1 2 3)))

Using the :offset parameter in the gen-chord2 function could be interesting too, for example for keeping notes between chords for smoother transitions with common tones.

 

S.

Share this post


Link to post
Share on other sites

Thank you for the help everyone! These are great for my section on serialism.

 

I've switched my focus to serialism and neural networks (I found an example that generates content from simple Irish Folk songs in .mid files). My focus is on the ever-changing relationship that composers have with rules and procedures.

 

https://www.mathworks.com/matlabcentral/fileexchange/69632-code-for-webinar-deep-learning-for-signals-and-sound

 

Tom

Share this post


Link to post
Share on other sites

"My focus is on the ever-changing relationship that composers have with rules and procedures."

 

some ideas/names...?

 

=> MOZART  https://en.wikipedia.org/wiki/Musikalisches_Würfelspiel

=> the LIGETI-analysis of BOULEZ's STRUCTURES ?

=> MESSIAEN in general: https://monoskop.org/File:Messiaen_Olivier_The_Technique_of_My_Musical_Language.pdf, or  specific "MODE DE VALEURS ET D'INTENSITÉS"

=> GOTTFRIED MICHAEL KöNIG

=> XENAKIS (the "ST"-pieces?)

=> HAUER https://de.wikipedia.org/wiki/Zwölftonspiel

 

 

 

 

Share this post


Link to post
Share on other sites

> While I can create a canon, counterpoint and a fugue myself with a bit of time, it would be much less time-consuming for me if I were able to use existing examples. Is there an existing library of OMN examples of these types of compositions?

 

I cannot offer ready-made examples, but a constraint-based library with various counterpoint (and also harmony) rules ready-made.  

 

Cluster engine implements the constraint solver, and many functions for applying user-defined rules to various score contexts in a flexible way (e.g., consecutive notes in certain voices, simultaneous notes across voices at certain metric positions etc). 

https://github.com/tanders/cluster-engine

 

Cluster rules provides a collection of ready-made rules for the cluster engine library.

https://github.com/tanders/cluster-rules

 

Both libraries were initially developed for PWGL, but we ported them to plain Common Lisp to make them usable, e.g., in Opusmodus (where I already used both) and the Max<->Lisp interface I just mentioned in other message.

 

There are some demo/test examples that come with the library (https://github.com/tanders/cluster-rules/blob/master/tests/first-tests.lisp). More extensive documentation (tutorials) are available with the original PWGL versions of the libraries.

 

Some code to smoothly interface the Cluster Library with Opusmodus is part of my tot library (e.g. in the file https://github.com/tanders/tot/blob/master/sources/constraints.lisp). For example, there are means to transform Cluster Library scores into Opusmodus scores (actually, my variant of it, see the docs) and some more complex functions that could be seen as example use cases. For example, the function revise-score-harmonically, expects an existing score that you might create with whatever Opusmodus methods, and some underlying harmony definitions, and that re-harmonises the score accordingly, taking some counterpoint rules etc. into account.

 

I hope the available doc of these packages helps (of which there is also some HTML version online). I cannot provide any more help at this stage, as I am currently extremely busy in my new job...

 

Best,

Torsten

Share this post


Link to post
Share on other sites

Thanks for a very informative post. Would someone be willing to explain the four integers included in the 

:offset '(2 1 2 3)

parameter from Stephane's reply? It is clear why the parameter is used; I just hope to better understand the purpose of the integer(s) used in order to better control the parameter.

 

Many thanks!

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.


  • Similar Topics

    • By torstenanders
      Dear all,
       
      After updating to a recent Opusmodus version 1.3, I ran into some errors when loading code that had been loaded and compiled before, e.g., quicklisp, quicklisp libraries, swank (the interface that allows using Emacs Slime with Opusmodus), and my own Lisp libraries. The errors I saw were rather cryptic, like the following:
       
      Error: The value "CL" is not of the expected type list.
      While executing: (:internal ccl::operation-on-all-specs ccl::%define-package), in process Listener-1(7).
       
      After exchanges with Janusz (thanks a lot for your help!) I learnt that the underlying Common Lisp version of Opusmodus had been upgraded to CCL version 1.12, and the format of compiled files (fasl files or dx64fsl files) of this version had changed.
       
      So, in case you run into similar problems, these can be fixed simply by deleting all previously compiled files (which Lisp stores if they do not change to speed up the load process), so that the Lisp compiler has to compile them again. In the folder  ~/.cache/common-lisp just delete any folders starting with ccl-, so that all compiled files in this directory are compiled again.
       
      Best,
      Torsten
    • By AM
      hi all
       
      i would like to code a NAND gate with more then two input-items (as extension to AND etc...). here is a simple version of the NAND function with two inputs, but i don't know how to exapnd it to n-inputs without putting the the inputs to in a list (like lisp-internal AND / OR)...
       
      https://en.wikipedia.org/wiki/NAND_gate
       
      i dont't want it:
      (nand '(t t t nil))  but like to have
      (nand t nil nil t t t)  
      when i get a solution for that i will code an XOR, NOR etc....
       
       
       
      so the "problem" is: how to manage in DEFUN more then two inputs (don't work with &optional, i think) i tried it and failed)...
      any ideas, lisp-nerds? 🙂 thanx! andré
       
      ;;; easy with a specific number of input-items - that works! (defun nand (a b) (not (and a b))) (nand t t) => nil (nand nil nil) => t (nand nil t) => t ;;; i like to have an input perhaps like that - with any number of input-items, like lisp's AND / OR (nand t t t t) (nand nil t t t nil t t t nil) ...  
    • By Stephane Boussuge
      Here's some few examples of use of the recently updated tonality-system.
      (complete opmo score attached to this post.)
       
      ;; Utility function useful for using ;; bass note of chords/scales as root ;; in tonality-series. (defun get-lowest-chord-tone (chords) (do-verbose ("get-lowest-chord-tone") (integer-to-pitch (mapcar 'find-min (pitch-to-integer chords))) )) #| ;;; USAGE (setf chords '(d4f4a4 ab3d4eb4g4 f4eb3c5)) (get-lowest-chord-tone chords) |#
      It is better now to see the tonality as kind of PCS (pitch Class Set).
      If you would express them in pitch, it is easier to work on C base.
      Something interesting if the fact tonality can now be sorted or not.
      It will be reflected in the output of tonality-map.
       
       
      ;; Some tests (tonality-map '(d4e4f4g4a4b4) '(c4 d4 e4 f4 g4 a4 b4)) (tonality-map '(d4e4f4g4a4b4) '(c3 e4g4)) (tonality-map '(d4e4f4g4a4b4 :root d4) '(c3 e4g4)) (tonality-map '((0 2 3 5 7 9 10) :root d4) '(c3 e4g4)) (tonality-map '((0 2 3 5 7 9 10) :root d4 :closest 'down) '(c3 e4g4)) More extended test with use of bass note as root:
      (setf row '(c4 e4 f4 b4 a4 bb4 cs4 gs4 fs4 g4 eb4 d4)) (setf modes1 (harmonic-progression '(0 1 2 3 4 5 6 7 8 9 10 11) row :step 1 :size 8 )) (setf mtv '((s c4 d4 e4 f4 g4 a4 b4 c5))) (setf test1 (tonality-map (mclist modes1) (gen-repeat 12 mtv))) (setf path1 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) )) (setf test2 (tonality-map path1 (gen-repeat 12 mtv))) (setf mtv2 '((s c4 cs4 d4 ds4 e4 f4 fs4 g4))) (setf test3 (tonality-map (mclist modes1) (gen-repeat 12 mtv2))) (setf test4 (tonality-map path1 (gen-repeat 12 mtv2))) (setf path2 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) :map '(step) )) (setf test5 (tonality-map path2 (gen-repeat 12 mtv))) (setf test6 (tonality-map path2 (gen-repeat 12 mtv2))) (setf path3 (tonality-series modes1 :root (get-lowest-chord-tone modes1) ;:closest '(down) :map '(step) :sort t )) (setf test7 (tonality-map path3 (gen-repeat 12 mtv2))) (setf test8 (tonality-map path3 (gen-repeat 12 mtv))) SB.
       
      NewTonalitySystemExamples.opmo
×
×
  • Create New...