JFugue. I had been searching for such an API for sometime. The API allows one to "program" music in Java. The project allows for programming vast varieties of characteristics found in Western music. The best part is one can export the program output to MIDI files for play back and analysis later. Version 5 is round the corner with the
beta already out.
Naturally for me, the urge is to allow for expanding the scope of JFugue to Hindustani classical music. As it stands, our system is a bit complex and also my knowledge about it is limited. Lately I have been reading a lot of theory about Hindustani classical and I am trying to put the concepts into some sort of a programming pattern.
My first attempt in making JFugue to understand Hindustani sargam is described below.
- There are 12 notes (swars) Sa, Rek, Re, Gak, Ga, Ma, Mat, Pa, Dhk, Dh, Nik, Ni.
- From a JFugue pattern perspective the above are case insensitive.
- The "k" denotes the "Komal" (flat) notes. The "T" (sharp) denotes the "Teevr" note for Ma. By default, "Shudh" (plain) note is implied.
- Hindustani classical does not have a fixed "Sa". A notation such as "Sa=61" establishes it to the 5th Octave C# in the JFugue scale. Of course future versions will allow one to specify the note in a much user friendly manner, such as "Sa=C#5".
- The rest of the "swars" will automatically adjust as per this base. C# of the 5th octave is also the default "Sa" if none is specified.
- A rest note is defined by "Kh" (Khali). This is case insensitive too.
- After the base note, there are qualifiers that will be used to alter and fine tune the note for play.
- Only one qualifier is defined and implemented for now. It is the one to change the "Saptak" or the Octave.
- The "madhya saptak" (middle octave) is the implied by default. To specify "mandra saptak" (next lower) the "<" symbol is used. To specify "taar saptak" (next higher) the ">" symbol is used. So for example, "ni<", "ni" and "ni>" specify the lower octave "shudh Ni", the "madhya saptak Ni" and the "taar saptak Ni" respectively. It should be possible to specify "ati mandra" and "ati taar" octaves with the "<<" and the ">>" symbols in the future.
- Future versions will have many more qualifiers. Some will be ported "as is" from JFuge. For example, attack, decay, duration, tempo etc. Some will be left out ("chords", "melody" etc.) that have less significance in Hindustani classical music.
- One possible expansion of interest is to be able to map the "22 shruthis" of the Hindustani classical. This shall require the use of the Microtone pre-processor in JFugue or its modification. To be able to play 22 notes would bring in a lot of realistic sound production in JFugue for Hindustani classical.
The "problem" with Hindustani classical music is that there is not standard notation system. In itself, this is a big research area wanting to be explored. One such is the
Bhatkhande system of notation. It has its share of shortcomings but it is one of the most popular in use today. Hence I will try to stick with it as close as possible. Obviously there are some notations that cannot be represented on a standard keyboard layout, so I will try to substitute them with alternate symbols. Like it is done for specifying the "Saptak" in this version.
I am including the source of
HindustaniSubParser.java. This is just a very basic version of what is to come. Interested programmers will have to comment out the NoteSubParser and the MicrotonePreprocessor from the Staccato Parser. I have used JFugue 5 source code.
Below are some notations and resulting audio output.
First one is the Bollywood song "Tum Paas Aaye".
ga ma ga re sa ga kh ga ma ga re sa ga kh re ga re sa "ni<" re "pa<" kh re sa ga re sa sa kh sa sa re ga dh pa kh sa sa re ga dh pa kh re ga re sa "ni<" "dh<" "ni<" "pa<" kh re sa ga re sa sa sa kh
Here is the output:
Tum Paas Aaye
Here is the original song:
Tum Paas Aaye
Next up is one from the master, Live At Royal Albert Hall. "Has ke bola karo".
ga re ga ma ga kh sa "pa<" kh "pa<" re kh sa re sa sa kh sa re ga ga re re re kh re ga ma ga ga re sa sa kh
Here is the output:
Has Ke Bola Karo
Here is the original song:
Has Ke Bola Karo
Next is the start from "Ye Inayaten Ghazab ki".
"ni<" re ga re "ni<" re sa kh "ni<" re mat kh "ni<" dh pa ma ga re "ni<" kh "ni<" re ma ga sa re "ni<" sa "dh<" "ni<" sa ga ma re sa kh
Here is the output:
Ye Inayaten Ghazab
Here is the original song:
Ye Inayatein Ghazab
I am all excited!