Wind Chimes
This was one of the earliest jMusic pieces, and so is considered a 'classic'
in the jMusic community.
It is quite simple but effective - like all good music.
The class simulates the random-like polyphony of metallic wind chimes.
There are several pitches (length of tube) and each employs random rhythms
and dynamics.
This is what the result sounds
like
Click here to view source
Let's have a closer look.
import jm.JMC; import jm.music.data.*; import jm.midi.*; import jm.util.*; public final class WindChimes implements JMC{ public static void main(String[] args){ Score score = new Score("JMDemo - Wind Chimes"); Part one = new Part("One", 1, BELLS); Phrase phr1 = new Phrase(0.0); Phrase phr2 = new Phrase(1.0); Phrase phr3 = new Phrase(3.0); Phrase phr4 = new Phrase(5.0); for(short i=0;i<24;i++){ Note note1 = new Note(c6, Math.random()*8, (int)(Math.random()*80 + 20)); phr1.addNote(note1); Note note2 = new Note(f6, Math.random()*8, (int)(Math.random()*80 + 20)); phr2.addNote(note2); Note note3 = new Note(g5, Math.random()*8, (int)(Math.random()*80 + 20)); phr3.addNote(note3); Note note4 = new Note(d7, Math.random()*8, (int)(Math.random()*80 + 20)); phr4.addNote(note4); } one.addPhrase(phr1); one.addPhrase(phr2); one.addPhrase(phr3); one.addPhrase(phr4); score.addPart(one); Write.midi(score, "WindChimes.mid"); } }
|
Four phrases area created, each of 24 notes added with random rhythm
values in one large for-loop.
Notice that the pitches are set, which corresponds to a four ringer wind
chime.
The rhythm values and dynamic of each note is set using the Math.random()
function.
This function gives a result between zero and one and is scaled by multiplying
as required.
An important programming point here is that the arguments passed to methods
(such as the Note constructor) can be computed as we go.
In previous tutorials we have often used set values.
Each phrase is added to the same part - they all play on the
same instrument so there is no need for separate parts.
The part is added to a score which is then translated to a
MIDI file format and written to disk.
A sample output from this class is on the jMusic home page as a looped
MIDI file.
Because of the stochastic nature of the rhythm, little sense of repetition
is perceived and the looped music sounds quite continuous.
A neat psychoacoutsic trick.
|