What is it? A music description language and a text to midi converter for text written in the octavia language. However, besides the description of music in the octavia language, rest of the file is a simple python script, although you don't need to learn python to use it.


How to use it?
  • Create a text file following the music description language.
  • octavia is a command line program. From a terminal launch octavia your_music_text_file. It will create a your_music_text_file.midi midi file.
  • Alternately run octavia my_file.txt what_ever_file.midi .
  • Scala is a program that is bundled with octavia distribution. It is a simple pygtk user interface. Still very much alpha.


Describing music
  • A sequence of notes are seperated by a ;
  • Each note parameters are seperated by a ,
  • Chords can be placed where a note is expected.
  • Chords are denoted as [a+b+c] or as @Cmaj .
  • Chord symbols as above but ending with a + signal arpeggiation.
      Note parameters. See documentation.
    • Note : a b c d e f g
    • Duration : / $ % * (120) (math.pi / 2) *1.8 ...
    • Volume : Vnnn
    • Transpose : Tn
    • Channel : Hnn
    • Program : Inn


Using octavia

Using the above description language create sequences of music as simple strings.

Eg: mysequence="a; [b+c+d] ; @Cmaj+; D,/; "

Then use the functions provided in octavia to manipulate the music.

Eg:


start: mysequence="a; [b+c+d] ; @Cmaj+; D,/; " seq2=reverse_seq(mysequence) seq3=times(seq2,4) seq4=times(mysequence+seq2,4) playdef(seq4) play(seq4,"transpose=6, program=41") finish:
The above is the body of music. It goes in to a text file between markers start: and finish: Above the start: symbol you can specify global directives. See the documentation and examples for full info.


Where is it? Sourceforge


Licence GPL


Examples


#Example 1:
start:
playdef("a;")
finish:

#Example 2: start: seq1="a;b;c;" playdef(seq1) finish:
#Example 3: start: seq1="a;b;c;" play(seq1,'program=41, transpose=3, volume=60') finish:
#Example 4: start: seq1="a;b;c,*2;" playdef(seq1) playdef(reverse_seq(seq1)) seq2=times(seq1,4) seq3=split_seq(seq2,0,6) playdef(seq3) finish:
#Examlpe 5: tempo=120 octave=3 timesig=4,2 deflen=127 start: s1='a;b;c;' s2=times(s1,10) s3=reverse_seq(s2) s2=do_transpose(process_seq(s2),6) x1='a,/$,t3,v40; b,*2,t4,v70; c, %, t5, v90; ' x2=times(x1,10) playdef(x2) playdef(s3) playmain(s2,"volume=64,program=41,transpose=4") finish:


Todo
  • Modulation functions.
  • Handle crossover of notes.
  • I am sure there are plenty more things to add to it.
  • Deal with aftertouch for chords.