Categories: Cシャープ

C#で音を鳴らす方法まとめ|System.Media・WAV・MP3対応まで徹底解説

C#では、簡単な効果音から音楽再生まで、さまざまな方法で音を鳴らすことができます。Windowsアプリケーションの開発中に「クリック音を鳴らしたい」「通知音を追加したい」「BGMを再生したい」と思った経験はないでしょうか?
この記事では、System.Media.SoundPlayerを使ったWAVファイルの再生から、外部ライブラリ(NAudio)を用いたMP3再生方法まで、C#で音を鳴らす基本と応用テクニックを初心者向けに解説します。コード例も豊富に紹介しているので、ぜひ実践してみてください。


C#で音を鳴らす基本:System.Media.SoundPlayerの使い方

C#で最もシンプルに音を鳴らす方法は、System.Media.SoundPlayerクラスを使う方法です。このクラスは、WAV形式のファイルを再生できます。

使用例

using System.Media;

SoundPlayer player = new SoundPlayer("sample.wav");
player.Play(); // 非同期で再生

ポイント

  • WAVファイルのみ対応(MP3やAACには非対応)
  • Play()は非同期再生、PlaySync()は同期再生
  • .NET Framework.NET Coreの両方で使えます

注意点

ファイルパスが間違っていたり、WAVファイルが壊れていたりすると例外が発生します。以下のようにtry-catchでエラー処理を入れると安全です。

try
{
SoundPlayer player = new SoundPlayer("sample.wav");
player.Load();
player.Play();
}
catch (Exception ex)
{
Console.WriteLine("再生エラー: " + ex.Message);
}

リソースに埋め込んだWAVファイルを再生する方法

アプリと一緒に配布する場合、音声ファイルをリソースに埋め込んでおくと便利です。

ステップ

  1. sample.wav をプロジェクトに追加
  2. プロパティで「埋め込みリソース」に設定
  3. 下記のコードを使用
using System.Reflection;

Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream("Namespace.sample.wav");

SoundPlayer player = new SoundPlayer(stream);
player.Play();

"Namespace.sample.wav" の部分は正しい名前空間とファイル名に置き換えてください。


MP3を再生したい場合は?:NAudioライブラリの利用

C#の標準ライブラリではMP3の再生はサポートされていません。そこで便利なのが、オープンソースの音声処理ライブラリ「NAudio」です。

インストール

NuGetでインストール:

Install-Package NAudio

使用例:MP3を再生する

using NAudio.Wave;

AudioFileReader reader = new AudioFileReader("sample.mp3");
WaveOutEvent outputDevice = new WaveOutEvent();

outputDevice.Init(reader);
outputDevice.Play();

注意点

  • WaveOutEvent.Dispose() を使ってリソースを解放しましょう
  • 再生終了後の処理をイベントで制御することも可能です

ボタン操作などに連動して音を鳴らす

Windows FormsやWPFでのGUIアプリ開発でも、ボタンを押した時に効果音を鳴らすのはよくある要望です。

Windows Formsの例

private void button1_Click(object sender, EventArgs e)
{
SoundPlayer player = new SoundPlayer("click.wav");
player.Play();
}

WPFの例

XAMLでボタンを定義し、イベントに音再生を組み込みます。

<Button Content="再生" Click="Button_Click"/>
private void Button_Click(object sender, RoutedEventArgs e)
{
SoundPlayer player = new SoundPlayer("click.wav");
player.Play();
}

GUIアプリケーションで音をつけることで、ユーザー体験が格段に向上します。


より高度な機能:ループ再生・停止機能の追加

たとえばBGMのようにループ再生したい場合、SoundPlayerではなくNAudioのほうが適しています。

// 繰り返し再生(Loop)する方法
var reader = new AudioFileReader("bgm.mp3");
var loop = new LoopStream(reader); // LoopStream は自作クラス

var outputDevice = new WaveOutEvent();
outputDevice.Init(loop);
outputDevice.Play();

LoopStreamクラスを自作して、Read()を制御することでループが可能です。


音声の同時再生とスレッド管理

複数の音声を同時に再生したい場合は、個別にSoundPlayerWaveOutEventをインスタンス化すれば対応可能です。ただし、スレッド競合やリソースの管理には注意が必要です。

// 複数の音声を別スレッドで再生
Task.Run(() =>
{
var player = new SoundPlayer("effect1.wav");
player.PlaySync();
});

Task.Run(() =>
{
var player = new SoundPlayer("effect2.wav");
player.PlaySync();
});

まとめ

C#で音を鳴らす方法には、用途に応じて複数のアプローチがあります。

方法対応フォーマット特徴
System.Media.SoundPlayerWAVのみ簡単に扱えるが制限あり
NAudioMP3, WAVなど高機能で拡張性が高い
リソース埋め込み再生WAV配布時に便利

効果音やBGMの再生をアプリに加えることで、操作感や演出が一段と洗練されます。この記事で紹介した方法をベースに、ぜひ自分のアプリに音を取り入れてみてください。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。