---
generated_at: 2026-02-21 12:00:00
metrics:
  claims_total: 61
  claims_with_evidence: 59
  claims_without_evidence: 2
confidence_derived: 0.97
---

# 根拠レポート：audio モジュール単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：59 / 61、根拠なし：2
- 優先レビュー（高）
  1. **C-16（空文字列キーサウンド名のgetpath挙動）**：HSPのgetpath関数の空文字列に対する挙動がソースコードから直接確認不可
  2. **C-61（未初期化配列でのforeach挙動）**：HSPのforeach文が未初期化配列に対してどう動作するかソースコードから直接確認不可

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `src/audio/fxdef.hsp` - エフェクト定義ファイル（定数定義、データテーブル初期化）
- E-02: `src/audio/key_sound.as` - キーサウンドモジュール（key_soundモジュール定義）
- E-03: `src/audio/laser_slam_sound.as` - レーザースラムサウンドモジュール（laser_slam_soundモジュール定義）
- E-04: `docs/code-to-docs/単体テストケース一覧/plan.md` - プロジェクト構成情報

## 3) Claims と根拠の対応（レビューの主戦場）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | fx_div配列が各FX_*定数に対応する分割数で初期化される | E-01 (L50-62) | ○ |
| C-02 | 各エフェクトタイプのパラメータ数がRETR=5, GATE=3等で定義される | E-01 (L76,88,100,112,124,136,148,160,172,184,196) | ○ |
| C-03 | 各エフェクトタイプ名がRetrigger, Gate等で定義される | E-01 (L77,89,101,113,125,137,149,161,173,185,197) | ○ |
| C-04 | 各エフェクトタイプのDLL名が正しく定義される | E-01 (L84,96,108,120,132,144,156,168,180,192,204) | ○ |
| C-05 | 各エフェクトタイプの優先度が定義される | E-01 (L85,97,109,121,133,145,157,169,181,193,205) | ○ |
| C-06 | デフォルト値と有効時の値が正しく設定される | E-01 (L79-80,91-92,103-104等) | ○ |
| C-07 | パラメータ番号が-1または有効な値で対応付けされる | E-01 (L81,93,105,117,129,141,153,165,177,189,201) | ○ |
| C-08 | パラメータ最大値が型に応じた値で設定される | E-01 (L83,95,107,119,131,143,155,167,179,191,203) | ○ |
| C-09 | リンクパラメータが正しく定義される | E-01 (L86,98,110,122,134,146,158,170,182,194,206) | ○ |
| C-10 | FXDEF_FXTYPEMAX=10がFXDEF_FXTYPE_AUDIと一致する | E-01 (L46,48) | ○ |
| C-11 | FX_RE8=1からFX_SICH=19まで一意に定義される | E-01 (L4-22) | ○ |
| C-12 | initKeySoundModuleでs_dirDefaultが設定されライブラリが初期化される | E-02 (L13-20) | ○ |
| C-13 | 空文字列パスでの初期化時にs_dirDefaultが空文字列で設定される | E-02 (L14) | ○ |
| C-14 | 拡張子なし名称でs_dirDefault+"\\se\\note\\"+名前+".wav"が返る | E-02 (L29-34) getpath関数で拡張子判定 | ○ |
| C-15 | 拡張子あり名称でp2+p1が返る | E-02 (L33) | ○ |
| C-16 | 空文字列のキーサウンド名が渡された場合のgetpath挙動 | E-02 (L30) | △ |
| C-17 | p2が空文字列の場合に空文字列+ファイル名が返る | E-02 (L33) | ○ |
| C-18 | バージョン171以上で同時発音数1が返る | E-02 (L41-46) | ○ |
| C-19 | バージョン170以下で同時発音数10が返る | E-02 (L41-46) | ○ |
| C-20 | バージョン171で1が返る（境界値） | E-02 (L42) >= 171条件 | ○ |
| C-21 | バージョン170で10が返る（境界値直下） | E-02 (L42) >= 171条件の否定 | ○ |
| C-22 | バージョン0で10が返る | E-02 (L42-46) 0 < 171なのでelse分岐 | ○ |
| C-23 | バージョン9999で1が返る | E-02 (L42) 9999 >= 171 | ○ |
| C-24 | 未ロードキーサウンドがライブラリに追加される | E-02 (L56-75) HashCheckKey, CreateKeySound, ハッシュ格納 | ○ |
| C-25 | 既ロード済みキーサウンドの再ロードがスキップされる | E-02 (L58) HashCheckKeyの戻り値チェック | ○ |
| C-26 | 存在しないファイル指定時にエラーダイアログが表示される | E-02 (L61-64) exist + strsize判定 | ○ |
| C-27 | CreateKeySound失敗時にエラーダイアログ表示とポインタ0格納 | E-02 (L68-73) if-else分岐 | ○ |
| C-28 | バージョン170でmaxPolyphony=10が渡される | E-02 (L68) getMaxPolyphonyForVersion(p3)呼び出し | ○ |
| C-29 | 存在するキーサウンド名で真が返る | E-02 (L82-83) HashCheckKey | ○ |
| C-30 | 存在しないキーサウンド名で偽が返る | E-02 (L82-83) HashCheckKey | ○ |
| C-31 | 空文字列で偽が返る | E-02 (L82-83) HashCheckKey | ○ |
| C-32 | 存在するキーサウンドのポインタが返却される | E-02 (L90-96) HashCheckKey + ハッシュアクセス | ○ |
| C-33 | 存在しないキーサウンドでエラーダイアログと0が返る | E-02 (L91-95) HashCheckKey=0の分岐 | ○ |
| C-34 | 空文字列でエラーダイアログと0が返る | E-02 (L91-95) | ○ |
| C-35 | clearKeySoundLibraryで全KeySoundが破棄される | E-02 (L101-108) foreach + DestroyKeySound + HashClear | ○ |
| C-36 | 空ライブラリでクリアしてもエラーが発生しない | E-02 (L101-108) foreachは空でもループしない想定 | ○ |
| C-37 | ポインタ0のエントリがスキップされる | E-02 (L104) if条件でcontinue | ○ |
| C-38 | 空キー名エントリがスキップされる | E-02 (L103) if条件でcontinue | ○ |
| C-39 | initLaserSlamSoundModuleでs_dirDefaultとs_maxPolyphony=-1が設定される | E-03 (L10-13) | ○ |
| C-40 | 空文字列パスでの初期化 | E-03 (L11) | ○ |
| C-41 | バージョン171以上で同時発音数1が返る（laser_slam_sound版） | E-03 (L20-25) | ○ |
| C-42 | バージョン170以下で同時発音数10が返る（laser_slam_sound版） | E-03 (L20-25) | ○ |
| C-43 | バージョン171境界値（laser_slam_sound版） | E-03 (L21) >= 171条件 | ○ |
| C-44 | バージョン170境界値直下（laser_slam_sound版） | E-03 (L21) >= 171条件の否定 | ○ |
| C-45 | 初回ロード時に5つの音声ファイルがロードされる | E-03 (L32-59) filenamesStrに5ファイル定義, notemax分ループ | ○ |
| C-46 | 同じバージョンでの再ロードがスキップされる | E-03 (L34) s_maxPolyphony比較で不一致時のみ実行 | ○ |
| C-47 | 異なるバージョンでリロードされる | E-03 (L34) s_maxPolyphony != getMaxPolyphonyForVersion(p1)条件 | ○ |
| C-48 | CreateKeySound失敗時にエラーダイアログが表示される | E-03 (L53-57) if-else分岐 | ○ |
| C-49 | ロード対象の5つのファイル名が正しい | E-03 (L38-42) filenamesStr定義 | ○ |
| C-50 | 有効IDと音量でPlayKeySoundが呼ばれる | E-03 (L68-78) 範囲チェック後にPlayKeySound呼び出し | ○ |
| C-51 | 各IDで対応するKeySoundが再生される | E-03 (L75-76) s_laserSlamKeySounds.p1でアクセス | ○ |
| C-52 | 負IDで何もせず戻る | E-03 (L70) p1 < 0条件 | ○ |
| C-53 | 範囲外IDで何もせず戻る | E-03 (L70) p1 >= length(s_laserSlamKeySounds)条件 | ○ |
| C-54 | ID=0での再生（境界値） | E-03 (L70) 0は有効範囲内 | ○ |
| C-55 | ID=4での再生（境界値） | E-03 (L38-42, L70) 5ファイル定義で最大index=4 | ○ |
| C-56 | 音量0.0での再生 | E-03 (L76) PlayKeySoundにp2を渡す | ○ |
| C-57 | 音量1.0での再生 | E-03 (L76) PlayKeySoundにp2を渡す | ○ |
| C-58 | ポインタ0の場合PlayKeySoundが呼ばれない | E-03 (L75) s_laserSlamKeySounds.p1 != 0条件 | ○ |
| C-59 | destroyLaserSlamSoundsで全KeySoundが破棄される | E-03 (L80-85) foreach + DestroyKeySound | ○ |
| C-60 | ポインタ0のエントリがスキップされる | E-03 (L82) if条件でcontinue | ○ |
| C-61 | 未初期化配列でforeachがエラーなく動作する | E-03 (L81) | △ |

## 4) 不足情報（Unknown / Missing）
- **C-16**: HSP言語のgetpath関数が空文字列を引数として受け取った際の正確な挙動がソースコードからは直接確認できない。HSP言語仕様書またはランタイムでの確認が必要。
  - 候補：HSP公式リファレンス / HSP掲示板 / 実機テスト
- **C-61**: HSPのforeach文が未初期化（dim未実行）の配列変数に対してどのように動作するかがソースコードから確認不可。空ループになるか、エラーになるかはHSPランタイムの仕様による。
  - 候補：HSP公式リファレンス / 実機テスト

## 5) リスクフラグ（レビュー観点）
- **リスク1（中）**: fxdef.hspはデータ定義のみであり、単体テストとしてはデータ整合性の検証が主となる。実際のエフェクト動作はVSTプラグイン（DLL）との連携が必要なため、結合テストで補完が必要。
- **リスク0（低）**: key_soundモジュールとlaser_slam_soundモジュールのgetMaxPolyphonyForVersionは同一ロジックだが、別モジュールでlocal関数として定義されている。変更時の同期漏れリスクがある。
- **リスク1（中）**: CreateKeySound/DestroyKeySound/PlayKeySoundはksmcore.as経由の外部関数（DLL呼び出し）であり、モック/スタブが必要。HSP言語でのモック手法が限定的なため、テスト実行方法の検討が必要。
- **リスク0（低）**: key_sound.asのclearKeySoundLibraryはonexit修飾子付きであり、プログラム終了時に自動呼出しされる。テスト時の呼び出しタイミングに注意が必要。

## 6) レビュアーチェックリスト（最小）
- [ ] fxdef.hspの定数定義値（FX_RE8=1〜FX_SICH=19）が他モジュール（play_audio_effects.hsp等）での参照と整合しているか確認
- [ ] getMaxPolyphonyForVersionのバージョン閾値171が仕様書（KSH format version）と一致しているか確認
- [ ] loadKeySoundToLibrary/loadLaserSlamSoundsのエラーハンドリングが実際のゲーム動作で適切か確認（dialog表示の是非）
- [ ] CreateKeySound/DestroyKeySound/PlayKeySoundの外部DLL関数のモック方法を検討し、テスト実行可能性を確認
- [ ] laser_slam_soundの音声ファイルリスト（chokkaku*.wav 5種）が実際のアセットと一致しているか確認
- [ ] HSPのgetpath関数の空文字列入力時の挙動を実機で確認（C-16）
- [ ] HSPのforeachが未初期化配列に対して安全に動作するか実機で確認（C-61）
