Key still had some problems with transposition that related to frequency quanitsation, so those are (hopefully?) now sorted. I got rid of the gravity argument for freqToDegree because it doesn’t make sense, imo and calculating it is a tiny bit of a faff.
For Domifare, as with a spoken language, breaks between commands are articulated as pauses, so I’ve added a DetectSilence ugen. The threshold will need to be connected to a fader to actually be useful, as the margin of background noise will vary massively based on environment.
The next step is parsing. It’s been a loooong time since I’ve worried about how to do this… IxiLang uses a switch statement with string matching.
I need to draw out how this is going to work, since the repeat and the chance commands both take commands as arguments.
This might work as a statement data array:
[key, min_args, max_args, [types], function]
Types can be: \var, \number, \operator, \data. If it’s \operator, then the operator received will be the key for another statement, and the parser will listen for that too…. If it’s \data, that means start the fucntion asap….
Also, since variables are actually loop holders, I’m going to need to make a class for them.
My original plan to was to use pitch recognition to enter in midi notes, but that’s not going to work, so some commands are now defunct.
(
var lang, vars, numbers;
vars = (solfasire:nil, solfasisol:nil, soldosifa:nil);
numbers = (redodo: 1, remimi:2, refafa: 3, resolsol: 4, relala: 5, resisi: 6, mimido: 7, mimire:8);
lang = (
	larelasi: [\larelasi, 2, 2, [\var, \data], nil], // func adds the name to the var array, runs the recorder
	dolamido: [\dolamido, 0, 1, [\var], nil], // func stops names loop or all loops
	domilado: [\domilado, 0, 1, [\var], nil], // func resumes named loop or all loops
	mifasol: [\mifasol, 0, 1, [\var], nil], // func raises an octave, which is probably impossible
	solfami: [\solfami, 0, 1, [\var], nil], // func lowers an octave- also impossible
	lamidore: [\lamidore, 2, 2, [\var, \data], nil], // add notes to existing loop
	dosolresi: [\dosolresi, 1, 1, [\var], nil], // shake the loop, which is possible with recordings also...
	misisifa: [\misisifa, 0, 1, [\var], nil], // next rhythm
	fasisimi: [\fasisimi, 0, 1, [\var], nil], //previous rhythm
	misoldola: [\misoldola, 0, 1, [\var], nil], //random rhytm
	refamido: [\refamido, 0, 0, [], nil], // die
	sifala: [\sifala, 2, 2, [\number, \operator], nil], // repeat N times (1x/bar)
	larefami: [\larefami, 2, 2, [\number, \operator], nil] // X in 8 chance of doing the command
);
After pondering this for a bit, I decided to write some classes, because that’s how I solve all my problems. I created a github project. This is the state of the sole file today.