# Fly Music Lab の実習ガイド

## 最初の5分

メロディー実験は [別のガイド](echo-guide.md) を参照してください。このページは自由演奏の説明です。

1. Chromeで [公開版の自由演奏](https://hirokimorimoto0713.github.io/fly-music-lab/free.html) を開きます。手元で起動する場合は `npm start` を実行し、`http://127.0.0.1:4389/free.html` を開きます。
2. 「実験をはじめる」を押します。データの検証後、両側のLC9へ神経時間200 msの刺激を入れます。音が鳴り、同じ計算の出力でハエが動きます。
3. 「左の回路」「右の回路」「LC4の回路」を押します。次の20 ms計算から刺激が加わります。1〜4キーでも操作できます。
4. 「停止」を押します。WAVで演奏を聴き返し、MIDIをREAPERなどへ読み込んで音色を変えられます。
5. 「この実験を残す」でブラウザに条件を保存。「実験JSONを保存」なら別のブラウザでも復元できます。

1回の実験は最大128ステップ。1ステップで20 msの神経時間を計算し、それを八分音符として鳴らします。96 BPMなら1ステップは音楽時間312.5 msです。端末の計算が遅いとライブ演奏が間延びしますが、MIDIとWAVは指定テンポで生成します。これはマイク録音ではなく、生成した音符からの音声合成です。

## 実習1 — 同じ入力なら同じ出力になる？

シード1、刺激160 Hzのまま開始し、途中で左の回路を1回押して停止します。実験JSONを保存し、「同じ条件で再実行」を押してください。

見るもの: 神経時間、累計発火数、音符数、神経地図。シード、刺激を入れたステップ、配線、計算ルールが同じなら、計算した発火と音符は同じになります。画面の描画タイミングやアニメーションの滑らかさは端末で変わります。

学べること: 再現にはランダム性も含めた条件の保存が必要です。「刺激160 Hz」は毎秒必ず160発という意味ではなく、その頻度を期待値にした確率的入力です。

## 実習2 — 配線を使っていることを確かめる

実験を停止して「伝播あり・なしを比較」を押します。同じ実験の冒頭最大16ステップについて、接続を伝える通常条件と、接続の信号を遮断した条件を初期状態から計算します。

見るもの: 合計発火数の差。伝播なしでも、外部から刺激されたニューロンは発火します。差がない場合も結果であり、都合のよい値に置き換えません。

より詳しく: 設定の「接続を伝わる信号を有効にする」を外して新しい実験を始めると、伝播を止めた音楽と動きを直接観察できます。左・右の刺激はDNa02にも直接入力するため、伝播なしでも旋回することがあります。

学べること: 動いた、鳴ったというだけでは配線の寄与はわかりません。同じ入力で仕組みをひとつだけ変える対照が必要です。

## 実習3 — 神経を変えずに音楽を変える

刺激やシードをそのままに、音階だけを変更して新しい実験を開始します。追加の刺激を入れない条件なら、発火は同じでも音程が変わります。

保存済みの複雑な刺激列を使う場合は、保存した実験JSONの `config.scale` を `pentatonic` から `minor` に変更し、読み込んで再実行します。`stimuli`、`seed`、`propagation`、`strength`、`frames` は変えません。

学べること: 「神経モデル」と「音楽への変換」は独立しています。生成音楽の聞こえ方には、人が選んだ音階、音色、テンポ、変換式が大きく影響します。

## ソースを読む順番

1. `src/mapping.js`: 神経集団の分類、刺激対象、音と動きへの変換。最初に改造するならここです。
2. `src/worker.js`: 刺激を設定して200ステップ計算し、発火数を集計する部分。
3. `vendor/brain.js`: 上流由来のLIF計算。電位、入力電流、遅延キュー、発火判定、不応期。
4. `src/audio.js`: 同じ音符をライブ音・WAV・MIDIへ出力する部分。
5. `src/visuals.js`: 発火率を使ってイラストを動かす部分。身体の物理シミュレーションではありません。

変更後は `npm test`。配線データが準備されていれば、実際の全配線を使う再現性と伝播対照の検証も実行します。

## 次に試せる研究テーマ

「好き」ボタンは現状、実験を保存するだけです。学習を追加するなら、どの神経接続をどのルールで変えるかを決め、報酬あり・報酬をシャッフル・重み固定の条件を比較します。好みの音が増えたように聞こえても、別のシードや未使用の刺激で確認するまでは学習の成功とは扱いません。

## 操作上の注意

- 設定は次の演奏に適用。再実行は保存された元の設定を使います。
- 保存はこのブラウザの最新5件。ブラウザのデータ消去で失われるので、大切な実験はJSONも保存してください。
- 停止や別タブへの移動で音と身体を止めます。途中停止した長さまでを再実行できます。
- 音がない場合は音量、ブラウザやOSのミュートを確認してください。刺激0 Hzなら発火も音もないのが正常です。
- 小さい画面でも操作できますが、全配線の計算にはメモリとCPUを使います。まずPCのChromeで試してください。
