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; } } |


Replica a nekane Cancelar la respuesta