Sound Demo 2

Aus ProgrammingWiki
Archivierte Version vom 2009-04-29T11:03:10+00:00. Aktuelle Version

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.

Spieluhr.png
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.

Ihr Browser unterstützt Canvas nicht.

<eval> canvas.clear(); String Lied = "E-4 E-4 E-2 E-4 E-4 E-2 E-4 G-4 C-4 "+</eval>

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

}