From ce893d2245b070c4b78180469b60272ee22de6c2 Mon Sep 17 00:00:00 2001 From: "Matsuura Tomoya(Windows)" Date: Thu, 26 Jun 2025 01:16:44 +0900 Subject: [PATCH] [obsidian] vault backup: 2025-06-26 01:16:44[ --- content/mimiumでのシーケンサ.md | 34 ++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/content/mimiumでのシーケンサ.md b/content/mimiumでのシーケンサ.md index 92b8a6a5..b800d1dc 100644 --- a/content/mimiumでのシーケンサ.md +++ b/content/mimiumでのシーケンサ.md @@ -3,4 +3,36 @@ [[SuperCollider]]のPatternに相当するものを作ってみたい。 -Pattern自体は基本的にはシンプルな遅延リスト +Pattern自体は基本的にはシンプルな遅延リスト。だが値の種類を、ピッチと長さとかグループ化できてジェネリックなので、静的型付け言語だとジェネリクスがいる(`next`メソッドを持つ型クラスとかインターフェース的なものが欲しくなる) + +重要ポイント + +- あるパターンを先に構築して、それにあとから適当なシンセを当てはめることもできる +- 数値リテラルが定数(不変)パターンに自動キャストされていることで、パターンのリストの要素にさらに別のパターンを埋め込むことができる + +`Pbind`は実際には遅延リストを実行してイベント(キーバリューの辞書ペア集合)のリストを得ている + +[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) + +`.play`を実行すると、`EventStreamPlayer`クラスがいろいろ頑張ってくれるらしい + +`instrument`の指定なしにPbindすると、デフォのシンセが鳴る + +```smalltalk +SynthDef(\default, { arg out=0, freq=440, amp=0.1, pan=0, gate=1; + var z; + z = LPF.ar( + Mix.new(VarSaw.ar(freq + [0, Rand(-0.4,0.0), Rand(0.0,0.4)], 0, 0.3)), + XLine.kr(Rand(4000,5000), Rand(2500,3200), 1) + ) * Linen.kr(gate, 0.01, 0.7, 0.3, 2); + OffsetOut.ar(out, Pan2.ar(z, pan, amp)); +}, [\ir]); +``` + +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) + +ここでもなさそうだな、謎・・・。 + +