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

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

UDO(User Defined Opcode)

使い方:マクロやユーティリティー関数のように決まりきった部分を切り出して再利用が基本的な考え方
書き方:定義時に1文字で表した型を連結し並びを表現。xin, xoutを使って変数と紐付け

opcode OPCODENAME, INPUT_TYPE, OUTPUT_TYPE
inarg1[, inarg2, ...] xin
.
.
xout outarg1 [, outarg2, ...]
endop

これじゃ分かりにくいので。

定義例)
opcode MY_FIRST_OPCODE akk, aa          <- 入出力の型と並びだけを定義する
asig, kpch, kamp xin              <- akkに対応して a-rate, k-rate, k-rate
    (中略)
xout aout1, aout2                 <- aaに対応して a-rate, a-rate
endop

INCDIRの下にUDOというディレクトリを作成*1。opcode定義をmy_opcode.udoというファイルに保存しファイルをudoディレクトリに移動。。

 (略)
#include "udo/my_opcode.udo"
instr 1
 (中略)
 aout_l, aout_r MY_FIRST_OPCODE aout, k_pitch, k_amp
 outs aout_l, aout_r
<

入力型は入力値を省略できる特殊な型がある。(そんな型、若干不自然だが)















































入力型 意味 許される変数の型 更新タイミング
a a-rate variable a-rate a-rate
i i-rate variable i-rate i-time
j optional i-time、デフォルト値が-1 i-rateもしくはconstant i-time
kk-rate variable k-rate、i-rateもしくはconstant k-rate
K 初期化ありのk-ratek-rate、i-rateもしくはconstant i-timeとk-rate
o optional i-time、デフォルト値が0 i-rateもしくはconstanti-time
p optional i-time、デフォルト値が1 i-rateもしくはconstant i-time

  1. 入力引数最大値は256

入力方にも出力型にも初期化ありのk-rateというのがある。この意味は現在不明。

































出力型 意味 許される変数の型 更新タイミング
a a-rate variable a-rate a-rate
i i-rate variable i-rate i-time
k k-rate k-rate k-rate
K 初期化ありのk-rate k-rate i-time及びk-rate

  • 入力引数最大値は256

*1:Fedora 7+csound5.06の環境ではINCDIRの下に ln -s でシンボリックリンクを持ってくるだけでもOK