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 |
k | k-rate variable | k-rate、i-rateもしくはconstant | k-rate |
K | 初期化ありのk-rate | k-rate、i-rateもしくはconstant | i-timeとk-rate |
o | optional i-time、デフォルト値が0 | i-rateもしくはconstant | i-time |
p | optional i-time、デフォルト値が1 | i-rateもしくはconstant | i-time |
- 入力引数最大値は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