Table of Contents
1. はじめに:生体音響パラダイム
Conchordalは、生成音楽およびコンピュテーショナル・オーディオにおける従来の規範から根本的に逸脱したシステムである。従来のシステムがシンボリックな操作―量子化されたピッチのグリッド(MIDI、平均律)と離散化された時間(BPM、小節)―に依存するのに対し、Conchordalは聴覚知覚の連続的かつ生物学的に基盤を持つシミュレーションとして機能する。本システムは、音楽構造が抽象的な作曲の産物ではなく、音響的生存の創発的特性であると仮定する。
本テクニカルノートは、システムのアーキテクチャ、信号処理アルゴリズム、および人工生命戦略に関する包括的なリファレンスとして機能する。Conchordalが心理音響学の原理―特に臨界帯域理論、仮想ピッチ知覚、および神経エントレインメント―を自律的エコシステムのダイナミクスとどのように統合しているかを詳述する。この環境において、音は生きた有機体、すなわち代謝、感覚処理能力、そして敵対的なスペクトル地形を航行する自律性を持つ「個体(Individual)」として扱われる。
システムの創発的挙動は、統一された適応度関数である「協和度(Consonance)」の追求によって駆動される。Conchordalエコシステム内のエージェントは、事前に書かれた楽譜に従うことはない。代わりに、環境を継続的に分析し、「スペクトル快適性(Spectral Comfort)」―感覚的粗さの最小化として定義される―と「和声的安定性(Harmonic Stability)」、すなわち仮想基音強度の最大化を追求する。その結果、決定論的なシーケンシングではなく、物理法則の相互作用を通じて和声、リズム、音色が有機的に進化する自己組織化サウンドスケープが生まれる。
本書では、Conchordalアーキテクチャの3つの基盤となる柱について探求する:
- 心理音響座標系:線形ヘルツや整数MIDIノートを置き換える
Log2SpaceとERBスケールの数学的フレームワーク。 - 認知的ランドスケープ:生オーディオストリームから粗さ($R$)と和声性($H$)フィールドを計算するリアルタイムDSPパイプライン。
- ライフエンジン:オーディオエンティティの代謝、移動、神経エントレインメントを支配するエージェントベースモデル。
2. 心理音響座標系
Conchordalの重要なイノベーションは、内部処理において線形周波数スケール($f$)を棄却したことである。人間の聴覚知覚は本質的に対数的であり、ピッチ間隔の知覚は周波数差ではなく周波数比に基づいている。これを正確かつ効率的にモデル化するため、Conchordalは蝸牛のトノトピックマップと計算グリッドを整合させるカスタム座標系Log2Spaceを確立している。
2.1 Log2 Spaceの基盤
Log2Space構造体は、システム内のすべてのスペクトル分析、カーネル畳み込み、およびエージェント位置決めのバックボーンとして機能する。物理的周波数ドメイン(Hz単位の$f$)を知覚的対数ドメイン($l$)にマッピングする。
2.1.1 数学的定義
ヘルツから内部対数座標への変換は、周波数の2を底とする対数として定義される。この選択は意図的なものである:2を底とする場合、1.0の増分は正確に1オクターブに対応し、これはピッチ知覚において最も基本的な音程である。
$$ l(f) = \log_2(f) $$
逆変換は、オーディオスレッドの合成パラメータを導出するために使用される:
$$ f(l) = 2^l $$
座標空間は、解像度パラメータbins_per_oct($B$)によって定義されるグリッドに離散化される。このパラメータはシミュレーションの粒度を決定する。$B=48$または$B=96$の典型的な値は、連続的なピッチグライドとマイクロトーナルな抑揚に十分なセミトーン以下の解像度を提供する。ステップサイズ$\Delta l$はスペクトル範囲全体で一定である:
$$ \Delta l = \frac{1}{B} $$
2.1.2 グリッドの構築とインデックス
Log2Space構造は、設定された範囲$[f_{min}, f_{max}]$にわたるすべてのビンの中心周波数を事前計算する。ビン数$N$は完全なカバレッジを確保するように決定される:
$$ N = \lfloor \frac{\log_2(f_{max}) - \log_2(f_{min})}{\Delta l} \rfloor + 1 $$
システムはDSP処理中の$O(1)$アクセスのために2つの並列ベクトルを維持する:
centers_log2:対数座標 $l_i = \log_2(f_{min}) + i \cdot \Delta l$。centers_hz:事前計算された線形周波数 $f_i = 2^{l_i}$。
この事前計算はリアルタイム性能にとって不可欠であり、スペクトルカーネルの内部ループ内でコストのかかるlog2やpow呼び出しを排除する。メソッドindex_of_freq(hz)は量子化ロジックを提供し、任意の浮動小数点周波数を最も近いビンインデックスにマッピングする。
2.2 Constant-Q帯域幅特性
Log2Spaceは、スペクトル全体にわたってConstant-Q(一定Q値)特性を本質的に強制する。信号処理の用語で、$Q$は中心周波数と帯域幅の比として定義される:$Q = f / \Delta f$。
線形システム(標準FFTなど)では$\Delta f$が一定であり、$Q$は周波数とともに増加する。Log2Spaceでは、$i$番目のビンの帯域幅$\Delta f_i$が中心周波数$f_i$に比例してスケーリングする。この特性は人間の聴覚システムの周波数選択性を模倣している。耳の周波数分解能は(絶対Hz単位で)周波数が上がるにつれて低下する。この整合により、Conchordalは計算リソースを効率的に配分でき、手動のマルチレート処理なしに高周波では高い時間分解能を、低周波では高いスペクトル分解能を使用できる。
2.3 等価矩形帯域幅(ERB)スケール
Log2Spaceはピッチ関係(オクターブ、倍音)を扱うが、耳の臨界帯域を完全にはモデル化していない。臨界帯域は純粋な対数マッピングが示唆するよりも低周波で広い。感覚的粗さ(不協和)を正確に計算するため、ConchordalはGlasberg & Moore(1990)モデルに基づく等価矩形帯域幅(ERB)スケールを実装している。
core/erb.rsモジュールは、粗さカーネルで使用される変換関数を提供する。周波数$f$(Hz)からERBレート単位$E$への変換は次式で与えられる:
$$ E(f) = 21.4 \log_{10}(0.00437f + 1) $$
周波数$f$における臨界帯域の帯域幅は:
$$ BW_{ERB}(f) = 24.7(0.00437f + 1) $$
このスケールはLog2Spaceとは異なる。Log2Spaceがピッチと和声性のドメイン(関係がオクターブ不変)であるのに対し、粗さ計算では干渉を評価するためにスペクトルエネルギーをERBドメインにマッピングする必要がある。システムは事実上、スペクトルの二重ビューを維持している:倍音テンプレート用の厳密な対数的ビューと、不協和度評価用の心理音響的ビューである。
3. 聴覚的ランドスケープ:環境の分析
「ランドスケープ」はConchordalの中心的データ構造である。すべてのエージェントの共有環境として機能し、各周波数ビンの心理音響的「ポテンシャル」を表す動的スカラー場である。エージェントは互いに直接相互作用するのではなく、集団全体のスペクトルエネルギーを集約するランドスケープと相互作用する。これにより、シミュレーションの複雑さがエージェント数から切り離される($O(N)$ vs $O(N^2)$)。
ランドスケープは、分析ワーカーによってオーディオフレーム(またはブロック)ごとに更新される。2つの主要な指標を合成する:
- 粗さ($R$):近接する部分音間の急速なうなりによって引き起こされる感覚的不協和。
- 和声性($H$):仮想ピッチ強度とスペクトル周期性の尺度。
周波数$f$および時刻$t$における正味の協和度($C$)は、エージェントがサンプリングする適応度フィールドである:
$$ C(f,t) = H(f,t) - k_r \cdot R(f,t) $$
個々のエージェントは独自の知覚コンテキスト(PerceptualContext)を維持しており、エージェントごとの飽きや親密度を追跡し、ピッチ選択時に追加のスコア調整を提供する。
3.1 非定常ガボール変換(NSGT)
Log2Spaceにスペクトルデータを取り込むため、Conchordalは非定常ガボール変換(NSGT)のカスタム実装を使用する。固定ウィンドウサイズを使用する短時間フーリエ変換(STFT)とは異なり、NSGTはセクション2.2で導出したConstant-Q特性を維持するためにウィンドウ長$L$を周波数に反比例させて変化させる。
3.1.1 カーネルベースのスペクトル分析
core/nsgt_kernel.rsの実装は、この変換を効率的に実行するためにスパースカーネルアプローチを利用する。各対数周波数帯域$k$に対して、時間領域カーネル$h_k$が事前計算される。このカーネルは、帯域の中心周波数$f_k$での複素正弦波と、長さ$L_k \approx Q \cdot f_s / f_k$の周期的ハン窓$w_k$を組み合わせる。
$$ h_k[n] = w_k[n] \cdot e^{-j 2\pi f_k n / f_s} $$
これらのカーネルは初期化時に周波数領域($K_k[\nu]$)に変換される。性能を最適化するため、システムはこれらの周波数カーネルをスパース化し、有意なエネルギーを持つビンのみを格納する。
実行時には、入力オーディオバッファに対して単一のFFTを実行してスペクトル$X[\nu]$を取得する。帯域$k$の複素係数$C_k$は、周波数領域での内積を介して計算される:
$$ C_k = \frac{1}{N_{fft}} \sum_{\nu} X[\nu] \cdot K_k^*[\nu] $$
この「1回のFFT、多数のカーネル」アプローチにより、Conchordalは各帯域に対して個別のDFTを計算したり、再帰フィルタバンクを使用したりする計算オーバーヘッドなしに、20Hzから20kHzをカバーする高解像度の対数間隔スペクトルを生成できる。
3.1.2 リアルタイム時間平滑化
生のスペクトル係数$C_k$は、オーディオ入力の確率的性質(特にノイズベースのエージェントの場合)により高い分散を示す。エージェントがサンプリングする安定したフィールドを作成するため、RtNsgtKernelLog2構造体はNSGTを時間平滑化レイヤーでラップする。
帯域ごとのリーキー積分器(指数平滑化)を実装している。重要なのは、時定数$\tau$が周波数依存であることである。ゆっくり変化する低周波はより長い$\tau$で平滑化され、過渡的な詳細を伝える高周波はより短い$\tau$を持つ。
$$ y_k[t] = (1 - \alpha_k) \cdot |C_k[t]| + \alpha_k \cdot y_k[t-1] $$
ここで、平滑化係数$\alpha_k$はフレーム間隔$\Delta t$から導出される:
$$ \alpha_k = e^{-\Delta t / \tau(f_k)} $$
これは耳の「積分時間」をモデル化し、ランドスケープが瞬時信号電力ではなく心理音響的知覚を反映することを保証する。
3.2 粗さ($R$)の計算:Plomp-Levelモデル
粗さは、同じ臨界帯域内にあるが単一のトーンとして知覚されるほど十分に近くないスペクトル成分の干渉(うなり)によって引き起こされる「ザラザラ感」や「ブンブン音」の感覚である。Conchordalは、ERBドメインでの畳み込みを介してPlomp-Levelモデルの変形を実装している。
3.2.1 干渉カーネル
計算の核心は、core/roughness_kernel.rsで定義された粗さカーネルである。このカーネル$K_{rough}(\Delta z)$は、$\Delta z$ ERB離れた2つの部分音間の干渉曲線をモデル化する。曲線は部分音が離れるにつれて急速に上昇し、約0.25 ERB(最大粗さ)でピークに達し、さらに離れると減衰する。
実装はパラメータ化された関数eval_kernel_delta_erbを使用してこの形状を生成する:
$$ g(\Delta z) = e^{-\frac{\Delta z^2}{2\sigma^2}} \cdot (1 - e^{-(\frac{\Delta z}{\sigma_{suppress}})^p}) $$
第2項は、$\Delta z \to 0$のときにカーネルがゼロになることを保証する抑制係数であり、単一の純音が自己粗さを生成することを防ぐ。
3.2.2 畳み込みアプローチ
すべてのスペクトルビンに対してペアワイズで粗さを計算すること($N^2$の計算量)は、リアルタイムアプリケーションでは計算上禁止的である。Conchordalはこれを線形畳み込みとして扱うことで解決する。
- マッピング:NSGTからの対数間隔振幅スペクトルを線形ERBグリッドにマッピング(または補間)する。
- 畳み込み:この密度$A(z)$を事前計算された粗さカーネル$K_{rough}$と畳み込む。
$$ R(z) = (A * K_{rough})(z) = \int A(z-\tau) K_{rough}(\tau) d\tau $$
結果$R(z)$は周波数$z$における「粗さポテンシャル」を表す。エージェントが$z$にトーンを配置した場合、既存のスペクトルエネルギーと相互作用して$R(z)$に比例した粗さを生成する。協和を求めるエージェントはこのフィールドのピークを積極的に回避する。
3.3 和声性($H$):兄弟投影アルゴリズム
粗さがエージェントを不協和から遠ざける(分離)一方で、和声性($H$)はエージェントを融合―一貫した和音と音色の創造―へと導く。Conchordalはこのフィールドを計算するために「兄弟投影(Sibling Projection)」と呼ばれる新しいアルゴリズムを導入する。このアルゴリズムは、脳の「共通基音」検出メカニズム(仮想ピッチ)を完全に周波数領域で近似する。
3.3.1 概念:仮想基音
このアルゴリズムは、周波数$f$のスペクトルピークはその下位倍音($f/2, f/3, f/4 \dots$)に基本周波数(根音)が存在する可能性を暗示すると仮定する。複数のスペクトルピークが共通の下位倍音を共有する場合、その下位倍音は強い「仮想基音」を表す。
3.3.2 2パス投影
アルゴリズムは対数グリッドの整数特性を利用して、Log2Spaceスペクトル上で2つのパスで動作する:
-
下方投影(基音探索):現在のスペクトル包絡が下方に「塗り広げ」られる。エネルギーを持つすべてのビン$i$に対して、アルゴリズムは整数$k \in {1, 2, \dots, N}$についてビン$i - \log_2(k)$にエネルギーを追加する。
$$ Roots[i] = \sum_k A[i + \log_2(k)] \cdot w_k $$
ここで$w_k$は倍音インデックス$k$とともに減衰する重み係数(例:$k^{-\rho}$)であり、低次の倍音が高次のものよりも強く根音を暗示することを反映する。結果の
Rootsはすべての周波数における仮想ピッチの強度を記述する。 -
上方投影(倍音共鳴):システムは次に
Rootsスペクトルを上方に投影する。$f_r$に強い根音が存在する場合、そのすべての自然倍音($f_r, 2f_r, 3f_r \dots$)に安定性を暗示する。$$ H[i] = \sum_m Roots[i - \log_2(m)] \cdot w_m $$
創発的な調性安定性:200 Hzに単一のトーンがある環境を考える。
- ステップ1(下方):100 Hz($f/2$)、66.6 Hz($f/3$)、50 Hz($f/4$)などに根音を投影する。
- ステップ2(上方):100 Hzの根音は100、200、300、400、500... Hzに安定性を投影する。
- 300 Hzは100 Hzの根音の完全5度である。
- 500 Hzは100 Hzの根音の長3度である。
したがって、西洋音楽理論のハードコードされた知識なしに、システムは単に倍音列の物理の結果として、長3度と完全5度の関係に安定性のピークを自然に生成する。200 Hzのエージェントは300 Hzと500 Hzに「重力井戸」を作り、他のエージェントが長三和音を形成するよう誘う。
3.3.3 鏡像二元性:上音列 vs 下音列
core/harmonicity_kernel.rsの実装には深遠なパラメータmirror_weight($\alpha$)が含まれている。このパラメータは2つの異なる投影パスをブレンドする:
- パスA(上音列/長調):上述の標準的な「下方-次に-上方」投影。上音列に基づく重力を作成し、長調の調性を好む。
- パスB(下音列/短調):逆転した「上方-次に-下方」投影。共通の上音を見つけて下音を投影する。これはパスAの理論的双対であり、短調やフリギア調性(下音列)を好む。
$$ H_{final} = (1-\alpha)H_{overtone} + \alpha H_{undertone} $$
mirror_weightを変調することで、ユーザーは宇宙の基本物理を長調中心から短調中心へ連続的にモーフィングし、それに応じてエコシステムがどのように再編成されるかを観察できる。
4. ライフエンジン:エージェントと自律性
「ライフエンジン」はDSPランドスケープ上で実行されるエージェントベースのシミュレーションレイヤーである。「個体(Individuals)」の集団を管理し、ライフサイクル、感覚処理、およびアクチュエーション(オーディオ合成)を処理する。
4.1 個体アーキテクチャ
Individual構造体(life/individual.rs)はエコシステムの原子単位である。4つのコンポーネントで構成される:SoundBodyアクチュエータと3つの行動コア(Temporal、Field、Modulation)。
4.1.1 SoundBody(アクチュエータ)
SoundBodyトレイトはエージェントの音生成機能を定義する。波形のレンダリングとスペクトルフットプリントをシステムに投影する(ランドスケープ更新のため)責任を持つ。
SineBody:純粋な正弦波を合成する。HarmonicBody:基音と一連の部分音からなる複合音を合成する。このボディはTimbreGenotypeの概念を導入し、以下のようなパラメータをエンコードする:stiffness:非調和性係数(部分音列の伸張)。brightness:スペクトル傾斜(高次部分音の減衰)。damping:周波数依存の減衰率。mode:調和的(整数倍)vs 金属的(非整数比)。
HarmonicBodyは音色の進化を可能にする。高いstiffnessを持つエージェントは、純粋に調和的なランドスケープでは生存が困難になる可能性があり、その非調和部分音が集団と衝突しないユニークな「スペクトルニッチ」を探さざるを得なくなる。
4.1.2 コアスタック(Temporal、Field、Modulation)
行動は3つの焦点を絞ったコアに分割され、それぞれが単一の制御軸を処理する:
- TemporalCore(いつ/ゲート):リズム、ゲーティング、エンベロープダイナミクスを管理する。バリアントには
entrain(NeuralRhythmsへの蔵本型同期)、seq(固定時間エンベロープ)、drone(ゆっくりとした揺らぎ)がある。 - FieldCore(どこ):協和度、距離ペナルティ、音域重力、およびエージェントごとの知覚調整に基づいて、log周波数空間での次のターゲットを提案する。デフォルト実装は
pitch_hill_climb。 - ModulationCore(どれだけ):他のコアをバイアスする変調パラメータ(探索、持続性)を出力するが、ターゲットやリズムは選択しない。初期実装は
static。
4.2 ライフサイクルと代謝
Conchordalのエージェントは生物学的代謝をモデル化したエネルギーダイナミクスによって支配される。LifecycleConfigは2つの存在モードを定義する:
- Decay:エージェントは固定された
initial_energyプールを持って生まれる。時間の経過とともに(半減期で)このエネルギーを消費し、ゼロになると死ぬ。これはプラックやパーカッションのような過渡的な音をモデル化する。 - Sustain:エージェントは
metabolism_rate(秒あたりのエネルギー損失)を持つが、breath_gainを介してエネルギーを獲得できる。- Breath Gain:これは重要なフィードバックループである。エージェントがエネルギーを回復する速度は、現在の協和度の関数である。
- 生存:不協和(低い$C$)領域のエージェントは「飢える」―エネルギーが枯渇し、振幅が減衰し、最終的に死ぬ。協和(高い$C$)領域のエージェントは「養われる」―エネルギーを維持または獲得し、より大きく歌い、より長く生きることができる。
このメカニズムはダーウィン的圧力を生み出す:協和なものの生存。調和関係を見つけたエージェントだけが生き残って聴こえるため、音楽構造が創発する。
4.3 フィールド再ターゲットロジック
エージェントは静的ではない。適応度を改善するために周波数空間を移動する。実行レイヤー(Individual::update_field_target)は再ターゲットゲート(thetaのゼロ交差と積分ウィンドウ)を適用し、FieldCoreに次のターゲットを提案させる。
- 再ターゲットゲート:Individualは現在の周波数に基づいて時間を積分し、thetaの交差がウィンドウと整合したときのみ発火する。これにより再ターゲティングがリズミカルかつスケール感度を維持する。
- フィールド提案:FieldCore(現在は
PitchHillClimb)は現在のターゲット周辺の離散的な候補セットを評価する。各候補を協和度からペナルティ(距離、音域重力、PerceptualContextからのエージェントごとの知覚調整)を引いてスコアリングする。 - 変調影響:ModulationCoreはpersistenceとexplorationを提供する。これらのパラメータは改善がわずかな場合にエージェントが留まるかホップするかをバイアスし、FieldCoreは改善の強度を反映する
salienceスコア(0..1)を返す。
移動はLog2Spaceでのホップポリシーを使用する:breath_gainを介してフェードアウトし、新しいターゲットにピッチをスナップし、フェードインする。これにより連続的なポルタメントではなく離散的なジャンプが生じる。
5. 時間的ダイナミクス:神経リズム
Conchordalはマスタークロックやメトロノームの概念を避ける。代わりに、神経振動(脳波)に触発された連続変調フィールドによって時間が構造化される。これは「空間」ランドスケープの「時間」版である。
5.1 変調バンク
NeuralRhythms構造体は、生理学的周波数帯域に調律された共振フィルタのバンクを管理する:
- デルタ(0.5–4 Hz):エコシステムのマクロスコピックな「パルス」。このバンドにロックされたエージェントは長いフレーズレベルのノートを演奏する。
- シータ(4–8 Hz):「アーティキュレーション」レート。音節的リズムと中速のモチーフを支配する。
- アルファ(8–12 Hz):「テクスチャ」レート。トレモロ、ビブラート、シマリング効果に使用される。
- ベータ(15–30 Hz):「テンション」レート。不協和や興奮に関連する高速なフラッター。
5.2 活力と自励振動
各バンドはレゾネータ、すなわち減衰調和振動子として実装されている。重要なパラメータはvitalityである。
Vitality = 0:レゾネータは受動フィルタとして機能する。イベント(例:大きなエージェントのスポーン)によって励起されたときのみ鳴り、その後減衰する。Vitality > 0:レゾネータはアクティブゲインを持つ。入力がなくてもリズムサイクルを維持しながら自励振動できる。
これは双方向の相互作用を生み出す:グローバルリズムがエージェントを駆動し(エントレインメント)、エージェントもグローバルリズムを駆動する(励起)。デルタバンドでスポーンした大きな「キック」エージェントはデルタレゾネータを「鳴らし」、そのバンドに結合した他のエージェントを同期させる。
5.3 蔵本エントレインメント
entrain TemporalCoreは結合振動子の蔵本モデルを使用する。
$$ \frac{d\theta_i}{dt} = \omega_i + \frac{K}{N} \sum_{j=1}^N \sin(\theta_j - \theta_i) $$
Conchordalでは、「結合」$K$は他のすべてのエージェントに直接ではなく、グローバルなNeuralRhythmsに対するものである(平均場近似)。
- 感度:各エージェントはどのバンド(デルタ、シータなど)を聴くかを決定する感度プロファイルを持つ。
- 位相ロック:エージェントは内部のアーティキュレーション位相をレゾネータの位相に合わせて調整する。
これにより創発的同期が生じる。ランダムな時間にスポーンしたエージェントは徐々にアタックをデルタまたはシータバンドのビートに合わせ、中央シーケンサーなしでコヒーレントなリズムパターンを生み出す。
6. システムアーキテクチャと実装詳細
Conchordalは、リアルタイムオーディオの厳しい要件(レイテンシ < 10ms)と重い数値解析(NSGT/畳み込み)を満たすためにRustで実装されている。アーキテクチャは並行、ロックフリーの設計パターンを使用する。
6.1 スレッディングモデル
アプリケーションは4つの主要なスレッドコンテキストを作成する:
-
オーディオスレッド(リアルタイム優先度):
audio/output.rsでcpalによって管理される。- 制約:決してブロックしてはならない。ミューテックスなし、メモリ割り当てなし。
- 責任:
Populationを反復し、すべてのアクティブエージェントでrender_waveを呼び出し、出力をミキシングし、ハードウェアバッファにプッシュする。ランドスケープの読み取り専用スナップショットから読み取る。
-
和声性ワーカー(バックグラウンド優先度):
core/stream/harmonicity.rsで定義。- 責任:スペクトルデータ(log2振幅スペクトル)を受信し、兄弟投影アルゴリズムを使用して和声性フィールドを計算する。
- 更新サイクル:分析が完了すると、ロックフリーSPSCチャネルを介して更新された和声性データをメインループに送信する。
-
粗さワーカー(バックグラウンド優先度):
core/stream/roughness.rsで定義。- 責任:オーディオチャンクを受信し、ERBドメイン畳み込みを介して粗さフィールドを計算する。
- 更新サイクル:別のSPSCチャネルを介して更新された粗さデータをメインループに送信する。
-
アプリ/GUIスレッド(メイン):
eguiビジュアライザーとRhaiスクリプティングエンジンを実行する。- 責任:ユーザー入力を処理し、ランドスケープを可視化し(
ui/plots.rs)、シナリオスクリプトを実行する。コマンドアクション(例:SpawnAgent、SetGlobalParameter)をPopulationに送信する。 - DorsalStream:リズム分析(
core/stream/dorsal.rs)はメインループ内で同期的に実行され、NeuralRhythms変調バンク用のリズムエネルギーメトリクス(e_low、e_mid、e_high、flux)を抽出するためにオーディオチャンクを処理する。
6.2 データフローとダブルバッファリング
オーディオスレッドをロックせずにデータの一貫性を維持するため、Conchordalはランドスケープにマルチチャネル更新戦略を使用する。
- 和声性ワーカーはバックグラウンドでlog2スペクトルから和声性フィールドを構築する。
- 粗さワーカーはバックグラウンドでオーディオチャンクから粗さフィールドを構築する。
- メインループは別々のSPSCチャネルを介して両方のワーカーから更新を受信し、
LandscapeFrameにマージする。 Populationは「現在の」ランドスケープを保持する。いずれかのワーカーから新しいデータが到着すると、メインループは対応するフィールドを更新し、結合された協和度を再計算する。- DorsalStreamはオーディオを同期的に処理してリズムメトリクスを更新し、
landscape.rhythmに格納する。
この分離アーキテクチャにより、分析ワーカーがリアルタイムよりわずかに遅れていても、オーディオスレッドは常に物理の一貫したスナップショットを見ることが保証される。各ワーカーは他をブロックすることなく独自のペースで動作できる。
6.3 コンダクター:Rhaiによるスクリプティング
Conductorモジュールは人間のアーティストとエコシステム間のインターフェースとして機能する。Rhaiスクリプティング言語を埋め込み、シミュレーション制御用の高レベルAPIを公開する。
ScriptHost構造体は内部Rust関数をRhaiコマンドにマッピングする:
spawn_agents(tag, method, life, count, amp):Action::SpawnAgentsにマッピング。確率的スポーンクラウドの定義を可能にする(例:「和声性密度を使用して200-400Hz範囲に5エージェントをスポーン」)。add_agent(tag, freq, amp, life):Action::AddAgentにマッピング。特定の周波数に単一のエージェントをスポーンする。set_harmonicity(map):Action::SetHarmonicityにマッピング。mirror_weightやlimitなどの物理パラメータのリアルタイム変調を可能にする。set_roughness_tolerance(value):協和度計算における粗さペナルティ重みを調整する。set_rhythm_vitality(value):DorsalStreamリズムセクションの自励振動エネルギーを制御する。wait(seconds):イベントループに制御を戻すノンブロッキング待機。スクリプトがタイムラインを統制できるようにする。scene(name):可視化とデバッグ用に名前付きシーンの開始をマークする。remove(target):ターゲットパターンに一致するエージェントを削除する("kick_*"のようなワイルドカードをサポート)。
シナリオパース:シナリオは.rhaiまたは.json5ファイルからロードされる。この分離により、ユーザーは「マクロ構造」(物語のアーク、変化する物理法則)を作曲でき、「ミクロ構造」(特定のノートとリズム)はエージェントのそれらの変化への適応から創発する。
7. ケーススタディ:創発的挙動の分析
以下の例はsamples/ディレクトリから導出されたもので、特定のパラメータ設定が複雑な音楽的挙動につながる様子を示している。
7.1 ケーススタディ:自己組織化リズム(samples/02_mechanisms/rhythmic_sync.rhai)
このスクリプトは時間の創発的量子化を実演する。
- フェーズ1(種):単一の高エネルギーエージェント「Kick」が60 Hzでスポーンする。その周期的なアーティキュレーションが
NeuralRhythmsのデルタバンドレゾネータを励起する。 - フェーズ2(群れ):ランダムな位相でエージェントのクラウドがスポーンする。
- 創発:エージェントはデルタバンドに結合した
entrainTemporalCoreを使用しているため、Kickによって確立されたリズムを感知する。数秒の間に位相がドリフトしてKickとアラインメントにロックする。結果は群れに明示的にプログラムされていなかった同期パルスである―それは結合振動子の物理から生じた。
7.2 ケーススタディ:鏡像二元性(samples/04_ecosystems/mirror_dualism.rhai)
このスクリプトはmirror_weightパラメータの構造的役割を探求する。
- セットアップ:C4(261.63 Hz)にアンカードローンを確立する。
- 状態A(長調):
set_harmonicity(#{ mirror: 0.0 })。システムは共通基音投影(上音列)を使用する。協和を求めるエージェントはE4とG4周辺にクラスタリングし、C長三和音を形成する。 - 状態B(短調):
set_harmonicity(#{ mirror: 1.0 })。システムは共通上音投影(下音列)に切り替わる。ランドスケープの「重力」が反転する。エージェントはAb3とF3(Cに対する短6度と完全4度の音程)に安定性を見出し、フリギア/短調のテクスチャを生み出す。これはConchordalにおける「調性」が温度や重力のように操作可能な環境変数であることを示している。
7.3 ケーススタディ:ドリフトとフロー(samples/04_ecosystems/drift_flow.rhai)
このスクリプトはホップベースの移動ロジックを検証する。
- アクション:強い不協和エージェント(C#3)が強いアンカー(C2)の隣に配置される。
- 観察:C#3エージェントはピッチで離散的なホップを行う。和声性フィールドに「引っ張られ」、フェードアウトして近くの調和的「井戸」(おそらくE3またはG3)にスナップする。
- ダイナミクス:エージェントごとの飽きが有効になっている場合、エージェントはE3に数秒間落ち着き、その後「飽きる」(知覚適応により局所的協和度が低下)、再び新しい安定した音程を見つけるためにホップする。これは引力と斥力の単純な物理法則によって生成される終わりのない、繰り返さないメロディをもたらす。
8. 結論
Conchordalは生体模倣コンピュテーショナル・オーディオの概念実証を成功裏に確立した。音楽理論の硬直した抽象概念(音符、グリッド、BPM)を連続的な生理学的モデル(Log2Space、ERBバンド、神経振動)に置き換えることで、音楽が構築されるのではなく、育てられるシステムを創造する。
技術アーキテクチャ―Log2Space座標系と「兄弟投影」アルゴリズムによって固定された―は、この新しいパラダイムに堅牢な数学的基盤を提供する。Rustの使用により、これらの複雑な生物学的シミュレーションがリアルタイムで実行でき、人工生命研究とパフォーマティブな楽器の間のギャップを埋める。
Conchordalの将来の開発は、空間化(ランドスケープを3D空間に拡張)と進化遺伝学(成功したエージェントがTimbreGenotypeを継承できるようにする)に焦点を当て、音と生命の類推をさらに深めていく。
付録A:主要システムパラメータ
| Parameter | Module | Unit | Description |
|---|---|---|---|
bins_per_oct | Log2Space | Int | 周波数グリッドの解像度(典型値:48-96)。 |
sigma_cents | Harmonicity | Cents | 倍音ピークの幅。低いほど厳密なイントネーション。 |
mirror_weight | Harmonicity | 0.0-1.0 | 上音列(長調)と下音列(短調)重力のバランス。 |
roughness_k | Landscape | Float | 適応度関数における不協和ペナルティの重み。 |
vitality | DorsalStream | 0.0-1.0 | リズムセクションの自励振動エネルギー。 |
persistence | ModulationCore | 0.0-1.0 | エージェントの移動/変化への抵抗。 |
付録B:数学的要約
協和度適応度関数: $$ C(f,t) = \underbrace{H(f,t)}_{\text{Harmonicity}} - k \cdot \underbrace{R(f,t)}_{\text{Roughness}} $$
和声性投影(兄弟アルゴリズム): $$ H[i] = (1-\alpha)\sum_m \left( \sum_k A[i+\log_2(k)] \right)[i-\log_2(m)] + \alpha \sum_m \left( \sum_k A[i-\log_2(k)] \right)[i+\log_2(m)] $$
粗さ畳み込み: $$ R(z) = \int A(\tau) \cdot K_{plomp}(|z-\tau|_{ERB}) d\tau $$