JFugue: creando música desde Java

Leyendo este artículo en JavaHispano he llegado a JFugue:

JFugue es una librería open source Java usa las capacidades MIDI de Java para generar la música de una forma programática (vamos, para frikis!).

JFugue permite especificar notas, acordes, instrumentos,… es capaz de tocar MIDIs, …

Aquí podéis ver un ejemplo que si sabéis algo de música seguro que entendéis 🙂

Ah, por si no lo sabéis en la notación inglesa:

C=Do D=Re E=Mi F=Fa G=Sol A=La B=Si

importorg.jfugue.*;public classMyMusicApp {Player player = new Player();

private void sleep() {

try {

Thread.currentThread().sleep(1000);

} catch (InterruptedException e) {

}

}

public static void main(String[] args) {

MyMusicApp app = new MyMusicApp();

app.play1();

app.play2();

app.play3();

app.play4();

System.exit(0);

}

private void play1() {

Pattern pattern = new Pattern(«C D E F G A B 12»);

player.play(pattern);

sleep();

}

private void play2() {

player.play(«C»);

player.play(«C7h»);

player.play(«C5maj7w»);

player.play(«G5h+B5h+C6q_D6q»);

player.play(«G5q G5q F5q E5q D5h»);

player.play(«T[Allegro] V0 I0 G6q A5q V1 A5q G6q»);

player.play(«V0 Cmajw V1 I[Flute] G4q E4q C4q E4q»);

player.play(«T120 V0 I[Piano] G5q G5q V9 [Hand_Clap]q Rq»);

sleep();

}

private void play3() {

player.play(«Aw»); // A5 whole note

player.play(«E7h»); // E7 half note

player.play(«[60]wq»); // Middle-C (C5) whole+quarter note

player.play(«G8i.»); // G8 dotted-eighth note

player.play(«Bb6/0.5»); // B-flat, 6th octave, half note

// C-major chord, second inversion, 7th octave, quarter note

player.play(«C7maj^^q»);

sleep();

}

private void play4() {

// First a few simple chords

player.play(«T[Vivace] I[Rock_Organ] Db4minH C5majW C4maj^^»);

}

}

Si os ha convencido podéis seguir con el Getting Started y el Using JFugue MusicString.

El Canon de Bach en Java 😀

importjava.io.File;public classCrabCanon{

public static void main(String[] args)

{

CrabCanon crab = new CrabCanon();

Pattern pattern = crab.getPattern();

Player player = new Player();

player.play(pattern);

try {

player.saveMidi(pattern, new File(«crabcanon.mid»));

} catch (IOException e) {

e.printStackTrace();

}

player.close();

}

public Pattern getPattern()

{

Pattern canon = new Pattern(«D5h E5h A5h Bb5h C#5h Rq A5q «+

«A5q Ab5h G5q G5q F#5h F5q F5q E5q Eb5q D5q «+

«C#5q A3q D5q G5q F5h E5h D5h F5h «+

«A5i G5i A5i D6i A5i F5i E5i F5i G5i A5i B5i C#6i «+

«D6i F5i G5i A5i Bb5i E5i F5i G5i A5i G5i F5i E5i «+

«F5i G5i A5i Bb5i C6i Bb5i A5i G5i A5i Bb5i C6i D6i «+

«Eb6i C6i Bb5i A5i B5i C#6i D6i E6i F6i D6i C#6i B5i «+

«C#6i D6i E6i F6i G6i E6i A5i E6i D6i E6i F6i G6i «+

«F6i E6i D6i C#6i D6q A5q F5q D5q»);

// Reverse the canon

ReversePatternTransformer rpt = new ReversePatternTransformer();

Pattern reverseCanon = rpt.transform(canon);

// Lower the octaves of the reversed pattern

PatternTransformer octaveTransformer = new PatternTransformer() {

public void noteEvent(Note note)

{

byte currentValue = note.getValue();

note.setValue((byte)(currentValue – 12));

getReturnPattern().addElement(note);

}

};

Pattern octaveCanon = octaveTransformer.transform(reverseCanon);

// Combine the two parts

Pattern pattern = new Pattern();

pattern.add(«T90 V0 » + canon.getMusicString());

pattern.add(«V1 » + octaveCanon.getMusicString());

return pattern;

}

}

Respuesta

  1. Hola Luis Miguel, he leido tu post pero estoy totalmente perdida. Yo necesito una librería que lea una partitura en xml y me la muestre por pantalla en un dispositivo android, no quiero que me reproduzca el sonido, solamente que me la muestre. La librería jfugue hace esto correctamente? He intentado por todos los medios hacerlo funcionar, pero no hay manera… Te agradecería muchísimo si me pudieses ayudar.

    Gracias 🙂

Replica a nekane Cancelar la respuesta