Java spielt Jingle-Bells
Was whrscheinlich viele Leute nicht wissen: Java hat auch ein Sound-Interface.
Das API ist anscheinend nur ein dünner Layer auf der MIDI-Schnittstelle. Aber keine Angst, es braucht keine MIDI-Hardware, der Sound wird durch einen Software- Synthesizer erzeugt.
Das Programm ist im Brute-Force Stil geschrieben, aber ich kann das Stück jetzt nicht mehr hören, und darum bleibt es mindestens bis zur nächsten Weihnacht wie es gerade ist...
Der Code für Jingle-Bells
/******************************************************************************/
/* */
/* FILE: Jingle.java */
/* */
/* This program plays Jingle Bells (of MIDI is installed) */
/* ====================================================== */
/* */
/* V0.01 25-DEC-2020 Te (with the help of my daughter) */
/* */
/******************************************************************************/
import javax.sound.midi.* ;
import java.io.* ;
public class Jingle
{
public static int DELAY = 200 ;
private static void play( MidiChannel channel, int note, int attack, int duration ) throws InterruptedException
{
channel.noteOn( note, attack ) ;
Thread.sleep( duration ) ;
channel.noteOff( note, 0 ) ;
}
private static void play( MidiChannel channel, int note, int attack, int duration, int pause ) throws InterruptedException
{
play( channel, note, attack, duration ) ;
Thread.sleep( pause ) ;
}
public static void main( String args[] )
{
int DELAY = 200 ;
try
{
Synthesizer synth = MidiSystem.getSynthesizer() ;
synth.open() ;
if( synth.getDefaultSoundbank() != null )
{
Instrument inst[] = synth.getDefaultSoundbank().getInstruments() ;
synth.loadInstrument( inst[0] ) ;
}
MidiChannel channels[] = synth.getChannels() ;
if( channels[4] != null )
{
MidiChannel channel = channels[4] ;
// Try 123 instead of 14
channel.programChange( 14 ) ;
// 1
play( channel, 55, 96, DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 62, 90, DELAY ) ;
play( channel, 60, 93, DELAY ) ;
// 2
play( channel, 55, 96, 2 * DELAY, DELAY ) ;
play( channel, 55, 102, DELAY / 2 ) ;
play( channel, 55, 99, DELAY / 2 ) ;
// 3
play( channel, 55, 90, DELAY ) ;
play( channel, 64, 90, DELAY ) ;
play( channel, 62, 88, DELAY ) ;
play( channel, 60, 94, DELAY ) ;
// 4
play( channel, 57, 102, 3 * DELAY, DELAY ) ;
// 5
play( channel, 57, 96, DELAY ) ;
play( channel, 65, 94, DELAY ) ;
play( channel, 64, 95, DELAY ) ;
play( channel, 62, 91, DELAY ) ;
// 6
play( channel, 59, 99, 3 * DELAY, DELAY ) ;
// 7
play( channel, 67, 110, DELAY ) ;
play( channel, 67, 110, DELAY ) ;
play( channel, 65, 91, DELAY ) ;
play( channel, 62, 90, DELAY ) ;
// 8
play( channel, 64, 103, 3 * DELAY, DELAY ) ;
// 9
play( channel, 55, 91, DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 62, 90, DELAY ) ;
play( channel, 60, 87, DELAY ) ;
// 10
play( channel, 55, 91, 3 * DELAY, DELAY ) ;
// 11
play( channel, 55, 90, DELAY ) ;
play( channel, 64, 90, DELAY ) ;
play( channel, 62, 88, DELAY ) ;
play( channel, 60, 94, DELAY ) ;
// 12
play( channel, 57, 102, 2 * DELAY, DELAY ) ;
play( channel, 57, 102, DELAY ) ;
// 13
play( channel, 57, 96, DELAY ) ;
play( channel, 65, 94, DELAY ) ;
play( channel, 64, 95, DELAY ) ;
play( channel, 62, 91, DELAY ) ;
// 14
play( channel, 67, 110, DELAY ) ;
play( channel, 67, 110, DELAY ) ;
play( channel, 67, 110, DELAY ) ;
play( channel, 67, 110, DELAY ) ;
// 15
play( channel, 69, 110, DELAY ) ;
play( channel, 67, 110, DELAY ) ;
play( channel, 65, 91, DELAY ) ;
play( channel, 62, 90, DELAY ) ;
// 16
play( channel, 60, 90, DELAY, DELAY ) ;
play( channel, 67, 90, 2 * DELAY ) ;
// Refrain
play( channel, 64, 89, DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 64, 89, 2 * DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 64, 89, 2 * DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 67, 110, DELAY ) ;
play( channel, 60, 90, 3 * DELAY / 2 ) ;
play( channel, 62, 90, DELAY / 2 ) ;
play( channel, 64, 105, 3 * DELAY, DELAY ) ;
play( channel, 65, 89, DELAY ) ;
play( channel, 65, 110, DELAY ) ;
play( channel, 65, 90, 3 * DELAY / 2 ) ;
play( channel, 65, 90, DELAY / 2 ) ;
play( channel, 65, 95, DELAY ) ;
play( channel, 64, 95, DELAY ) ;
play( channel, 64, 95, DELAY ) ;
play( channel, 64, 95, DELAY / 2 ) ;
play( channel, 64, 95, DELAY / 2 ) ;
play( channel, 64, 95, DELAY ) ;
play( channel, 62, 90, DELAY ) ;
play( channel, 62, 90, DELAY ) ;
play( channel, 64, 95, DELAY ) ;
play( channel, 62, 95, 2 * DELAY ) ;
play( channel, 67, 90, 2 * DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 64, 89, 2 * DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 64, 89, 2 * DELAY ) ;
play( channel, 64, 89, DELAY ) ;
play( channel, 67, 110, DELAY ) ;
play( channel, 60, 90, 3 * DELAY / 2 ) ;
play( channel, 62, 90, DELAY / 2 ) ;
play( channel, 64, 105, 3 * DELAY, DELAY ) ;
play( channel, 65, 89, DELAY ) ;
play( channel, 65, 110, DELAY ) ;
play( channel, 65, 90, 3 * DELAY / 2 ) ;
play( channel, 65, 90, DELAY / 2 ) ;
play( channel, 65, 95, DELAY ) ;
play( channel, 64, 95, DELAY ) ;
play( channel, 64, 95, DELAY ) ;
play( channel, 64, 95, DELAY / 2 ) ;
play( channel, 64, 95, DELAY / 2 ) ;
play( channel, 67, 95, DELAY ) ;
play( channel, 67, 95, DELAY ) ;
play( channel, 65, 95, DELAY ) ;
play( channel, 62, 90, DELAY ) ;
play( channel, 60, 90, 3 * DELAY, DELAY ) ;
}
synth.close() ;
System.exit( 0 ) ;
}
catch( Exception e )
{
System.out.println( "Exception: " + e ) ;
}
}
}
Selber spielen?
Mit diesem Link können Sie die Source herunterladen