2.3 KiB
2.3 KiB
#memo #mimium
SuperCollider
SuperColliderのPatternに相当するものを作ってみたい。
Pattern Guide 03: What Is Pbind | SuperCollider 3.14.0-dev Help
Pattern自体は基本的にはシンプルな遅延リスト。だが値の種類を、ピッチと長さとかグループ化できてジェネリックなので、静的型付け言語だとジェネリクスがいる(next
メソッドを持つ型クラスとかインターフェース的なものが欲しくなる)
p = Pbind(\degree, Pwhite(0, 7, inf), \dur, 0.25, \legato, 1).play;
p.stop;
重要ポイント
- あるパターンを先に構築して、それにあとから適当なシンセを当てはめることもできる
- 数値リテラルが定数(不変)パターンに自動キャストされていることで、パターンのリストの要素にさらに別のパターンを埋め込むことができる
Pbind
は実際には遅延リストを実行してイベント(キーバリューの辞書ペア集合)のリストを得ている
mimiumでやろうとすると、パターン型が再帰型になるので、自動で型推論とかは無理になるな
FoxDotだと空白が意味を持つ
一定間隔の値の変化を扱うのはmimiumでもMetroつかえばできる、長さを可変にするときの抽象化ってどうします?
Duration+Restで相対的に表現する?普通のシーケンサーならDuration一定と考えるのが普通
.play
を実行すると、EventStreamPlayer
クラスがいろいろ頑張ってくれるらしい
instrument
の指定なしにPbindすると、デフォのシンセが鳴る
durとかdegreeみたいなのをいい感じに解釈するのはEventStreamPlayerの役割ってことか?
ここでもなさそうだな、謎・・・。
まあでも,degreeとfreqの自動変換とかは単位変換のための型システムで解決すべき問題かも