Aus Das deutschsprachige Scratch-Wiki

In diesem Artikel wird beschrieben, wie man mit Scratch ein Musikstück nachprogramieren kann. Hier ein kurzes Beispiel:



Schau' dir dieses Projekt auf der Scratch-Webseite an...


Wichtige Elemente

Für das Nachprogramieren von Musik in Scratch braucht man diese Elemente:

Der Notenblock

Die Notenzahl.png

Das wichtigste ist der Notenblock. Denn mit ihm werden die Töne gespielt. Er ist wie folgt auf gebaut:

  • Die Tonhöhe wird mit einer Zahl festgelegt.
  • Der Tonlänge ergibt sich aus dem eingegeben Schlag-Wert und der aktuellen Geschwindigkeit

Die Sende- und Empfangen-Blöcke

Um Akkorde (Dreiklänge) zu spielen, verwendet man meisten Sende- und Empfangen-Blöcke, weil der Noten-Block auch gleichzeitig ein Spiele Note () für () Schläge und warte-Block ist. Um mehrere Noten gleichzeitig zu spielen, braucht man so viele Skripte wie Noten.

So sieht zum Beispiel die Programierung für einen C-Dur Dreiklang aus

Wenn gf angeklickt
sende [C-Dur v] an alle und warte

Wenn ich [C-Dur v] empfange
spiele Ton (60 v) für [0.5] Schläge

Wenn ich [C-Dur v] empfange
spiele Ton (64 v) für [0.5] Schläge

Wenn ich [C-Dur v] empfange
spiele Ton (67 v) für [0.5] Schläge

Die "Schlag"-Variable

Sollten die Akkorde mehrmals mit unterschiedlichen Notenwerten vorkommen, lohnt sich eine Variable für die Schlag-Anzahl. Denn sonst müsste man diese Skripte für jeden vorkommenden Notenwert noch einmal programieren. Diese Variable wird dann vor jedem Akkord auf die Schlaglänge gesetzt.

Echte Mehrstimmigkeit

Wenn man mehrere unabhängige Stimmen mit vielen Einzeltönen und vielen unterschiedlichen Tonlängen programmieren will, wird die Folge der Ton für Ton aufgerufenen Stimmen sehr lang. Dann kann es sinnvoll sein, mit Listen zu arbeiten, in denen man jeweils Tonhöhen und –längen unabhängig aufzeichnet. Die Listen arbeitet man dann mit einer Schleife ab.

SkriptMusikSchleife.gif

Wenn man das mit mehreren Stimmen gleichzeitig tut, können Synchronisationsprobleme auftreten, d. h. einzelne Stimmen arbeiten die Listen zeitlich nicht ganz exakt ab. Musik ist da sehr empfindlich. Musiker nennen diesen Effekt auch Klappern. Er verstärkt sich noch, wenn man scrollt oder anderweitig mit dem Programm arbeitet.

Als einfache Möglichkeit, die Synchronisation zu verbessern, kann man das Programm im Turbo-Modus ablaufen lassen. Wirkliche Abhilfe kann man schaffen, wenn man einen Regler einbaut. Das Programm kontrolliert Ton für Ton mit Hilfe der Stoppuhr, ob die Stimme weit genug abgearbeitet ist. Wenn eine Abweichung auftritt, wird ein Korrekturwert berechnet und gleich die Länge des nächsten Tons entsprechend angepasst. Praktisch kann das so aussehen:

SkriptMusikRegler.gif

Die Variablen "Korr" und "SummeLängeBisher" müssen für jede Stimme getrennt definiert werden. Das Beispiel ist weniger kompliziert als es aussieht. Es ist nichts anderes als eine Erweiterung der weiter oben angeführten einfachen Schleife. Hinzugekommen sind zunächst mehrere Schritte vor der Schleife, mit denen die Stoppuhr gestartet und Variablen auf ihren Anfangswert gesetzt werden. In der Schleife wird im ersten Schritt die Korrektur für den laufenden Ton berechnet und in zweiten Schritt der Ton entsprechend verlängert oder gekürzt abgespielt. Im dritten Schritt wird die bisher gespielte Gesamtlänge des Stücks berechnet, die als Vorgabe im nächsten Durchlauf der Schleife dient.

Mit Hilfe selbstdefinierter Blöcke ergibt sich eine weitere Option. Man kann die Geschwindigkeit der Blöcke bei Ausführung ohne Bildschirmaktualisierung nutzen, um eine bessere Synchronisation zu erzielen. Weil die Klänge in dieser Konstellation innerhalb des selbstdefinierten Blocks nicht sauber abgespielt werden, muss man den eigentlichen Klangblock auslagern und per Nachricht ansteuern. Wie man so etwas macht, zeigt z. B. dieses Projekt:


http://scratch.mit.edu/get_image/project/22296420_144x108.png

1-2-3-Mozart!

Siehe auch


Code zum Einbinden ins Forum:
[wiki=de:Musik]Musik[/wiki]