Opusmodusでなんだかんだで音程を単純にピッチに追加したいだけの時ってどうするんだっけ、ってよくなるので。
例えばこんな感じのフレーズがあったとして、
(setf original '(c4 d4 e4 f4))
この上に機械的に完全4度乗せて
'(c4f4 d4g4 e4 a4 f4bb4))
にしたいとき、
方法1
gen-chord3
を使う。
Opusmodusにはgen-chord
, gen-chord2
, gen-chord3
という史上最悪な関数の命名の関数があって、開発者を恨みつつも、今のところこれが1番短くかけそう。
使い方
(gen-chord3 original (gen-repeat (length original) '(5)))
方法2
create-chord
という関数で定義した"オレオレコード"をexpand-chord
という関数で展開できるらしいので、(今回の例だと)完全4度の音程をコードとして定義してしまうとゴリ押しできる。
(create-chord perfect-5th '(0 5))
(flatten
(mapcar
(lambda (tone)
(expand-chord (list tone 'perfect-5th))
)
original
)
)
方法3
chord-interval-add
という名前そのままな関数あるのでそれを使う。
第一引数で足したい音程のリスト、第二引数で元のシーケンスを取るので、元のシーケンスの長さ分の音程のリストを作って渡せば良い。
(chord-interval-add
(gen-repeat (length original) '(5))
original
)
長さ的にはシンプルに書ける反面、2つ以上の音程を追加するとかは無理っぽいので、シンプルに単一の音程追加したい時向け。
まとめ
どの方法でも出てくるものは同じ。
Opusmodusの計算速度わりと遅いので、スピードを鑑みて使い分けよう。