Skip to content

第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

今回実装する範囲

区分内容
新しく実装する処理SoundManager、BGM切り替え、射撃・命中・被弾・結果のSE
既存の仕組みを反復する処理ID、対応表、RAII、読み込み失敗、コピー禁止
次の回で追加する処理エフェクトと背景スクロール

今回の完成例

まず自分のゲームで音の成立条件を確認してから、第10回の配布プロジェクトを完成例として比較します。

確認するファイル確認する内容
SoundManager.h音声ID、ハンドル所有、再生・停止・解放の宣言
SoundManager.cpp対応表、読み込み失敗、音量設定、BGMとSEの再生
Game.cpp状態遷移と成立した出来事から音声を依頼する流れ