Csound-004.02 來創造自己的樂器吧!之建立波表

Csound-004.02 來創造自己的樂器吧!之建立波表

來自專欄我的創想與雜談

在上一章所提到的波表合成器中,oscil指令默認調用的是正弦波,只包含一個泛音。但是,在現代的作曲與應用中,非常有必要利用更多有意思的波表。在這一篇我帶領大家利用在樂譜區創建的ftable命令來創建一個能被振蕩器所使用的波表。

典型的計算機生成16位正弦波波表

我們之前得知了oscil指令可以接受一個可選的命令,也就是波表序號。這一點是與樂譜區域的ftable所對應。那麼什麼是ftable呢?它即是一個計算機中常用的查找表,用一定指令來計算出一個x與y對應的點對點的函數。這時輸入x值就可以輸出對應的y值。在振蕩器的應用中,可以將它理解為生成出來的一個基礎波形,在任何頻率去播放這個波表都可以讓它發出在這個頻率上的此波形。若將它利用到adsr生成,或者lfo生成,則會產生不一樣的作用。

在這裡我們首先來看一段典型的ftable(如圖4-1或以下的例子)

圖(4-1),以下文檔內容拷貝入csound即可

;f命令 序號 波表產生時間(0為無限長)波表大小 生成演算法 第一個參數 第二個參數 第三個參數 第四個參數 第五個參數 第六個參數 第七個參數

f 1 0 1024 10 1 0 0.5 0 0.3 0 0.2

  1. f命令 即是告訴計算機產生一段查找表
  2. 序號1 是告訴計算機這個波表的序號是1,0表示這個波表一直產生
  3. 波表大小 1024代表了這個波表有1024段,波表大小越大,其數字失真越小,且越接近連續信號。
  4. 生成演算法 代表了這個波表調用GEN10來生成波表
  5. 往後的所有參數都是屬於調用GEN10演算法時需要的參數

那麼我們首先來了解一下GEN Routines。GEN Routines是Csound所使用的一種填滿波表的命令。根據調用GEN Routines的序號以及後面所跟隨著序號的參數,即可使用該GEN來產生信號。要注意一點的是,f statement仍然存儲於樂譜區域,所以所有的命令都不必要用頓號分隔開。在Csound中,GEN Routine有千千萬的種類,關於其詳細請點擊以下鏈接:csounds.com/manual/html

在上面的例子中,我所使用的GEN為GEN10,也就是頻域的泛音權重疊加合成。其排序方法是10 諧波1 [諧波2 諧波3 諧波4 諧波5]。其中,中括弧[]的內容同樣是可以省略的。若省略了特定諧波往後的諧波,則代表此諧波後沒有諧波。

既然我們得知了此命令,我們就可以通過填補諧波的成分來還原一個波形:

1,正弦波

由於其只存在基頻,因此我們可以得到以下ftable:

f1 0 1024 10 1

2,方波

由於其只存在奇次諧波,且奇次諧波的權重按照泛音數量漸漸變少,因此我們可以得到以下ftable:

f2 0 1024 10 1 0 0.3 0 0.2 0 0.14 0 .111

備註:其中的0即代表按次序排列的偶次諧波

3,鋸齒波

由於其存在所有諧波,且諧波的權重按照泛音數量漸漸變少,因此我們可以得到以下ftable:

f3 0 1024 10 1 0.5 0.3 0.25 0.2 0.167 0.14 0.125 .111

擁有以下波表之後,我們就可以將它導入我們的振蕩器。由於上面正弦波對應波表1,方波對應波表2,鋸齒波對應波表3,我們需要將它的序號填到oscil指令的第三項中,如下所示:

instr 1

a1 oscil 10000, 440, 1/2/3 ;1代表正弦波,2代表方波,3代表鋸齒波,選其中1個即可

outs a1, a1

endin

那麼我們可以生成以下csd,同樣,只需要拷貝進csound即可運行

<CsoundSynthesizer>

<CsOptions>

-odac -d

</CsOptions>

<CsInstruments>

sr = 44100

ksmps = 32

nchnls = 2

instr 1

a1 oscil 10000, 440, 1

outs a1, a1

endin

instr 2

a1 oscil 10000, 440, 2

outs a1, a1

endin

instr 3

a1 oscil 10000, 440, 3

outs a1, a1

endin

</CsInstruments>

<CsScore>

f1 0 1024 10 1 ; Sine

f2 0 1024 10 1 0 0.3 0 0.2 0 0.14 0 .111 ; Square

f3 0 1024 10 1 0.5 0.3 0.25 0.2 0.167 0.14 0.125 .111 ; Sawtooth

i1 0 2

i2 2 2

i3 4 2

</CsScore>

</CsoundSynthesizer>

當然,同學們也可以創建自己所感興趣的波表,可以有非常複雜的諧波結構,也可以利用更大的波表區域來創建數字失真更小的波形。或者根據上面提供的網站來學習更多創建波表的方式。接下來的教程中我也會提到更多有意思的GEN Routine來幫助各位同學得到自己需要的波表。

總結:

利用GEN10可以創建被oscil命令所利用的波表。

ftable的生成被存放在樂譜區,所以不能使用逗號分隔命令。

oscil命令的第三項參數即是對應的波表序號。

推薦閱讀:

直接數字式頻率合成器(DDS)的基本原理
TB 303是什麼?
合成器的模擬合成器,採樣器,工作站等分類有什麼區別? ?

TAG:電子音樂 | 編程 | 合成器 |