Bitoven

Bitoven is a programming language by User:Imaginer1 in early September 2014, with the goal of making a musical programming language focusing more on free expression in its musical format and ability to play readily rather than exact and definitive notes (that is, a single program can have many different musical representations.) He currently welcomes anyone's recommendations about the language- If you have questions or recommendations please put them in the talk page! The current EOF convention should probably be 0.

Textual Form
Bitoven is easily written in textual form and consists of the following characters.

Musical Form
In musical form there are far more registers than in the textual form, as any set of 3 or more notes that can be played simultaneously is a register, octave-sensitive. Call the lowest note in the chord the 'home note'. To convert to musical form:

Let's try to analyze a sample program with this setup to show how it could be read by a sort of state machine.




 * First comes the area in cyan, labeled with a 1. This is a chord- therefore we start to parse as adding or subtracting from the associated register, register CEG. We'll initiate a zero 'accumulator' as we determine how much we are adding or subtracting from register CEG.


 * Then comes the green area, labeled with a 2. The 'home note' of our CEG chord is C, and the first note of these three is a high B. Since this is higher than C, we are adding.
 * Still in the green area, the next note is not the home note, so we add one to the accumulator to give a value of 1.
 * Still in the green area, the note is C, which is the home note of CEG, so we stop. The beginning of the program is to add the value of 1 to register CEG.


 * Now in the orange area labeled with a 3, the interpreter reads a single note. Since the only possible thing here is an arpeggio or input/output, it continues reading.
 * The next note is a single note, so we have an arpeggio.
 * We have a third note, and the arpeggio matches the notes of our register, so we have a while loop starting: 'While the value of CEG is unequal to zero'.


 * Now in the purple area labeled with a 4. The first note read is a single note so the only possibility is an arpeggio or input/output: the next notes read, however, are simultaneous with the first one. That is, at some point C and E and G are played though not at the same time. This is an input call.


 * Now in the red area labeled with a 5, a similar process leads to the conclusion that we output to stdout.


 * With the same reasoning as in the orange area we determine that the last region is for terminating the while loop.

Example programs
a?b?[aa-b+]b!

Adds two numbers. If the input file was '22' or '(<' it would output the letter d, for example, as the ASCII value of '2' is 50, the ASCII value of '(' is 40, the ASCII value of '<' is 60, and the ASCII value of 'd' is 100.

If EOF = 0, then the cat program is a+[aa?a!] if EOF = -1, then the cat program is a+[aa?a!a+]

External resources
experimental Bitoven to Python compiler