Sound Demo 2
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Java</language>
== Musik veranschaulichen ==
Du kennst die Tonleiter und die Notenschrift aus dem Musikunterricht. Für Drehorgeln und Spieluhren wird hingegen eine Art Code in Form von Stiften verwendet, die auf einer Walze aufgebracht sind. Im Bild rechts sieht man das Innenleben einer Spieluhr.
[[Bild:Spieluhr.png|thumb|Spieluhr und Walze mit Stiften]]
In dieser Aufgabe sollst du versuchen, aus einem Lied als Zeichenkette wie:
String Lied = "E-4 E-4 E-2 E-4 E-4 E-2 E-4 G-4 C-4 "+
"D-4 E-1 F-4 F-4 F-4 F-4 F-4 E-4 E-4 "+
"E-8 E-8 E-4 D-4 D-4 E-4 D-2 G-2";
eine Darstellung für eine zugehörige Walze einer Spieluhr zu erzeugen. Gleichzeitig kannst du das Lied auch mit Hilfe der Methoden, die wir letzte Woche kennengelernt haben, vorspielen lassen.
<canvas></canvas>
<eval>
canvas.clear();
String Lied = "E-4 E-4 E-2 E-4 E-4 E-2 E-4 G-4 C-4 "+
"D-4 E-1 F-4 F-4 F-4 F-4 F-4 E-4 E-4 "+
"E-8 E-8 E-4 D-4 D-4 E-4 D-2 G-2";
orgel = new Sound(19); // 19. MIDI-Gerät = Orgel
String[] Noten = Lied.split(" ");
int posx = 0;
int posy = 0;
for(int i=0; i < Noten.length; i++){
int key = 0;
if (Noten[i].charAt(0) == 'C') key = 60;
if (Noten[i].charAt(0) == 'D') key = 62;
if (Noten[i].charAt(0) == 'E') key = 64;
if (Noten[i].charAt(0) == 'F') key = 65;
if (Noten[i].charAt(0) == 'G') key = 67;
if (Noten[i].charAt(0) == 'A') key = 69;
if (Noten[i].charAt(0) == 'H') key = 71;
int dauer = 0;
if (Noten[i].charAt(2) == '1') dauer = 1000/1;
if (Noten[i].charAt(2) == '2') dauer = 1000/2;
if (Noten[i].charAt(2) == '4') dauer = 1000/4;
if (Noten[i].charAt(2) == '8') dauer = 1000/8;
orgel.play(key,dauer);
canvas.fillRect(posx,200-(key-60)*20,dauer/20,10);
posx = posx + dauer/20+5;
}
</eval>