【VB.Net】wavファイルを再生してみた~音源ファイルの取扱い~

どうも!リョクちゃです。

VB.Netで音源ファイルって使えるのかなぁ
リョクちゃ
リョクちゃ

使えるぞい
お茶
お茶

ということで今回は音源ファイルの一種である、wavファイルについて

VB.Netで再生するにはどうすればいいのかWindowsフォームアプリケーションを

作りながら紹介していきます。

ちなみに前回の記事はこちら

Windowsフォームアプリケーションで多言語化したい場合、リソースファイルを使った方法があります。今回は、実際にアプリケーションを作成し、リソースファイルを使った多言語について簡単に紹介しています。少しでも参考になれば嬉しいです。



目次

準備編

VisualStudio2019を使って、Windowsフォームアプリケーションを作成していきます。

最初の手順については、下記記事をご参照ください。

VisualStudioを使ってWindowsアプリケーションを開発していく流れを紹介します。 以前に、簡単にざっくりと教える機会があった...

スポンサーリンク




フォームの作成

以下のようなフォームを作成します。

①~②のコントロールについては以下の表のとおりです。

Noコントロール名前
1ButtonbtnStart
2ButtonbtnStop

各コントロールのフォントは、メイリオの18ptを設定しています。

実行環境

筆者の実行環境は、

  • VisualStudio2019
  • Windows 10 64bit
  • .Net Framework 4.5.1

になります。

※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。

アプリケーションの目的

“wavファイル再生”ボタンを押すことで、指定されたwavファイルが再生され、

“wavファイル停止”ボタンを押すことで、再生されているwavファイルを停止する。

これらができることを目的とする。

動作

動作としては、

  • btnWavStartを押すことで、指定のwavファイルを再生。
  • btnWavStopを押すことで、再生されているwavファイルの停止。

これらができることとします。

プログラム編

wavファイル

WAVまたはWAVE(ウェイヴ、ウェヴ、ワヴ) (RIFF waveform Audio Format) は、マイクロソフトIBMにより開発された音声データ記述のためのフォーマットである。RIFFの一種。主としてWindowsで使われるファイル形式である。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

https://ja.wikipedia.org/wiki/WAV

ゲーム内の効果音やプレゼン資料などの効果音などに使われることが多いですね。

今回、使用するwavファイルは下記サイトでダウンロードさせていただきました。

使用するwavファイル

・cat1.wav

・dog1.wav

今回は音源ファイルをアプリケーションで使う方法を2パターン紹介していきます。

音源ファイルを事前にプログラムフォルダに配置する

音源ファイルをプロジェクトフォルダ(プログラムフォルダ)内に配置する方法があります。

下図の様な流れで配置します。

プロジェクト内のbinフォルダのDebugフォルダ上にWaveフォルダを新たに作成します。

作成したフォルダに使用するwavファイルを配置します。

配置するには、作成したWaveフォルダを選択し、右クリックを押します。

押したら追加タブの既存項目の追加をクリックし、wavファイルを選択し追加します。

これで準備は完了です。

音源ファイルの再生

Waveフォルダに配置したwavファイルを実際に読み出し再生していきます。

wavファイルを再生するには、若干の準備が必要になります。

音源ファイル再生の準備

wavファイルを扱う際に必要となるDLL“winmm.dll”をインポートします。

コードで書くと、

次にDLLを使用して、音源ファイルの再生用の関数を準備します。

winmm.dllではPlaySound関数が用意されていて、

これを使うことでwavファイルの再生ができます

引数の

  • pszSoundは音源ファイルのパス
  • hmodはインスタンスハンドル
  • fdwsoundは再生フラグ

になります。

インスタンスハンドルは、メモリ領域に展開されたプログラムコードの実態を表します

すなわちメモリ領域のハンドルになります。

例えば、

学生クラスがあり、このクラスでは、名前、学部、学科などが収められています。

このクラスを、”鈴木”、”工学部”、”計数工学科”として、インスタンスを作成します。

コードだと、

これでインスタンスが生成されます。

インスタンス化されたstudent_1に学籍番号(例:123456)を割り当てた場合、

この学籍番号がハンドルに相当するものになります。

インスタンスを生成すると、メモリ領域というメモリ内にある部屋に展開され、

展開された部屋に番号が割り当てられるといったイメージ。

ようはメモリ領域が住所で、その住所のある番地にインスタンスが生成される。

この番地がハンドル相当のものになるといった感じですかね。

→ うーん、難しい。

fdwsoundは、一つまたは複数のフラグを組合わせて指定します。

fdwsoundは、以下のコードで準備ができます。

PlaySoundFlagsを組み合わせて使うことで、再生や停止ができるようになります。

同期再生や非同期再生については、

  •  同期再生はwavファイルの再生が終了するまで他の処理ができません。
  •  非同期再生はwavファイルの再生をバックグラウンドで実行するので、
    他の処理も継続して行えます。

準備が整ったので実際に再生をするコードを書いていきます。

wavファイルを再生するには、先ほどのPlaySound関数を使います。

と書くことで、wavファイルを再生できます。

PlaySoundFlags.SND_FILENAME or PlaySoundFlags.SND_ASYNCは

wavファイルを直接ファイルから読みだして非同期再生することを意味しています。

PlaySoundFlags.SND_FILENAMEがファイルを直接読み出すコマンドになります。

PlaySoundFlags.SND_ASYNCは音源の非同期再生を表すコマンドになります。

MusicPathは音源ファイルのパスになります。

これは後で作成する関数にて渡す引数になります。

今回、音源ファイルのパスは以下のように設定しておきます。

それぞれの相対パスを各変数に定数として宣言しています。

再生する際の呼び出し方がわかったので、

PlaySound関数を新たに作成する関数内で呼び出す関数を作成します。

(冗長ではありますが……。)

SyncMusic関数を”wavファイルを再生する”ボタンが押されたときに呼び出すようにします。

音源ファイルの停止

再生中の音源ファイルを停止するには、以下のコードを書きます。

これも同様に、新たに作成した関数で呼び出せるようにします。

StopWaveSound()を”Wavファイル停止”ボタンが押されたときに、

呼び出せるようにします。

これで音源ファイルの再生と停止が各ボタンが押されることで実行できるようになりました。

音源ファイルをリソースファイルとして埋め込む

続いて、音声ファイルをリソースとして埋め込んでいきます。

方法としては、

プロジェクトのプロパティを開き、リソースを選択します。

文字列のプルダウンからオーディオを選択し、リソースの追加を選択します。

使用する音源を選択し、追加します。

追加すると、音源ファイルのアイコンがリソース画面上に表示されます。

追加がされると、プロジェクト内にもResourcesフォルダが自動作成され、

追加した音源ファイルが作成されたフォルダ内に自動配置されます。

これでリソースとして音源ファイルを埋め込むことができました。

音源ファイルの再生

リソースとして音源ファイルを埋め込んだ場合は、

“音源ファイルを事前にプログラムフォルダに配置する”での方法とは異なります。

流れとしては、

  1. リソースの読み込み
  2. 読み込んだリソースの再生

といった流れで行います。

リソースの読み込み

以下のコードで行います。

読み込んだリソースの再生

My.Computer.Audio.Play()メソッドを使用して、リソースの音源ファイルを再生します。

引数のmediaStreamはリソースを読み込んだ変数になります。

AudioPlayMode.Backgroundでバックグラウンドでの再生を意味しています。

メインの処理の邪魔をせずバックで処理をして再生する、非同期再生と同じ役割があります。

これでリソースとして埋め込んだ音源ファイルの再生ができるようになりました。

実行編は、音源の再生になるので画面キャプチャではわかりにくいので、

割愛します。

まとめ

VB.Netで音源ファイルであるwavファイルの再生について紹介してきました。

やり方としては、

  1. 音源ファイルを事前にプログラムフォルダに配置する方法
  2. 音源ファイルをリソースとして埋め込む方法

の2種類について紹介しました。

時にシステム音ではものたりないそんな時に活用してみてはいかがでしょうか。

音源ファイルの再生に悩んでいる読者の方の参考になれば嬉しいです。

最後までお読みいただきありがとうございます。

・こちらの書籍を参考にVB.Net勉強しています。

スポンサーリンク