062 足音の探偵
実装・機能検証済み候補／初見理解・音の聞き分け・面白さは人の確認待ち。

同じ三つの足音でも、壁のこちら側では別の証拠になる。
録音された固定の三歩を、別の部屋から聞き直して四つの経路を比べます。
全室で丁寧に聞く方法も正しい達成法。少ない観測での特定は追加記録です。

起動
Windows: Python 3.10以降を用意し setup.bat、次に play.bat。
macOS/Linux: bash setup.sh、bash play.sh。
クラウド開発用: bash launch.sh（開発用の絶対パス）。
実行依存はPyxel 2.9.9＋Python標準ライブラリ。日本語グリフ同梱、外部フォント不要。
Windows/macOS実機は未検証。Linuxクラウドの実描画/ネイティブ入力はQA.txt参照。

操作
上下: 地図→字幕→候補の欄を切替。左右: その欄で室/歩/経路を選択。
地図のZ: 選択室で聞く。再生中のZ: 即停止して字幕を残す。
字幕のZ: 同じ観測を再生。新しい観測は追加せず、何度でも聞き直せます。
候補のZ: 選んだ仮説を提出。早期提出可。根拠不足や誤答でも再調査できます。
X: 直前の観測/提出undo。成功後も可。R: 同じ事件を再開。P: 説明/停止。
1/2/3: A/B/C。M: 音あり/なし。B: 壁コスト3/1の管理変種へ切替して再開。
G: 現在候補の署名が何通りに分かれるかの任意予測補助。
S: records/へ公開ID、ルール、意味入力、論理tick、全stateとSHA-256を保存。
F12: media/へ画像とその時点までのネイティブ操作記録。ESC: 終了。
記録は真相を含むため初見では開かないでください。
決定のあとは全キーを離してから次を押します。同時Z+Xは実行しません。

同じ三歩から分かること
部屋はA-B-C / D-E-F。白線の扉は音距離1、橙の壁は3。図の長さは距離ではありません。
音は縦横隣接を通り、コスト和の最短経路で届きます。壁を迂回して届く場合もあります。
距離0/1は強(#)、2/3は弱(+)、4以上は聞こえない(-)。無音では材質も表示しません。
木=低い短音、石=乾いたノイズ、タイル=高い短音。音はPyxel内蔵波形/ノイズだけ。
字幕は「木・強」など、音と同じ意味情報。音を切っても推理に不利な追加制限なし。
人物を画面に出しません。候補の残り方と反証は、観測した署名だけから算出します。
左右で歩を選ぶには字幕欄を選びます。三歩の静止字幕は常時まとめて確認できます。
再生は18フレーム(0.6秒)間隔の三拍。再生フレームや音量で証拠は変わりません。
Pで証拠も再生時計も停止、音は即停止。再開時は次の未再生拍から進みます。

有限bank
062-A-g1「隣の木床」: 初心者向け。一回の観測でも全候補を区別可能。
062-B-g1「材質だけでは同じ」: A/C/D/FからはR/Sが残り、B/Eからは区別可能。
062-C-g1「聞こえなかった一歩」: 初期選択D。届かなかった石の一歩も証拠です。
隠れた経路は事件ごとに固定。再開しても変わりません。任意乱数seedの生成保証なし。
設計案Bの真相Pはどの室でも一回で一意だったため、既存候補Rへ変更しました。
道・壁・床・候補経路は全て設計案どおり。詳しい差と負の結果はEXPERIMENT.txt。

学習箇所
model.py: 重み付き最短路、署名、候補消去、反証、純粋step/undo/forecast、正確record。
audio_defs.py: オリジナル音の定義。app.py: 発音/描画と証拠状態の分離、解除待ち入力。
solver.py: 観測集合、観測順序、全候補真相、両壁コスト、方策と共通達成目標。
python -m unittest -v で検査。toolsは開発専用でPillow/FFmpegを追加使用します。

映像と音の証拠
media/footsteps_automatic_synthesized_audio.mp4: 実Pyxelの749原描画フレームを30fps、24.966667秒。
音声はPyxelエンジン自身が別途生成したWAVを、実行ログの拍フレームへデジタル合成しました。
スピーカー出力の録音ではありません。音の良さ・聞き分け・実聴は未確認です。
media/footsteps_automatic_silent.mp4: 同じフレームの明示的な無音版。
media/footsteps_synthesized.wav / audio_cues/: 合成音と6種の素材。外部録音は不使用。
30fps原フレームを一度ずつ保存し、音の開始sampleは(frame-1)*735 (22050Hz)。
media/audio_timing_validation.json に無音区間、波形、RMS、総サンプル、ffprobeを保存。
人のプレイ映像ではなく自動操作の実装証拠。面白さを証明するものではありません。

権利
コード/オリジナル音: MIT (LICENSE.txt)。グリフ: Noto Sans CJK由来、SIL OFL 1.1。
assets/NOTO-LICENSE.txt / PYXEL-LICENSE.txt に全文。
