066 雨粒ドラム
次の雨粒は屋根が返す。自分で叩かない一拍も、演奏になる。

基本の遊び方
四角の主拍を75%以上取れば基本完成。どの屋根でも主拍の価値は同じです。小丸の装飾は任意。叩かなくても減点はありません。
A=木: 返事なし。S=瓦: 譜面の拍から15刻後に丸い返事。D=トタン: 譜面の拍から45刻後に三角の返事。
主拍の間に「屋根へ任せる余白」を残すか、自分の一打を重ねるか選びます。音数を足した総合点は作りません。

起動
Python 3.10以降。実行時はPyxel＋標準ライブラリのみ。初回の依存導入はネット接続が必要。
Windows: setup.bat → play.bat。引用済みASCII BAT。Windows実機未検証。
Linux/macOS: bash setup.sh → bash play.sh。macOS未検証。今回の実操作はクラウドLinux。
launch.shは開発用の絶対パスです。配布起動はplay.shを使います。

表紙の設定
1/2/3: 曲A/B/C。T: A/S/D方式と左右+Z方式を切替。V: 練習速度75/100%。
左右: 入力時刻の手動補正−6～+6刻。判定時刻=入力の論理tick+補正。機器遅延を自動測定する機能ではありません。
K: 採点のない試し打ち。A/S/Dで音と輪郭を確かめ、Kで戻ります。補正は演奏開始後には変えられません。
B: トタンの返事だけ45→15刻へ切替える管理比較。SPACE/Z: 一小節のカウントで開始。

演奏中
A/S/D、または左右で屋根・Zで一打（方式は表紙で固定）。長押しは連打しません。同時キーはA→S→Dで一打だけ。
P: 時計と音を停止、説明を読む。もう一度Pで現在小節を戻して一小節カウント後に再開。
X: 前小節へ戻って練習。R: 同じ曲を最初から。M: 表紙。F6: 入力・小節再開・結果をrecordsへ保存。Esc: 終了。
開始/再開後はキーを全て離してから新しい打鍵をします。停止中にキーを離したことも記憶します。

時計と判定
1刻=1/60秒（100%時）。四分音符30刻=120BPM。表示と入力読取は30fps、100%時に一描画につき2論理tick進めます。
75%は1/2tick交互。補正の最小単位は1tickですが、実入力は描画フレームで読み、100%時は2tick刻みの入力時刻です。
主拍は目標±4tick、装飾は±3tick。中心へ近付く追加得点はありません。一つの主拍/装飾は一回だけ。
補正は採点枠への割当のみ。受理した手動音は入力フレームに発行。返事は一致した譜面の基準時刻+15/45tickです。過去への発音移動はしません。
受付外は弱い字幕で示し、点や予約を増やしません。最後の受付を過ぎると入力を閉じ、予約の余韻を鳴らして終わります。

返事の約束
返事は自分自身から次の返事を作りません。同じ時刻に自動返事が重なれば先の予約だけ。同時予約なら瓦→トタン→ID順。
薄い形と斜線は重複予約。手動の装飾は別チャンネルで重なり、自動返事を消しません。遅く叩いて既に鳴った音を取り消すこともありません。
上の二小節の地図が主拍、装飾、休符と予約を表示。末尾は余韻欄。形と字幕だけでも必要な情報が読めます。
主拍率、装飾、返事、重ねた枠、空白、重複を別々に記録。木だけで全主拍を取る演奏も正式な完成です。

小節のやり直し
現在/前小節の開始状態を復元し、その小節の早めに受理した打鍵も取り消します。前小節由来の未来の返事は残します。
正の補正でも最初の主拍へ間に合うよう、小節頭−max(補正,0)tickから再開。カウント中は譜面時計を進めません。
再開回数を記録し、一度も止めなかった演奏と混ぜません。聴き直しは自由。未達でも最後まで演奏できます。

三つの曲
A まっすぐの雨: 16主拍。0のトタンと30の瓦は45で重なる。先の予約を見て木を選ぶ余地があります。
B 空いた三拍目: 12主拍。60は休符。75の装飾を自分で打つか、30のトタンに任せるか選べます。
C 返事を待つ軒: 12主拍。90のトタンは次小節15へ返事。次小節頭に瓦を重ねるか、木にするか選べます。
曲はオリジナルの有限譜面。既存曲を借りていません。任意seedで新曲が生成されるものではありません。

検査と素材
model.pyが純粋なState/Session/step。app.pyが入出力。全設定、意味入力、論理tick、発音イベント、SHA-256、最終状態を保存。
python -m unittest -v / python experiments.py。tools/replay_record.pyで記録照合。
図形と音の構成はオリジナル。音はPyxel内蔵波形/ノイズだけ。日本語ビットマップはNoto由来。assets内の全文ライセンス参照。

映像と音声について
media/rain_roofs_automatic_silent.mp4は実Pyxelの自動入力・実描画。全GIFフレームを一度ずつ30fpsへ変換。
rain_roofs_automatic_synthesized_audio.mp4は同じ映像へ、実行中のplay呼出しフレームに合わせたオフラインPyxel合成音を付けたものです。
クラウド実音声デバイスは初期化できず、ループバック/マイク収録ではありません。実音出力、機器の遅延、人の聴感や心地よさは未確認。
生成WAV、元の無音動画、音声呼出しログ、サンプル位置の検査を保存。デジタル配置の一致だけを確認しています。
人による試遊・面白さの確認は未実施。QA.txtに検査範囲、NOTE.txtに変更理由、X_POSTS.txtに投稿原稿3本。公開はしていません。
各屋根の下には「次の受付」に対応する返事の予定刻を表示。「先約あり」は今選ぶと自動返事が重なる予告です。手動の一打は受理されます。
