C# でサウンドを再生する

Syed Hassan Sabeeh Kazmi 2023年10月12日
  1. System.Media.SoundPlayer を使用して C# でサウンドを再生する
  2. SystemSounds.Play メソッドを使用して C# でサウンドを再生する
  3. Windows Media Player コントロールを C# ソリューションに埋め込んでサウンドを再生する
  4. Microsoft.VisualBasic 参照を C# プロジェクトに追加してサウンドを再生する
C# でサウンドを再生する

このチュートリアルでは、C# を使用して Windows フォームでオーディオ ファイルまたはサウンドを再生する方法について説明します。 視聴者をゲーム開発や技術アプリケーションに没頭させる上で、サウンドの重要性を否定することはできません。

C# プログラミングでは、オーディオ ファイルまたはサウンドを Windows アプリケーションに実装するための 4つの主な方法が提供されます。それぞれが独自の方法で便利で実用的です。 マルチプレイヤー用の .NET などの豊富なプラットフォームを使用すると、WAV またはその他のフォーマット ファイル用のカスタム サウンド ジェネレーターを簡単に作成できます。

さらに、WPF コーンとして C# を使用し、優れた組み込みのマルチプレイヤー (オーディオ) サポートを使用して、Wave ファイル (サウンド ファイル) のバイトベースのバッファーをメモリ内に直接構築することができます。

ここで理解しておくべき重要なことは、SoundPlayer クラスは WAV または Wave 形式に基づいてサウンドを再生するため、代わりにあまり役に立ちません。MediaPlayer クラスと MediaElement クラスは MP3 ファイルの再生を可能にします。

System.Media.SoundPlayer を使用して C# でサウンドを再生する

SoundPlayer クラスは、ファイル パス、名前、および System.Media 名前空間への参照を必要とするため、実行時に特定のパスでサウンドを再生するのに役立ちます。

System.Media 名前空間への参照を宣言し、SoundPlayer _exp = new SoundPlayer(@"path.wav"); を使用できます。 オブジェクトの宣言で名前空間に言及せずに。

その後、_exp.Play(); のように Play() メソッドを使用して実行します。 最も重要なことは、サウンドの再生などのファイル操作は、適切または適切な構造化された例外処理ブロック内に含めて、効率を高め、何か問題が発生した場合に理解できるようにする必要があることです。 パス名の形式が正しくない、読み取り専用のサウンド ファイル パス、null パス、および無効なオーディオ ファイル パス名は、エラーを引き起こし、別の例外クラスが必要になる可能性があります。

using System;
using System.Media;  // essential namespace for using `SoundPlayer`
using System.Windows.Forms;

namespace play_sound {
  public partial class Form1 : Form {
    // Initialize form components
    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      // object creation and path selection
      SoundPlayer player = new SoundPlayer(@"C:\Users\DELL\dark_souls_theme.wav");

      // apply the method to play sound
      player.Play();
    }
  }
}

出力:

SoundPlayer

SystemSounds.Play メソッドを使用して C# でサウンドを再生する

この機能 (SystemSounds クラスが提供する) は、1 行のコードでさまざまなシステム サウンドを提供する機能に加えて、C# アプリケーションにサウンドを実装する最も簡単な方法の 1つです。 SystemSounds.Beep.Play();.

ただし、SystemSounds クラスの使用にはいくつかの制限があります。次の 5つの異なるシステム サウンドにしかアクセスできないためです。 アスタリスクビープエクスクラメーションハンド、およびクエスチョン、および場合によっては、Windowsでシステムサウンドを無効にすると、この方法は機能せず、すべてのサウンドが無音に置き換えられます.

一方で、Windows と同じように非常に簡単にサウンドを再生できるため、C# アプリケーションがユーザーの無音の選択を尊重することは常に適切な選択です。

C# プロジェクトで System.Media への参照を宣言するか、System.Media.SystemSounds.Asterisk.Play(); のようなものを使用します。 音を鳴らすこと。

using System;
using System.Media;  // essential namespace for `SystemSounds`
using System.Windows.Forms;

namespace play_sound {
  public partial class Form1 : Form {
    // initialize components
    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      SystemSounds.Asterisk.Play();  // you can use other sounds in the place of `Asterisk`
    }
  }
}

出力:

システムサウンド

Play() メソッドは、一連の Windows OS サウンド イベント タイプに関連付けられたサウンドを非同期的に再生します。 システム サウンドにアクセスするための静的メソッドを提供する SystemSounds クラスを継承することはできません。

これは、一般的なシナリオで C# アプリケーションがさまざまなシステム サウンドを使用できるようにする高レベルのアプローチであり、これらのアプリケーションが Windows 環境にシームレスに適合するのに役立ちます。 Sound コントロール パネルでサウンドをカスタマイズして、各ユーザー プロファイルがこれらのサウンドをオーバーライドできるようにすることができます。

Windows Media Player コントロールを C# ソリューションに埋め込んでサウンドを再生する

Microsoft Visual Studio を使用して Windows Media Player コントロールを追加し、C# でサウンドを再生することができます。 Windows Media Player は VS ツールボックスにあり、C# アプリケーションでその機能を使用するには、まずそのコンポーネントを Windows フォームに追加します。

Windows Media Player SDK の最新バージョンをシステムにインストールし、VS ツールボックスを使用してアクセスし、COM コンポーネントからカスタマイズして Windows Media Player オプションを追加します。 Visual Studio での Windows Media Player の既定の名前は axWindowsMediaPlayer1 ですが、覚えやすい名前に変更できます。

Windows Media Player ActiveX コントロールを C# プロジェクトに追加し、ボタン クリック イベントに実装します。 さらに、2つのモードを選択できます。Open メソッドで開かれたメディアに類似した Independent モードと、再生を制御するタイミング ツリーのタイムラインとクロック エントリに対応するメディア ターゲットである Clock モードです。 .

using System;
using System.Windows.Media;  // essential namespace
using System.Windows.Forms;

namespace play_sound {
  public partial class Form1 : Form {
    private MediaPlayer audio_player = new MediaPlayer();
    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      OpenFileDialog dialog_audio = new OpenFileDialog();
      dialog_audio.Filter = "MP3 files (*.mp3)|*.mp3|All files (*.*)|*.*";
      if (dialog_audio.ShowDialog() == DialogResult.OK) {
        audio_player.Open(new Uri(dialog_audio.FileName));
        audio_player.Play();
      }
    }

    private void button2_Click(object sender, EventArgs e) {
      // to pause audio
      audio_player.Pause();
    }

    private void button3_Click(object sender, EventArgs e) {
      // to resume the paused audio
      audio_player.Play();
    }
  }
}

出力:

Windows Media Player

最も重要なことは、MediaPlayer クラスが Windows Media Player テクノロジを継承して、オーディオ ファイルとシステム サウンドをいくつかの最新の形式で再生することです。 その助けを借りて、MediaPlayer インスタンスで言及または実行されるサウンド ファイルの再生プロセスを制御できます。

Microsoft.VisualBasic 参照を C# プロジェクトに追加してサウンドを再生する

Audio クラスは、Visual Basic でサウンドを再生することで非常に有名です。アプリケーションに Visual Basic バインディングを含めることにより、C# でこのクラスを使用することで、このクラスの恩恵を受けることができます。 ただし、SoundPlayer クラスと呼ばれる Audio クラスの C# 固有のバージョンがありますが、メモリ内にウェーブを直接バイトベースで簡単に構築することはできません。

Microsoft.VisualBasic 参照を最初のステップとして C# プロジェクトに追加し、Audio クラスから static Audio my_obj = new Audio(); のようなオブジェクトを作成します。 my_exp.Play("m:\\path.wav", AudioPlayMode.WaitToComplete); のようにサウンド ファイルのアドレスを追加します。

AudioPlayMode を自分でカスタマイズまたは設定できます。これにより、サウンドの再生時間をカスタマイズできます。

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic;          // essential namespace
using Microsoft.VisualBasic.Devices;  // essential namespace

namespace play_sound {
  public partial class Form1 : Form {
    static Audio audio_player = new Audio();

    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      audio_player.Play(@"C:\Users\DELL\dark_souls_theme.wav", AudioPlayMode.WaitToComplete);
    }
  }
}

出力:

VisualBasic

Background または BackgroundLoop ツールを使用して、オーディオがバックグラウンドで再生されている間に他のタスクを再開することをお勧めします。

オプションです。 ただし、圧縮されていない WAV ファイルを学習することにより、C# コードだけを使用してカスタム サウンドを作成し、システムのメモリに直接サウンドを作成することができます。

このチュートリアルでは、C# で効果的にサウンド ファイルを再生する方法を説明しました。

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub