$ chuck 1. Simple Sine Wave.ck
Chuck hat eine Ansammlung von Unitgeneratoren, die Geräusche machen. Der erste Unitgenerator, den wir untersuchen werden, heißt Sinosc. Dies ist eine einfache Sinuswelle, die eine einzelne Grundfrequenz bei 440 Hertz bei halbem Volumen abgibt. Der SINOSC wird mit dem DAC -Objekt unter Verwendung des => -Operators "gekitzelt". Das DAC -Objekt oder der digitale Audiokonverter ist die Verbindung des Computers zu Ihren externen Lautsprechern oder Soundkarte. Stellen Sie sich den Operator => als Patch -Kabel oder Stecker vor, das die Audioausgabe der Sinuswelle mit dem Lautsprecher verbindet.
SinOsc s => dac;
s.gain(0.5);
s.freq(440);
Dieser Code allein erzeugt keinen Ton. Um Klang zu erzeugen, müssen wir dem Programm sagen, wie lange der Sound dauern wird. Chuck wendet Zeiteinheiten auf das jetzt Objekt an. Jetzt repräsentiert jetzt die aktuelle Zeit plus die zusätzliche Zeit, die bis jetzt "zerschmettert" ist. In diesem Beispiel möchten wir den Sound nur für eine Sekunde verarbeiten. Deshalb "Chuck" 1 Sekunde bis jetzt.
1::second => now;
Das Ausführen des vollständigen Programms erzeugt einen glatten Ton bei 440 Hz, halb Volumen für 1 Sekunde. Versuchen Sie, mit den Einstellungen herumzuspielen. Ändern Sie den Ton, die Lautstärke oder das Timing, um neue Variationen des Klangs zu erstellen. Wenden Sie sich an die Chuck -Dokumentation und ändern Sie die Sinuswelle in eine Sägezahn- oder Quadratwelle. Wie klingen diese unterschiedlich?
Lass uns jetzt Musik machen! Für diese Lektion werden wir das grundlegende Fundamentals -Formular Kapitel 1 übernehmen und einfach eine Abfolge von Notizen anordnen, um eine einfache Melodie zu erstellen.
Musik ist in ihrer grundlegendsten Form eine Folge von Soundereignissen, die in verschiedenen Tönen, Dauer und Intervallen gespielt werden. In diesem Beispiel spielen wir in Intervallen von 1/4 Sekunden einfach die gleiche Dauer. Für jedes Ereignis spielen wir einen einfachen Ton.
Dies zu erreichen ist nicht schwierig. Wir müssen lediglich unseren Code aus Kapitel 1 kopieren und einfügen und eine 4 -Note -Sequenz von Notizereignissen strukturieren. Zu diesem Zeitpunkt können wir die Frequenz für jedes Note -Ereignis ändern und ein Muster von Ereignissen erstellen, die fast musikalisch klingen. Hier haben wir einfach die zweite Note in zwei Hälften geteilt, die dritte Note mit 2 vervielfacht und dann die endgültige Note mit 2,5 vervielfacht.
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(440);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(220);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(880);
// Process program for a duration of 1/4 second
0.25::second => now;
// Set frequency (hertz) and volume of Sine Wave
s.gain(0.5);
s.freq(1100);
// Process program for a duration of 1/4 second
0.25::second => now;
Führen Sie das Programm einige Male aus und prüfen Sie, ob Sie die Sequenz in eine Sequenz ändern können, die Sie bevorzugen. Können Sie einen Ihrer Lieblingslieder replizieren? Wie würdest du Hertz in musikalische Notizen umwandeln? Fühlt sich die Sequenzierung von Musik wie diese unangenehm an? Was würde das einfacher machen?
In Kapitel 2 haben wir unsere erste Melodie erfolgreich geschaffen. Das war keine kleine Leistung! Computer sind sehr gut darin, Maßnahmen zu ergreifen, die auf einer Abfolge von Anweisungen basieren. Angesichts dessen, was wir bereits wissen, kann jede Melodie oder ein Lied mit Hinweis per Kopie und Einfügen mit Hinweis reproduziert werden. Nach einer Weile wird das Erstellen von Musik auf diese Weise mühsam und uninspirierend. Es muss einfacher sein.
Musikalische Melodien werden oft viele Male über ein Lied in einem sogenannten Ausdruck wiederholt. Phrasen sind im Wesentlichen Schleifen. Elektronische und Hip -Hop -Musikschichten, um polyrhythmische Texturen zu erzeugen, bei denen Schleifen interagieren und sich gegenseitig abspielen. Zum Glück gibt es für uns eine perfekte Kontrollstruktur in der Programmierung, um dieses Verhalten zu replizieren - die while -Schleife.
Anstatt jede Note zu kopieren und zu kleben, können Anweisungen wiederholt werden, um musikalische Phrasen zu erstellen. In Chuck ist die while -Schleife mit dem Keyword- und Curly -Klammern konstruiert, um die Abfolge von Anweisungen zu enthalten, die wiederholt werden. In diesem Beispiel wiederholen wir die Anweisungen unendlich oder bis das Programm beendet wird.
// Loop Repeats while true is true (aka forever!)
while(true) {
//instructions go here
}
Normalerweise würden wir keine Computerprogramme mit unendlichen Schleifen schreiben! Dies wird normalerweise im Programmieren vermieden, da es das Programm hängt und verhindert, dass das Programm andere Teile oder den Code ausführt und für immer läuft. Wie wir bald herausfinden werden, gibt es in Chuck Möglichkeiten, Programme algorithmisch zu beenden und zu starten. In Musik möchten wir vielleicht improvisieren und eine unendliche Schleife über einen bestimmten Zeitraum einen Groove bauen lassen.
Um die Schleife interessanter zu machen, werden wir zwei neue Bibliotheken vorstellen - STD und Math. STD steht für die Standardbibliothek und ist eine Sammlung nützlicher Versorgungsmethoden, die in unseren Programmen verwendet werden können. STD verfügt über eine Methode namens "MTOF" oder "MIDI to Frequenz". In Computermusik wird die 12 -Noten -Skala am Klavier als aufsteigende Stellplätze zwischen 0 und 127 dargestellt. Eine Oktave ist 12 Noten und es sind 10 Oktaven verfügbar. Middle C am Klavier ist bei 60 dargestellt. Ärgern Sie sich nicht, wenn Sie auf kein musikalisches Wissen beschränkt sind! Durch die Verwendung eines der Werte zwischen 0 und 127 wird uns automatisch eine Standard -Western -Tuning erhalten. MIDI -Notizen sind sicherlich viel einfacher zu arbeiten und zu begründen.
MTOF ist eine Methode, die einen Eingang annimmt und einen Wert zurückgibt. Wir werden beispielsweise einen MIDI -Note -Wert, 60, eingeben, und MTOF gibt den entsprechenden Wert in Hertz zurück. Wir können dies beobachten, indem wir ein kleines Programm schreiben, das die Ausgabe von STD.MTOF (60) druckt. Chuck verwendet die Symbole <<< >>>, um Rückgabewerte für Debugging -Zwecke zu drucken.
<<< Std.mtof(60) >>>;
261.625565 :(float)
Wie Sie sehen können, wird das Komponieren von Songs in Hertz schwieriger, wenn wir versuchen, westliche Musiknoten in unsere Melodien einzubeziehen. Um die Dinge noch einfacher zu machen, werden wir mit der Mathematikbibliothek einige zufällige Notizen generieren. Math hat eine Funktion namens Random2, die die Eingabe von 2 Zahlen nimmt. Die 2 Zahlen repräsentieren einen Bereich zwischen der ersten und der zweiten Zahlen.
Wir können Oktaven, Notizen, die immer 12 Notizen auftreten, randomisieren, indem wir zwischen einer Reihe von Zahlen und Multiplizieren mit 12 randomisieren. Wenn wir die Notizen in die Frequenz konvertieren, kann SINOSC die Frequenz als Eingabe annehmen und einen Ton erzeugen!
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
Wenn wir alles zusammenstellen, können wir unseren Algorithmus in die while Loop einwickeln. Dies ist einer der Vorteile der Arbeit mit Musik mit Code. Wenn wir zu komplexeren Programmen voranschreiten, können wir beginnen, Musik zu erstellen, die nur mit Computerprogrammierung erreicht werden können. Dies ist als algorithmische Zusammensetzung bekannt.
// Sine Wave connected to audio out
SinOsc s => dac;
while(true) {
// Set midi musical note
// with randomly selected octaves
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
// Play for 1/4 of a second
0.25::second => now;
}
Versuchen Sie, die Geschwindigkeit der Sequenz zu ändern. Was passiert, wenn Sie die mittlere C -Note in eine andere Notiz ändern? Wie klingt es 12 oder 24 Notizen nach unten? Wird das Lied mehr oder weniger musikalisch, wenn Sie den Mehrfachwert ändern? Ablauf weg und klicken Sie auf die Tastatur auf Ihre Tastatur, wenn Sie genug gehört haben!
Bald kommen!
Bald kommen!
Bald kommen!
Bald kommen!