音声再生のプログラムが意外にも少なかったのでメモ.
開発環境
Visual Studio 2015
用意するもの
MMSystem.h
WinMM.Lib
.wavファイル
まずは,Visual Studio 2015を立ち上げて,プロジェクトを作成するところから始めましょう.
Visual Studioを立ち上げたら左上の[ファイル]から[新規作成]->[プロジェクトを選択]
その後,画像のようにWin32 コンソール アプリケーションを選択.プロジェクト名などを入力したら[完了]を押します.
次に,画面右の[ソリューションエクスプローラー]の下にあるプロジェクトを右クリックし[プロパティ]を選択します.そうすると,下の画像のようなウィンドウが出てくると思います.
はじめに,一番上にある[構成]を[Release]にし,[プラットフォーム]は[x64]にしておきます.
このウィンドウの[C/C++]->[全般]の一番上にある[追加のインクルードディレクトリ]で使いたいヘッダファイルがあるフォルダを絶対パスで指定します.今回は,
C:\Program Files (x86)\Microsoft SDKs\Windows~\Include
を指定します.
次に,[リンカ]->[全般]の真ん中あたりにある[追加のライブラリディレクトリ]で必要な.libファイルがあるフォルダを絶対パスで指定します.
今回は,
C:\Program Files (x86)\Microsoft SDKs\Windows~\Lib
を指定します.
さらに,[リンカ]->[入力]の一番上にある[追加の依存ファイル]で必要な.libファイルを指定します.[全般]でフォルダまでのパスを指定しているので,ファイル名だけで結構です.今回必要なファイルは,WinMM.Libです.
コードを書いていきます.
今回使用するインクルードファイルは以下3つです.MMSystem.hは,私の場合
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
の下にありました.~\Windowsの下にあるフォルダから探してみるといいと思います.
# include <iostream>
# include <windows.h>
# include <MMSystem.h>
ソースコードです.PlaySound関数はbool型で,waveファイルを再生する関数です.他の形式のものは再生されません.
int main()
{
if (!PlaySound(TEXT("file.wav"), NULL, SND_SYNC)) {
std::cout << "再生できません" << std::endl;
}
system("pause");
return 0;
}
第1引数はLPCSTR(const char*らしい...)型で、TEXT(waveファイル名)で指定すればいいです.
第2引数はデフォルトでNULLで問題ありません.
第3引数でフラグ(再生方法)を指定します.基本的にはSND_SYNC(通常再生)でいいと思いますが,SND_LOOPでループ再生させることもできます.詳しくはリファレンスを参照.(https://msdn.microsoft.com/ja-jp/library/cc428768.aspx)
SND_LOOPを使用する注意点としては,SND_LOOPを使用するだけでは,ループしてくれないということです.while文で囲んでやると,再生が終わると,新たに再生を始めてくれます.
Visual Studio 2017で同じことをするとどう頑張ってもエラーをはかれてしまう現象に悩まされています.といってもVisual Studio 2015でも十分使えるので問題はないですけど...