$ chuck 1. Simple Sine Wave.ck
チャックには、音を立てるユニットゲネレーターのコレクションがあります。私たちが探求する最初のユニットゲネレーターはSinoscと呼ばれます。これは、440 Hertzで半分の体積で単一の基本周波数を放出する単純な正弦波です。 sinoscは、=>演算子を使用してDACオブジェクトに「チャック」されます。 DACオブジェクトまたはデジタルオーディオコンバーターは、外部スピーカーまたはサウンドカードへのコンピューターの接続です。 =>演算子は、サーイン波のオーディオ出力をスピーカーに接続するパッチケーブルまたはプラグと考えてください。
SinOsc s => dac;
s.gain(0.5);
s.freq(440);
このコードだけでは音が生成されません。サウンドを生成するには、サウンドがどれくらい続くかをプログラムに伝える必要があります。 Chuckは、現在のオブジェクトに時間単位を適用します。現在、現在の時間と、今まで「チャック」された追加の時間を表します。この例では、サウンドを1秒間処理したいと考えています。したがって、今から1秒を「チャック」します。
1::second => now;
完全なプログラムを実行すると、440Hz、半分のボリュームで1秒間滑らかなトーンが生成されます。設定で遊んでみてください。音の新しいバリエーションを作成するためのトーン、ボリューム、またはタイミングを変更します。チャックのドキュメントを参照して、正弦波を鋸歯状または正方形の波に変更します。これらの音はどのように違いますか?
今すぐ音楽を作りましょう!このレッスンでは、第1章形式の基本的な基礎を取り、一連のメモを手配してシンプルなメロディーを作成します。
音楽は、最も基本的な形で、さまざまなトーン、期間、および間隔で演奏される一連のサウンドイベントです。この例では、1/4秒の間隔で同じ期間をプレイするだけです。イベントごとにシンプルなトーンをプレイします。
これを達成することは難しくありません。私たちがする必要があるのは、第1章からコードをコピーして貼り付け、メモイベントの4つのノートシーケンスを構築することです。この時点で、各ノートイベントの頻度を変更し、ほとんど音楽のサウンドに聞こえるイベントのパターンを作成できます。ここでは、2番目のノートを半分に分割し、3番目のノートに2を掛けてから、最終音に2.5を掛けました。
// 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;
プログラムを数回実行して、シーケンスを希望するシーケンスに変更できるかどうかを確認します。お気に入りの曲の1つを複製できますか? Hertzを音符にどのように変換しますか?このような音楽のシーケンスは気まずいと感じますか?何がこれを簡単にするでしょうか?
第2章では、最初のメロディーを正常に作成しました。これは小さな偉業ではありませんでした!コンピューターは、一連の指示に基づいて行動を起こすのに非常に優れています。私たちがすでに知っていることを考えると、メロディーや歌はコピーと貼り付けを介してメモで再現できます。しばらくすると、この方法で音楽を作成すると、退屈で意見の悪いことになります。より簡単な方法が必要です。
音楽のメロディーは、フレーズとして知られているものの曲で何度も何度も繰り返されます。フレーズは本質的にループです。電子およびヒップホップの音楽層ループループは、ループが相互作用して互いに遊びに遊ぶポリリズムテクスチャを作成します。幸いなことに、この動作を再現するためのプログラミングには完璧な制御構造があります - その間のループ。
各メモをコピーして貼り付ける代わりに、指示を繰り返して音楽フレーズを作成できます。 Chuckでは、whileキーワードとカーリーブラケットでループが構築され、繰り返される一連の命令が含まれています。この例では、指示を無限に繰り返します。プログラムが終了するまで繰り返します。
// Loop Repeats while true is true (aka forever!)
while(true) {
//instructions go here
}
通常、私たちは無限のループでコンピュータープログラムを書きません!これは、プログラムをハングし、プログラムが他のパーツやコードを実行して永久に実行するのを防ぐため、プログラミングで通常回避されるものです。 Chuckでは、すぐにわかるように、アルゴリズムを終了してプログラムを開始する方法があります。音楽では、一定期間にわたって無限のループを溝を構築してもらいたいと思うかもしれません。
ループをより面白くするために、2つの新しいライブラリという紹介(STDと数学)を紹介します。 STDは標準的なライブラリの略で、プログラムで使用できる有用なユーティリティ方法のコレクションです。 STDには、「mtof」または「midi to prevuence」と呼ばれるメソッドがあります。コンピューターミュージックでは、ピアノの12ノートスケールは0〜127の上昇ピッチとして表されます。オクターブは12ノートで、10オクターブがあります。ピアノの中間Cは60で表されています。音楽の知識がない場合は、心配しないでください! 0〜127の間の値のいずれかを使用すると、自動的に標準的な西部チューニングが得られます。 MIDIノートは、確かに作業しやすく、推論するのがはるかに簡単です。
MTOFは、入力を取り、値を返す方法です。たとえば、MIDIノート値60を入力し、MTOFはHertzで対応する値を返します。 std.mtof(60)の出力を印刷する小さなプログラムを作成することで、これを観察できます。 Chuckは<<< >>>シンボルを使用して、デバッグの目的で戻り値を印刷します。
<<< Std.mtof(60) >>>;
261.625565 :(float)
ご覧のとおり、ヘルツで曲を作曲することは、西洋の音符をメロディーに組み込もうとすると、よりトリッキーになり始めます。物事をさらに簡単にするために、数学ライブラリを使用してランダムなノートを生成します。数学には、2つの数値の入力を取得するRANDAM2と呼ばれる関数があります。 2つの数値は、1番目と2番目の数値の間の範囲を表します。
数字のセット間でランダム化して12を掛けることにより、オクターブ、12ノートが発生するノートをランダム化することができます。ノートを頻度に変換すると、Sinoscは頻度を入力として取得して音を出すことができます。
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
すべてをまとめると、アルゴリズムをwhileループ内で包むことができます。これは、コードで音楽を操作することの利点の1つです。より複雑なプログラムに向かって進むにつれて、コンピュータープログラミングでのみ達成できる音楽の作成を開始できます。これはアルゴリズム組成として知られています。
// 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;
}
シーケンスの速度を変更してみてください。中央のCノートを別のメモに変更するとどうなりますか? 12または24の音がどのように聞こえますか?複数の値を変更すると、曲は多かれ少なかれ音楽になりますか?あなたが十分に聞いたとき、あなたのキーボードでCTRL-Cを叩き、退屈して、Ctrl-Cを叩きます!
近日公開!
近日公開!
近日公開!
近日公開!