滑音,顧名思義,就是由一個音符滑到下一個音符,不發生間斷。若使用一般的方式來彈奏兩個音符,會因波形包絡(振幅包絡)的關係,使得兩個音符聽起來有明顯的分隔。使用滑音技巧的話,可以使音符在轉換的過程中,為漸進式的,慢慢從A頻率移動到B頻率,聽起來會較為柔和,要使用csound產生滑音,需得做波形內插,通常會使用線性內插。假設要從C4在時間(t)0到1內滑到A4,那麼可以設定振盪器演奏C4*(1-t)+A4*t的頻率,這就是內插啦!
有另一個比較好理解的內插作法是:由我們事先指定音符在各個時間下的權重,以上面的例子來說,一開始(t=0)C4的權重為1,A4的權重為0;進行到t=0.5的時候,C4、A4的權重都是0.5;最後(t=1)C4的權重為0,A4的權重為1。csound提供了linseg運算子,用法類似GEN7,都是藉由啟始值、變化時間、終止值,來產生出連續或是不連續的線段。使用一個振盪器,去振盪出頻率為「C4*C4權重+A4*A4權重」的波形,就可以輕鬆產生出滑音。
二滑音
音符順序:A->BA音符的權重:
B音符的權重:
三滑音
音符順序:A->B->CA音符的權重:
B音符的權重:
C音符的權重:
四滑音
音符順序:A->B->C->DA音符的權重:
B音符的權重:
C音符的權重:
D音符的權重:
其他的滑音次數也是像是這樣的方式實作哦!
csound滑音樂器範例
以下程式同時實作出一般音和二到四滑音:
instr 1
;p4~p7:pitch
iamp init 75
iA = cpspch(p4)
iB = cpspch(p5)
iC = cpspch(p6)
iD = cpspch(p7)
i4ht init p3/3.
i3ht init p3/2.
i2ht init p3
if(p5>0) then
if(p6>0) then
if(p7>0) then
a4a linseg 1,i4ht,0,i4ht,0,i4ht,0
a4b linseg 0,i4ht,1,i4ht,0,i4ht,0
a4c linseg 0,i4ht,0,i4ht,1,i4ht,0
a4d linseg 0,i4ht,0,i4ht,0,i4ht,1
af = a4a*iA+a4b*iB+a4c*iC+a4d*iD
else
a3a linseg 1,i3ht,0,i3ht,0
a3b linseg 0,i3ht,1,i3ht,0
a3c linseg 0,i3ht,0,i3ht,1
af = a3a*iA+a3b*iB+a3c*iC
endif
else
a2a linseg 1,i2ht,0
a2b linseg 0,i2ht,1
af = a2a*iA+a2b*iB
endif
else
af = iA
endif
av linen iamp, 0.1, p3, 0.1 ;ring the amplitude
asig oscili av, af, 1
out asig
endin