Sound Demo 2
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Javascript</language>
== Die Spieluhr ==
<code id="556e0513d988b" hidden>
var piano = Synth.createInstrument('piano');
var currentTime = 0;
function playNote(note, dauer) {
var sekunden = 1 / Number(dauer);
setTimeout(function () {
piano.play(note, 3, sekunden);
}, currentTime);
currentTime += sekunden * 1000;
}
</code>
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 w=800 h=100></canvas>
<run id="4aa4b46b6775d">
canvas.clear();
var 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";
var Noten = Lied.split(" ");
var posx = 0;
var posy = 0;
for(var i=0; i < Noten.length; i++){
var key = 0;
if (Noten[i][0] == 'C') key = 60;
if (Noten[i][0] == 'D') key = 62;
if (Noten[i][0] == 'E') key = 64;
if (Noten[i][0] == 'F') key = 65;
if (Noten[i][0] == 'G') key = 67;
if (Noten[i][0] == 'A') key = 69;
if (Noten[i][0] == 'H') key = 71;
var dauer = 0;
if (Noten[i][2] == '1') dauer = 1000/1;
if (Noten[i][2] == '2') dauer = 1000/2;
if (Noten[i][2] == '4') dauer = 1000/4;
if (Noten[i][2] == '8') dauer = 1000/8;
canvas.fillRect(posx,80-(key-60)*8,dauer/20,10);
posx = posx + dauer/20+5;
playNote(Noten[i][0],Noten[i][2]);
}
</run>