• # Lesson 7. Retrograde, Transpose and Sections

## Annotation

Another good reason for using lists as bars is that we can select and process individual lists as the following expressions demonstrate.

```(setf line (gen-repeat 5 '((c4 cs4 fs4 g4 c5))))
(setf line-t (pitch-transpose '(0 1 7 6 0) line))
=> ((c4 cs4 fs4 g4 c5)
(cs4 d4 g4 gs4 cs5)
(g4 gs4 cs5 d5 g5)
(fs4 g4 c5 cs5 fs5)
(c4 cs4 fs4 g4 c5))```

These two expressions can be put together as one.

```(setf line-t (pitch-transpose '(0 1 7 6 0)
(gen-repeat 5 '((c4 cs4 fs4 g4 c5)))))```

This piece uses the same A B A structure as Stage 6. In the left hand bass part there’s use of the function GEN-RETROGRADE.

```(setf bass (pitch-transpose -24 line))

This retrograde function makes use of a special keyword :section. This selects the GEN-RETROGRADE function to come into action on the 1st, 3rd and 5th bars of the B section in the bass part. Remember LISP counting of sections starts at 0.

```(setf bass-2
(make-omn
:length rhy-wi
:velocity '(f)))
=> ((e c3 f g2 fs2 cs2 -)
(-e - c2 cs2 fs2)
(e c3 g2 fs2 - -)
(e c2 - cs2 fs2 g2)
(e c3 - g2 fs2 -))```

In the A section of the left hand bass part there’s another new function. TIE-BARS enables ties to be placed between bars when necessary. Evaluate it and look at the omn script.

```(setf bass-1 (tie-bars
(make-omn
:length rhythm
:velocity '(mp))))
=> ((e c3 mp g2 fs2 cs2 c2 tie)
(e c2 cs2 fs2 g2 c3 tie)
(e c3 g2 fs2 cs2 c2 tie)
(e c2 cs2 fs2 g2 c3 tie)
(e c3 g2 fs2 cs2 c2))```

## Score

```(setf line (gen-repeat 5 '((c4 cs4 fs4 g4 c5))))
(setf line-t (pitch-transpose '(0 1 7 6 0) line))
(setf bass (pitch-transpose -24 line))
(setf chords (respell '(c4cs4fs4 g4c5)))
(setf rhythm (span line '(e)))
(setf rhy-chords (span rhythm chords))
(setf rhy-w (length-weight rhythm :weight '(2 1) :seed 30))
(setf rhy-wi (length-weight rhythm :weight '(3 1) :seed 23))

(setf line-1 (make-omn
:length rhy-w
:pitch line-t
:velocity '(f)))

(setf bass-1 (tie-bars
(make-omn
:length rhythm
:velocity '(mp))))

(setf line-2 (make-omn
:length rhy-w
:pitch chords
:velocity '(mp)))

(setf bass-2 (make-omn
:length rhy-wi
:velocity '(f)))

(setf part-1-rh (assemble-seq line-1 line-2 line-1))
(setf part-1-lh (assemble-seq bass-1 bass-2 bass-1))
(setf ts-list (get-time-signature part-1-rh :group '((5))))

(def-score lesson-7
(:key-signature 'chromatic
:time-signature ts-list
:tempo 100
:layout (piano-layout 'piano-rh 'piano-lh))

(piano-rh
:omn part-1-rh
:channel 1
:sound 'gm
:program 'acoustic-grand-piano)

(piano-lh
:omn part-1-lh)
)```

## Notation

Next page Lesson 8. Changing Metre

Go to Reference page.

Edited by opmo

• ### Introduction to OMN the language

OMN is designed as a scripting language for musical events. It’s not about sounds themselves, it is about their control and organisation in a musical composition. As a linear script rather than a graphic stave, musical events can be transformed, extended, reorganised by powerful computer algorithms. Some sequencers and score writers provide basic algorithms, but they do not represent the way composers now think about the process of music composition. Composing has become such a multi-faceted pro

opmo
OMN The Language 0
• ### Introduction to Opusmodus

Contents A Contemporary Language for Making Music The Parametric World of Music The Parametric Instrument Learning Opusmodus : A Strategy Important Questions: Necessary Answers

opmo
Tutorial Guide 0
• ### CLM Installation

Contents CLM Installation Command Line Tools Load and Compile Instruments CLM Installation Common Lisp Music, by William Schottstaedt is a powerful sound synthesis language implemented in Lisp and C. CLM is essentiall

opmo
CLM Examples 0
×

• Lessons