ゲームにはサウンドは欠かせません。いいゲームは音楽やSEもよかったりします。
ここではサウンドを鳴らすやり方の基本を紹介します。
音を鳴らす
サウンドを鳴らす
wavを鳴らすだけであれば、追加コンポーネントは特に不要です。
まず「using System.Media;」を宣言しておきます。
あとは「SoundPlayer」をファイル名を指定して作成し、プレイを実行すればOKです。
private void button1_Click(object sender, EventArgs e)
{
SoundPlayer player = new SoundPlayer(@"C:/_work/test.wav");
player.Play();
}
サウンドをループ再生する
ゲームのBGMではサウンドをループして鳴らしておきたいものです。
簡単にループ再生を実装するには、メディアプレイヤーを埋め込んでそちらでループ再生をさせるという方法です。
まず「ツールボックス」で「アイテムの選択」を実施。
「COM」で「Windows Media Player」を選んで追加します。
すると、ツールボックスには「media player」が表示されるようになります。
プログラムでは「using WMPLib;」を先に宣言。
後は、以下のようにループ属性をオンにして、ファイル名を指定してプレイするとループ再生が行われます。
private void button1_Click(object sender, EventArgs e)
{
WindowsMediaPlayer player = new WindowsMediaPlayer();
player.settings.setMode("loop", true);
player.URL = @"C:/_work/test.wav";
player.controls.play(); // 再生
}
サウンドの不具合
サウンドが鳴らない?
当たり前ですが、パソコン自体からサウンドが鳴ることをユーチューブ動画を再生するなどして確認ください。
音量が0になっている、サウンドの出力先が現在使うスピーカーになっていない、スピーカーの電源がオフ、ヘッドフォンのスイッチがオフ、などの原因が考えられます。
次にサウンドファイルを確認しましょう。
SoundPlayerを使う場合、MP3のサウンドファイルはならないようです。WAV形式のファイルを使ったほうが確実と思います。
WindowsMediaPlayerがloaderExceptionエラー
WindowsMediaPlayerをツールボックスで選び、フォームに貼り付けようとすると以下のように「AxHostが作成できません。System.Reflection.ReflectionTypeLoadException」というエラーになりました。
ぐぐってみると参照から「AxWMPLib」「WMPLib」を削除してからやると大丈夫だったという人がいます。
うちで試したところ、削除後も同じエラーでした。
しかしVisualStudioを閉じて、次回このプロジェクトを開き試したところロードできました。
ひょっとすると参照の削除だけではキャッシュにファイルは残っていてそれがエラーになっていた可能性はあるかもしれません。
コンポーネントが読み込めない?
エラーがでる場合、コンポーネントが32ビット対応で64ビット対応していない可能性があります。
プロジェクトのプロパティで「ビルド」のところの「対象プラットフォーム」を「AnyCPU」もしくは「32ビット」に変えて試してみるのも1案だと思います。