# 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/