# Threnoscope睡眠音樂工作坊小冊 Threnoscope是Thor Magnusson開發的一套live coding音樂軟體。 [TOC] ## 1.安裝Threnoscope :::info ### 1.1 步驟一: 請至[supercollider.github.io](https://supercollider.github.io/)下載符合作業系統的安裝檔安裝 ::: :::info ### 1.2 步驟二: supercollider安裝完成後新增[sc3-plugins](https://supercollider.github.io/sc3-plugins/)外掛程式 * [sc3-plugins](https://github.com/supercollider/sc3-plugins/releases/tag/Version-3.13.0) 下載地址,下載後解壓縮 * 將解壓縮資料夾放至指定位置,步驟如下 * 開啟supercollider 將 `Platform.userExtensionDir` 貼在文字編輯欄 * **執行此行會在Post Window顯示Extension資料夾位置** * 執行方式: 游標與文字在同一行 在macOS:`Cmd+Enter` 在Windows:`Ctrl+Enter` * 解壓縮SC3plugins到Extension資料夾 * ![](https://hackmd.io/_uploads/rJCEdSNTn.gif) ::: :::info ### 1.3 步驟三: 安裝[Git](https://git-scm.com/) 與 [Threnoscope](https://github.com/thormagnusson/threnoscopeSC) #### 1.3.1 安裝Git https://git-scm.com/ * Windows: 選擇網站中的Standalone Installer安裝 * Mac: 可直接進行1.3.2步驟,系統會自行安裝git。 #### 1.3.2 在supercollider文字編輯欄貼上下段文字並執行 Quarks.install("https://github.com/thormagnusson/threnoscopeSC.git"); ![](https://hackmd.io/_uploads/r1k9yUET3.gif) #### 1.3.3 安裝完畢後Recompile或重新啟動Supercollider ![](https://hackmd.io/_uploads/HkkffL462.gif) ::: ## 2.1讓Threnoscope發出聲音 :::success * 開啟Threnoscope 1. 在supercoliider文字框輸入並執行, `s.boot` 右下方 Server會變為<font color= "green">綠色</font> 2. 執行 `ThrenoScope.new(2)` ![](https://hackmd.io/_uploads/Sk3K6L4an.gif) ::: ::: success * Threnoscope出現了 接著在ThrenoScope打上或複製下段文字發出鋸齒波型的長音 ``` ~drones.createDrone(\saw, 4, 3); ``` ![](https://hackmd.io/_uploads/HJ5iGw4an.gif) ::: ### 2.2 無法發出聲音怎麼辦 Troubleshoot * 在supercollider 執行 `Platform.userAppSupportDir` 複製postwindow顯示出的路徑,開啟檔案總管並移動至此路徑。 * 檢查downloaded-quarks資料夾內是否有 threnoscopeSC 沒有的話請用另一種方式安裝。 至 https://github.com/thormagnusson/threnoscopeSC 頁面。 ![](https://hackmd.io/_uploads/BkTpgzukT.png =300x) * 選擇DownloadZip並解壓縮。 * 將資料夾名稱由 threnoscopeSC-master改為threnoscopeSC。 * 複製此資料夾至downloaded-quarks * 檢查Extensions資料夾內是否有 SC3plugins 資料夾 * 上述步驟完成後重新啟動supercollider,再從章節2.1開始 ## 3.教學(上):基礎 ### 3.0 代碼下載 今日用到的代碼[[dropbox]](https://www.dropbox.com/scl/fi/7u7w8qop7h4vgqb61truv/20230919_Threnoscope_workshop_code.scd?rlkey=sgjgeh16dbckmzz470znylrrn&dl=0) 20230919_Threnoscope_workshop_code.scd ### 3.1.0 Supercollider 基本操作 :::warning * 執行程式碼 macOS:`Cmd+Enter` Windows:`Ctrl+Enter` * 整行註解 macOS:`Cmd+/` Windows:`Ctrl+/` ::: ### 3.1.1 打開耳朵 :::warning * 確認是否已啟動聲音伺服器 啟動audio server : `s.boot` * 打開ThrenoScope程式 `ThrenoScope.new(2)` 小合奏(一) * `~drones.createDrone(\sine, 4) ` 數字5~20選一個,代表基頻的整數倍頻率 數字1~4頻率太低,可能讓筆電喇叭爆音或受損,建議先將音量調小。 * `~drones.killAll` 停止聲音 ::: ### 3.1.2 聲源 * 2代表兩個聲道 ![](https://hackmd.io/_uploads/S1_TdI2An.png =300x) ### 3.2 drone的狀態和名字 :::warning 查看drone的參數 * ~名字.state * ex: ~abc.state 為長音命名 * **名稱不要以數字開頭** * `~drones.createDrone(\sine, 4, name: "kook")` 製造一個名為kook的長音 * `~kook.tonic` 查看名為kook長音的tonic數值 * `~kook.kill` 停止名為kook的長音 ::: ### 3.3.1 tonic :::warning * ~名字.tonic = 選一個不一樣的數字,5~20 ::: ### 3.3.2 tonic 說明 * 基音頻率的倍數 * Threnoscope 預設基音為A(55Hz)。 ::: warning tonic : 1 2 3 4 5 6 ........ 與 55hz相乘 頻率 : 55 110 165 220 275 330 ....... ::: * 若皆為整數倍,此音列稱為[泛音列 - 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E6%B3%9B%E9%9F%B3%E5%88%97 "泛音列 - 維基百科,自由的百科全書") * ![](https://hackmd.io/_uploads/BJqcCMoTh.png =300x) * 如果基音是C2,整數倍之泛音列與基音的關係會是這樣 ![](https://hackmd.io/_uploads/SJupRMs62.png) ### 3.4.1 type 波形(音色) :::warning 小合奏(二) 👶 * `~drones.createDrone(\noise, 3.rand+2)` 重複幾遍試試看 * `~drones.killAll` 停止所有聲音 * `~name.kill` 指定某個聲音停止 ::: ### 3.4.2 有哪些波形? * saw、sine、tri、cub、pulse、formant、eliane、noise、klank、gendy、pad * `FreqScope.new(400, 200, 0, server: s);` 在supercollider中使用頻譜圖觀察音色頻率組成 ### 3.5 harmonics 音色亮度 :::warning * `~名字.harmonics = 1` * 用noise試容易聽出來。 * 數字越大高音頻率越多,聲音聽起來比較亮比較開闊 * sine正弦波因為是純音,沒有harmonics(諧波)成分,因此這個參數對sine波無作用。 * `~名字.harmonics_(4,10)` 用10秒的時間變換到數值4 * `~名字.harmonics_(2,100)` 用100秒的時間變換到數值1 * 改變harmonics(諧波)範圍,也稱**濾波(filter)**。 ::: ### 3.6 時間變化 :::warning * `~名字.tonic_(4,10)` 指定變化時間也能用在其他參數,例如10秒緩慢將音高移動到基音的四倍。 * `~drones.killAll(10)` 十秒緩慢結束所有聲音 * `~名子.kill(10)` 十秒緩慢結束指定聲音 ::: ### 3.7.1 speed 轉速 :::warning * `~drones.createDrone(\eliane, tonic:4, harmonics:3, speed:31.4, name:"10secs")` * `~名子.speed = 速度` 改變已存在的drone轉速 * **數值越高轉速越快** 3.14 >>>>> 接近100秒轉完一圈 (下圖中) 31.4 >>>>> 接近10秒轉完一圈 (下圖內) 314 >>>>> 接近1秒轉完一圈 (下圖外),太快會無聲 <iframe src="https://giphy.com/embed/mbnYrS2AcqKiF4Ewuo" width="480" height="458" frameBorder="0" class="giphy-embed" allowFullScreen></iframe> ::: ### 3.7.2 length 音長 :::warning * `~名字.length = 90` 試試看數字 90、180、270、360 ::: * 音長以角度表示 ![](https://hackmd.io/_uploads/Hkhm9U3Rh.png =300x) * 轉速speed:31.4(10秒一圈) 音長length:90 10*(90/360)=2.5秒 ### 3.8.1 還有哪些變量參數? :::warning * `~drones.createDrone(\args)` 在supercollider的Post Window顯示所有可操作的變量 * 顯示Post Window * Windows: `ctrl + p` * Mac:` cmd + p` * 回傳: ![](https://hackmd.io/_uploads/B1VzJjnC2.png =500x) * **type 波形(音色)**, **tonic 基頻倍數(音高)**, **harmonics 音色亮度(濾波範圍)**, amp 音量, **speed 轉速, length 音長,** angle 角度, degree 音階中的第幾音, ratio, **name 命名**, env 漸強漸弱時長, octave 升高、減低八度音(音高), note 音符(音高) * 查看參數值 `~名字.state ` ::: ### 3.8.2 參數順序 :::danger * `~drones.createDrone(type, tonic, harmonics, amp, speed, length, angle, degree, ratio, name, env, octave, note)` * 按照順序可不用輸入type: tonic: harmonics...等文字描述 例如 : ~drones.createDrone(\saw, 4, 2, 1, 20, 230) 自動對應 type, tonic, harmonics, amp, speed, length, 其餘**angle, degree, ratio, name, env, octave, note 沒輸入會採用預設值**。 * 連同參數名稱例如 tonic:、name:...則可不照順序 ~drones.createDrone(\saw, 4, name:"abc", speed:20, length:230) * \saw位於第一格一樣會被認定是波形 * 第二格照順序為tonic,tonic為4 * 第三格原應是harmonics,但此處有指定是name: harmonics沒被設定==>預設值 * 第四格原本是amp,但輸入speed:20,因此amp也是預設值 (amp預設值為1) * 如果第四格為20而非speed:20,amp就會變20,**音量會超級超級大** * **結論: 通常不會每個參數都設定,有些維持預設值就可** * **要留意順序,沒有按照順序的要加上參數名 tonic:、name:、speed: ...** ::: createDrone.note what is arg "note" function? et31 degree 1-19 is octave why? ## 4.教學(下)音與音群 ### 4.1 chord 和聲 :::warning * 用`~drones.createChord`產生和聲,可一次控制多音 ``` ~drones.createChord(\args) //看post Window ~drones.createChord(\sine, \minor, 4, name:\minor)//小三和絃 ~drones.chords //在post window顯示預設和聲名稱(有些不能用) ~minor.chord = \minor13 //將chord換成minor13 ~minor.tonic_(7,10) ~minor.speed = {rrand(31.4,10.14)} ~minor.kill ``` ::: ### 4.2 tuning ### 4.2.1 鋼琴上的12個鍵 :::warning * ![](https://hackmd.io/_uploads/Bye4FhBWkp.png =200x) * 12鍵鋼琴的調音: 12 equal divisions of the octave 1個八度 do 到 高音do, 低音re 到 re...頻均分成12等分。 稱為12(edo)、12-et(equal temperament)、12-tone、12-TET。 * microtonal音樂通常用到鋼琴上12個音以外的音,有些音高稍微差一點,有些與鋼琴上的音有明顯的音高區別。 * instrument by Vito Trasuntino, 1609 大鍵琴 (31-edo) <iframe width="560" height="315" src="https://www.youtube.com/embed/XGZUqu3Ir_4?si=KnRjh5QZHLQXbxC1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> * 如果把一個八度平均分為31個音,平時熟悉的小三和絃(do-mi-so),因為mi音附近多了聽起來也接近mi的音,於是產生了不同的小三和絃組合,和絃色彩也不盡相同。 * [Zheanna Erose 31-EDO Music Theory: Basic Triads - YouTube](https://www.youtube.com/watch?v=7cv-nuSjbY4 ) ![](https://hackmd.io/_uploads/H1mjA56R3.png =450x) ::: ### 4.2.2 31-edo 小三和絃 :::warning * `~drones.tunings ` 查看有哪些tuning ``` ~drones.tuning = \et31 ~drones.createDrone(\sine, tonic:3, name:"root",ratio:1) ~drones.createDrone(\sine, tonic:3, name:"fifth", ratio:19) ~drones.createDrone(\sine, tonic:3, name:"third",ratio:9,octave:2) ~third.ratio = 1 ~third.ratio = 32 //31等分 一個八度 ~third.ratio = 8 //sMin 小三再低一點和絃 ~third.ratio = 9 //Min 小三和絃 ~third.ratio = 10 //Neu 介於大三和小三,鋼琴上沒有的三和絃 ~third.ratio = 11 //Maj 大三和絃 ~third.ratio = 12 //Smaj 大三再高一點和絃 ~third.ratio = 14 //sus4 ,與12音的sus4稍微不同 ~third.octave= 1 ~fifth.octave= 1 ~fifth.state //1.5*55*2*1.495518 = 246.76047 //tonic root octave ratio //http://www.tonalsoft.com/enc/number/31edo.aspx ~drones.killAll ``` ::: ### 4.2.3 31-edo harmonic series 8-16 :::warning **小合奏(三)** * `~drones.tuning =\et31` * ratio : 1,6,11,15,19,23,26,29 * tonic : 2 * octave: >2 * 其餘參數自訂 * 例: `~drones.createDrone(\sine, tonic:2, ratio: 15, octave: 3, speed:30, length:100)` **小合奏(三)變化** * ratio: 10~20秒變化至1,19,37  * 例 `~名字.ratio_(19,10)`  * 1,6,11,15,19,23,26,29 這幾個音代表什麼呢? 有興趣請見 [Zheanna Erose 31-EDO Music Theory: The Overtone Scale & Harmonic Approximation in 31edo - YouTube](https://www.youtube.com/watch?v=unuVHCZ2snE&t=206s "31-EDO Music Theory: The Overtone Scale & Harmonic Approximation in 31edo - YouTube") ::: ### 4.3 疊代表示法 :::warning * ~drones.interpret(......) 可以疊代、反覆一組規則。 ::: * 範例一: ``` ~drones.interpret({ 50.do({|i| ~drones.createDrone(\saw, 1+i, 3, 0.3, 36-(i*3), 20, 25*(i+1)) }) }) ``` * 範例二: ``` ( ~drones.tuning = \et31; ~drones.interpret( { 16.do( {|i| ~drones.createDrone( type:\sine, ratio: i*2, tonic: i.mod(2)+10.rand , speed: rrand(2,6), length: exprand(50,10)) } )} ); ) ~drones.killAll ``` * 範例三 ``` ( ~drones.tuning = \et12; ~drones.createChord(\sine, \minor, 4, name:\minor); ~drones.interpret( {9.do({|i| ~drones.createDrone( type:\sine, ratio: List[0,5,10,14,18,22,25,28].wrapAt(i), // List[0,7,13,18,25].wrapAt(i), tonic: 1, octave: 1, speed: 12+i*2, length: 10 +i*5 // amp: rrand(0.1,0.5) ) })}); ) ``` * 範例四 ``` ( ~drones.tuning = \et12; ~drones.interpret( 4.do({|i| ~drones.createChord( \saw, \major, tonic:i+1, harmonics:2, length:(10*(4-i)), speed:(1+i)*2, amp:rrand(0.1,0.4) )})) ) ``` * `~drones.drawHarmonics = false` 關閉harmonic series基線 * `~drones.drawHarmonics = true` 開啟harmonic series基線 * `~drones.drawScale = true` 開啟音階基線 ## 參考資料 1. https://thormagnusson.github.io/threnoscope/ 2. https://vimeo.com/thormagnusson 3. [Zheanna Erose 31-EDO Music Theory: Basic Triads - YouTube](https://www.youtube.com/watch?v=7cv-nuSjbY4 ) 4. [Zheanna Erose 31-EDO Music Theory: The Overtone Scale & Harmonic Approximation in 31edo - YouTube](https://www.youtube.com/watch?v=unuVHCZ2snE&t=206s "31-EDO Music Theory: The Overtone Scale & Harmonic Approximation in 31edo - YouTube") 5. http://sleepbot.com/ambience/broadcast/