Appearance
第09回 音声の管理と再生
前回は、画像のハンドルをImageManagerが所有し、対応表を使って管理する仕組みを確認しました。 今回は、その考え方をBGMと効果音へ広げます。
音声の読み込みとハンドルの所有はSoundManagerに集め、ゲーム中の出来事が成立した場所から再生を依頼します。
配布プロジェクト
前回の作業が完了した状態と同等のプロジェクトを配布します。 第09回のプロジェクトを展開し、ShootingGame2D.slnをVisual Studio 2026で開いてください。
この回のゴール
授業終了時には、画面の状態に合わせてBGMを切り替え、射撃や命中などの出来事で効果音を鳴らせるようにします。
- 音声IDとパスの対応表を読む
- BGMとSEの読み込み、再生、停止、解放を
SoundManagerへ集約する - 状態遷移とゲーム上の出来事へ音声を接続する
- 同じBGMを重ねず、SEを成立したときだけ再生する
今回のポイント
画像と音声は扱うデータが異なりますが、ハンドルを読み込み、所有し、最後に解放する流れは同じです。 ImageManagerをコピーして作り直すのではなく、所有、対応表、RAIIという考え方をSoundManagerへ反復します。
音を鳴らす場所は、入力を受けた場所ではありません。 射撃や命中などのゲーム上の出来事が成立した場所から、SoundManagerへ再生を依頼します。
Game
音声ハンドルを利用
SoundManager
Game
BGMの切り替えを依頼
SoundManager
Game
成立した出来事のSEを依頼
SoundManager
1 / 4SoundManagerで音声を所有する音声ハンドルを画像と同じようにManagerへ集約し、ゲーム中のクラスから直接扱わない2 / 4状態遷移へBGMを接続するタイトル、プレイ、結果の状態へBGMの開始と停止を接続する3 / 4成立した出来事へSEを接続する射撃、命中、被弾、結果の出来事が成立した場所から効果音を1回再生する4 / 4音声を動作確認するBGMとSEの寿命、切り替え、再生条件を確認し、視覚演出へつなげる
今回実装する範囲
| 区分 | 内容 |
|---|---|
| 新しく実装する処理 | SoundManager、BGM切り替え、射撃・命中・被弾・結果のSE |
| 既存の仕組みを反復する処理 | ID、対応表、RAII、読み込み失敗、コピー禁止 |
| 次の回で追加する処理 | エフェクトと背景スクロール |
今回の完成例
まず自分のゲームで音の成立条件を確認してから、第10回の配布プロジェクトを完成例として比較します。
| 確認するファイル | 確認する内容 |
|---|---|
SoundManager.h | 音声ID、ハンドル所有、再生・停止・解放の宣言 |
SoundManager.cpp | 対応表、読み込み失敗、音量設定、BGMとSEの再生 |
Game.cpp | 状態遷移と成立した出来事から音声を依頼する流れ |