On 26 Apr 2009, at 20:15, Kassen wrote:
I'm pasting a edit of the last version Hans send to the list based on this strategy below.
Thank you. I have been focusing on implementing octave shifts, transpositions, and different tuning systems, but I add a copy here of what I currently have. The playing area has been extended with a few keys, and some bug fixing. The caps lock is a octave up shift, as to extend the keyboard when playing. The left shift key plus a key on the number row sets an octave shift; key 4 = middle octave, though written as 0. The option key plus a playing key center the tuning frequency on that key. For reference, the key next to the left shift key always plays the tuning frequency (currently 440 Hz). The left shift key plus a key on the two rows closest to it sets various tuning systems, with increasing minor second m from left to right. It is interesting to play C# Db, and listen to the changes. E12 should have no beats, of course.
the basic strategy is starting a few voices, hopefully a amount our cpu can take. When a new key is pressed it will be assigned to the voice that already had that voice linked to it. If no such voice is found it'll take the voice that's not currently playing and gone longest since the last note off. When all voices are currently playing it'll steal the one that has gone longest since the last note on.
No sporking and probably no garbage (I didn't verify the second part of that claim).
There are likely some issues with this; while the strategy should be sound I wrote this quite quickly.
So its good with input on voices.
I also changed the indentation style after getting confused about a "else" in the main loop.
I use a fairly common, more compact C/C++ style. I also avoid using tabs, instead using two spaces, which are expressive enough. Unix tabs are traditionally set at 8 spaces, which is too much, and there seems to be no good way to avoid it set at that in various circumstances.
This is roughly the strategy hardware synths take; the amount of cpu used should be more or less static, clearly something more advanced is in order when we need to run several instruments on the same computer but I took this setup to be meant for a solo instrument.
I haven't had any problems with CPU overload in the code in the attached code. I have tried it for extended periods of time. Hans