$ chuck 1. Simple Sine Wave.ck
查克(Chuck)有一系列發出噪音的校準器。我們將要探索的第一個單位生物體稱為Sinosc。這是一個簡單的正弦波,在440赫茲以半體積發射單個基本頻率。使用=> oterator,將SINOSC“插入” DAC對象。 DAC對像或數字音頻轉換器是計算機與外部揚聲器或聲卡的連接。將=>運算符視為補丁電纜或將正弦波的音頻輸出連接到揚聲器中的插頭。
SinOsc s => dac;
s.gain(0.5);
s.freq(440);
僅此代碼不會產生聲音。要產生聲音,我們必須告訴程序,聲音將持續多長時間。查克將時間單元應用於現在的對象。現在代表當前時間加上現在“ chuck”到現在的額外時間。在此示例中,我們只想處理聲音一秒鐘。因此,我們“ Chuck” 1秒至現在。
1::second => now;
運行完整程序在440Hz(半體積)中產生平穩的音調,持續1秒鐘。嘗試使用設置。更改創建聲音新變化的音調,音量或時間。諮詢Chuck文檔,然後將正弦波更改為鋸齒或方波。這些聲音有何不同?
讓我們現在做一些音樂吧!在本課程中,我們將採用基本的基本原理表第一章,並簡單地安排一系列筆記以製作簡單的旋律。
音樂以其最基本的形式是在不同的音調,持續時間和間隔中播放的一系列聲音事件。在此示例中,我們只需以1/4秒的間隔播放相同的持續時間。對於每個事件,我們都會播放一個簡單的音調。
實現這一點並不困難。我們需要做的就是從第1章複製並粘貼代碼,並構建4個註釋事件的序列。在這一點上,我們可以更改每個音符事件的頻率,並創建幾乎聽起來音樂音樂的事件模式。在這裡,我們將第二個音符分為一半,將第三個音符乘以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;
幾次運行程序,看看您是否可以將序列更改為您喜歡的序列。您可以復制自己喜歡的歌曲之一嗎?您將如何將赫茲轉換為音符?像這樣的音樂排序會讓人感到尷尬嗎?什麼會使這更容易?
在第2章中,我們成功創建了第一個旋律。這是不小的壯舉!計算機非常擅長根據一系列說明採取行動。鑑於我們已經知道的是,任何旋律或歌曲都可以通過複製和粘貼來複製。一段時間後,以這種方式創作音樂變得乏味和毫不動搖。必須有一種更簡單的方法。
音樂旋律經常在所謂的短語中多次重複多次。短語本質上是循環。電子和嘻哈音樂層循環以創建多節律紋理,循環相互作用並互相發揮作用。對我們來說幸運的是,編程中有一個完美的控制結構來複製這種行為 - while循環。
可以重複指令來創建音樂短語,而不是複制和粘貼每個音符。在Chuck中,While循環由While關鍵字和捲曲括號構造,以包含將重複的指令序列。在此示例中,我們將無限地重複指令或直到程序終止。
// Loop Repeats while true is true (aka forever!)
while(true) {
//instructions go here
}
通常,我們不會用無限循環編寫計算機程序!這通常是在編程中避免的,因為它將懸掛程序並防止程序執行其他零件或代碼並將永遠運行。在查克(Chuck),正如我們很快發現的那樣,有多種方法可以終止和啟動程序。在音樂中,我們可能想即興創作,讓無限的循環在一段時間內建立凹槽。
為了使循環更有趣,我們將介紹兩個新庫 - STD和數學。 STD代表標準庫,是可以在我們程序中使用的有用實用方法的集合。 STD具有稱為“ MTOF”或“ MIDI到頻率”的方法。在計算機音樂中,鋼琴上的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)
如您所見,當我們嘗試將西方音符納入旋律中時,赫茲中的歌曲開始變得越來越棘手。為了使事情變得更容易,我們將使用數學庫生成一些隨機筆記。數學具有稱為Random2的函數,該函數的輸入為2個數字。 2個數字代表第一和第二個數字之間的範圍。
我們可以通過在一組數字之間隨機化並乘以12個隨機化八度,註釋會出現12個音符。當我們將音符轉換為頻率時,SINOSC可以將頻率作為輸入並發出聲音!
Std.mtof(60 + (Math.random2(0,3) * 12)) => s.freq;
將所有內容整合在一起,我們可以將算法包裹在當時的循環中。這是使用Code的音樂的優點之一。隨著我們朝著更複雜的程序邁進,我們可以開始創建只能通過計算機編程才能實現的音樂。這被稱為算法組成。
// 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!
即將推出!
即將推出!
即將推出!
即將推出!