Tanpura / Drone / Tuning-training jar

This is an alpha release of a tool/toy, not a game. The coding that went into it is also a stepping stone towards the goal of writing a real time game music engine. Procedural-generated tones respond to the real time tweaking of the controls, but the data structures used (for game music) could certainly be more sophisticated.

The jar file can be downloaded and tried from here: http://www.java-gaming.org/user-generated-content/members/27722/tanpura.jar [EDIT: latest version: http://www.java-gaming.org/user-generated-content/members/27722/tanpura141204.jar]

The app produces a drone that can either be used for musical accompaniment or for intonation training. You can specify up to six pitches. I’d allow setting it for more, but the audio/synth processing needs to become more efficient first.

One thing that makes it different from most other drone tools is that it has very flexible tuning/intonation controls, allowing for easy “perfect intervals.” It also allows you to tweak the intonation of a given note even further, as is often required when adjusting a Tanpura’s tuning to a particular “shruti” of an Indian classical music scale/raga.

I’ve been using a prototype for intonation practice, setting the cycle to three notes (the tonic, fifth as a perfect 3:2 ratio, and octave) and playing pentatonic scales very slowly (on my oboe), pushing my intonation a little sharp or flat then honing in on the “sweet spot.”

In the Options area, one can specify the type of notation used for the notes. I set the default to the Indian solfege system: “Sa Re Ga Ma Pa …” but Western solfege or functional or interval or even absolute pitch names can be used. Changing the “root” on the front face transposes the entire drone.

Possible names (still deciding):
Shruti Devi (I don’t know if this sounds okay to Indian ears–but I do hope to reach Indian musicians)
Drone Maester
Pitch Maester

I intend to put “Save/Load” buttons on the bottom. Was planning to use serialization of the data objects, but I want to first make sure I do this in a way that won’t break if the feature set changes down the road!

I hope to add a couple more synths, e.g., a string synth patch. I also hope to improve the audio/synth engine performance, as there is stuttering when pushed. [EDIT: more recent version has a significant performance pickup, making it possible to allow 12 nodes to the dial. Was previously being limited to 6. There is still probably room for improvement here.]

Am open to more suggestions!