Warning: mysql_connect(): Can't connect to MySQL server on 'mysql.sourceforge.net' (111) in /home/groups/c/co/compo/htdocs/inc/variables.php on line 7

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/groups/c/co/compo/htdocs/inc/variables.php on line 8

Warning: mysql_query(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /home/groups/c/co/compo/htdocs/inc/lib.stats.php on line 17

Warning: mysql_query(): A link to the server could not be established in /home/groups/c/co/compo/htdocs/inc/lib.stats.php on line 17

Warning: mysql_close(): no MySQL-Link resource supplied in /home/groups/c/co/compo/htdocs/inc/lib.stats.php on line 18

Home

Compo Online

Français

 

Presentation

compo and Open Music
Demos
FAQs
Download

Documentation

Tips

Contact
About us

SourceForge Logo

2001-11-28 - Representation of lyrics with compo

2001-10-22 - Hierarchical representation of music

One of the main aspects of the compo language is that its hierarchical structure allows to share any recurent structure in a work, possibly in consideration of melodic modulations or rhythmic augmentations or diminutions. See the folk song example from the presentation for an illustration of this.

This hierarchical structuration ability has in addition an immediate practical advantage, when transcribing an existing score. Effectively, it often allows to save a non-negligeable part of this tedious task. Let's suppose man wish to transcribe the following sentence :

First, it is worth using the centered on the fifth octave register of the upper melody. By writing this whole melody inside an enclosing structure at the :c5 height, it will be not necessary to specify the octave of each note.

(note :sync

  (:treble :c5 (:c)(:e)...)
  (:bass ...))

Similarly, the sixtenth burst at the same voice can be included inside a sub-structure specifying a sixteenth rhythmic indication, avoiding thus the repetition of this indication at each note level :

(note :sync

  (:treble :c5 (:c)(:e) (:16th (:g)(:f)(:e)(:f)(:g)(:bf)(:a)(:g)(:fs)(:a)(:g)(:fs)(:g)(:a)(:g)(:f))(:d :h))

  (:bass ...))

Concerning the bass, the redundancy to be eliminated is of a different kind. It is possible to save the manual writing of each harmonic octave by abstracting this structure this way :

(note :sync

  (:treble :c5 (:c)(:e) (:16th (:g)(:f)(:e)(:f)(:g)(:bf)(:a)(:g)(:fs)(:a)(:g)(:fs)(:g)(:a)(:g)(:f))(:d :h))
  (:bass x=(:chord (:c)(:c5)) ...))

All man has to do then is to instanciate this x model by creating as many as necessary structures containing it, each provided with the desired height :

(note :sync

  (:treble :c5 (:c)(:e) (:16th (:g)(:f)(:e)(:f)(:g)(:bf)(:a)(:g)(:fs)(:a)(:g)(:fs)(:g)(:a)(:g)(:f))(:d :h))
  (:bass x=(:chord (:c)(:c5)) (:c2 (:c x)(:b3 x)(:c x)(:d x)(:e x)(:c x)(:d :h x))))

Man can note that the whole has also been included inside a structure at a :c2 global height, allowing the two octaves lowering.

As a comparison, transcribing the whole sentence without taking into account this sharing possibilities would have required to write the following code :

(note :sync

  (:treble (:c5)(:e5)(:g5 :16th)(:f5 :16th)(:e5 :16th)(:f5 :16th)(:g5 :16th)(:bf5 :16th)(:a5 :16th)(:g5 :16th)(:fs5 :16th)(:a5 :16th)(:g5 :16th)(:fs5 :16th)(:g5 :16th)(:a5 :16th)(:g5 :16th)(:f5 :16th)(:d5 :h))
  (:bass (:chord (:c2)(:c3))(:chord (:b1)(:b2))(:chord (:c2)(:c3))(:chord (:d2)(:d3))(:chord (:e2)(:e3))(:chord (:c2)(:c3))(:chord :h (:d2)(:d3))))

Which is, when dealing with large works, not only more tedious to write, but also less readable.