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

52 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#memo #mimium
## SuperCollider
[[SuperCollider]]のPatternに相当するものを作ってみたい。
[Pattern Guide 03: What Is Pbind | SuperCollider 3.14.0-dev Help](https://doc.sccode.org/Tutorials/A-Practical-Guide/PG_03_What_Is_Pbind.html)
Pattern自体は基本的にはシンプルな遅延リスト。だが値の種類を、ピッチと長さとかグループ化できてジェネリックなので、静的型付け言語だとジェネリクスがいる`next`メソッドを持つ型クラスとかインターフェース的なものが欲しくなる)
```smalltalk
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](https://github.com/supercollider/supercollider/blob/d4b6f8d5e6c9e419c86b3c44d899b63b4610893b/SCClassLibrary/Common/Streams/Stream.sc#L491)
ここでもなさそうだな、謎・・・。
まあでも,degreeとfreqの自動変換とかは[[単位変換のための型システム]]で解決すべき問題かも