Files
quartz-research-note/content/mimiumでのシーケンサ.md
Matsuura Tomoya(Windows) d3d55d81b9
Some checks failed
Build / build (push) Failing after 14m43s
[obsidian] vault backup: 2025-10-11 21:07:13[
2025-10-11 21:07:13 +09:00

2.3 KiB
Raw Blame History

#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の役割ってことか

supercollider/SCClassLibrary/Common/Streams/Stream.sc at d4b6f8d5e6c9e419c86b3c44d899b63b4610893b · supercollider/supercollider · GitHub

ここでもなさそうだな、謎・・・。

まあでも,degreeとfreqの自動変換とかは単位変換のための型システムで解決すべき問題かも