いらないモノ、ひつようなモノ

書籍、音楽、そして若干のテクノロジー

csound6.00から導入された配列を使う

←csoundメモ 目次へ戻る

サンプルではボタンを扱うときにver.6.00から導入された配列を利用した。配列の限界についても以下に述べる

バグかも

  • triggerと配列を同時に利用した場合に正常動作しないことが判明。triggerを利用した部分はインデックスで扱わずにすべて書き出すことによって問題を回避。本来は

until kIndx == lenarray(kbtrg) do
 kbtrg[kIndx] trigger kb[kIndx],0.5,0
 kbst[kIndx] = (kbtrg[kIndx]==1 ) ? ~ kbst[kIndx] : kbst[kIndx]
 kIndx +=1
od


で済むところが、triggerが正常動作しないので展開する必要がある。

 kbtrg[0] trigger kb[0], 0.5, 0
 kbtrg[1] trigger kb[1], 0.5, 0
 kbtrg[2] trigger kb[2], 0.5, 0
 kbtrg[3] trigger kb[3], 0.5, 0
 kbtrg[4] trigger kb[4], 0.5, 0
until kIndx == lenarray(kbtrg) do
 kbst[kIndx] = (kbtrg[kIndx]==1 ) ? ~ kbst[kIndx] : kbst[kIndx]
 kIndx +=1
od

配列に対する課題

csound配列の限界--ボタン自身が配列でないためボタンを扱うときに配列のよさが十分に生かせない。

  • 楽器の呼び出すときに引数に配列を渡したい
  • a-rateへの拡張
  • スコアのパラメータもいっそのこと配列に
UIエレメントへの拡張

 kb[0] chnget "butt1"
 kb[1] chnget "butt2"
 kb[2] chnget "butt3"
 kb[3] chnget "butt4"
 kb[4] chnget "butt5"


この部分はたとえば

until kIndx == lenarray(kb) do
 kb[kIndx] = chnget button[xIndx]
 kIndx +=1
od


のようにできないのだろうか

スコア呼び出し時の拡張

配列を直接スコアの引数に呼び出したい。

i1 0 10 #expand{gkparam[0])
i1 + 10 #expand(gkparam[1])
i1 + 10 #expand(gkparam[2])
i1 + 10 #expand(gkparam[3])


a-rateへの拡張

現在k-rateのみで配列は使えるようである

asig1 oscil p4*0dbfs, 440, 1
asig2 oscil p4*0dbfs, 440, 2
asig3 oscil p4*0dbfs, 440, 3
asig4 oscil p4*0dbfs, 440, 4
asig5 oscil p4*0dbfs, 440, 5


これを

until kIndx == lenarray(kb) do
 asig[kIndx] oscil p4*0dbfs, 440, kIndx
 kIndx +=1
od


応用

このケースの場合は本当にいいのかどうか分からない(行数が増えている、可読性があがっているか疑問)

asig=(asig1*p5+asig2*p6+asig3*p7+asig4*p8+asig5*p9)/(p5+p6+p7+p8+p9)


この一行を、繰り返しを使って以下のように書き換え

until kIndx == lenarray(kb) do
 asum = asum + asig[kIndx] * p[kIndex+5]
 inum = inum + p[kIndx+5]
 kIndx +=1
od
asig= asum/inum

←csoundメモ 目次へ戻る