OpenMusic公式チュートリアル解説:2 - 音程間隔の反転(転置)(I)
■今回のテーマ
算術演算子を使用してノートを反転させる。
■使用するファンクション
NOTE、om+、om-、x-append.
■解説
このパッチは NOTEボックス (A) - (B) 間の転回形を返す。つまり、C3-B3 (長7度) を入力値としているので、C#2-C3を返している。
X-APPEND [GENERIC-FUNCTION]
対象要素の前後に要素を追加する。
Ex. (x-append '(1 2 3) 4 '(5 6 7)) => (1 2 3 4 5 6 7)
A, B:CHORDボックスではなく、NOTEボックスであることに注意。また、単音なので、出力がリスト化されていない状態のアトム(カッコが付いていない最小限の要素)であることにも注目したい。
C: 最初のNOTEボックス (A) と第二のNOTEボックス (B)の差分を、"om-" で計算する。
D: 最初のNOTEボックスと(C)の演算結果をom+で加算する。これにより、トップノートの転置後のピッチを算出している。
E: x-append で各ピッチの値をリストとしてまとめ、CHORD ボックスに出力している。CommonLispの "append" と違い、リストだろうがアトムだろうがなんでも取りまとめてくれる。
F: CHORD ボックスを評価し (F) 、結果を確認してみよう。反転された間隔をが返却されるはずだ。
で、CommonLispの"append"じゃ駄目なのか?という事になるのだが、結論から言うと駄目。"append"は、リスト同士の結合で利用する為の物(正確にはちょっと違うが)。引数が両方アトムだとエラーとなってしまう。
↓こちらは、お互いの引数を調整してList化したものなのでエラーにならない。