PlaySoundの代りに音楽プレイヤーに再生させるコード。

コメントにあったので、参考用にコードを公開しておきます。音楽プレイヤーに再生させると、複数のMT4からの再生を重複することなく再生できるのと、ボリュームの調整がプレイヤー側で出来るというメリットがあります。


まずは、冒頭で ShellExecuteA を使えるようにします。(MQL4 では、ShellExecuteA ,MQL5 ではShellExecuteW )

#import "shell32.dll"
int ShellExecuteA(int hWnd,int lpVerb,string lpFile,string lpParameters,string lpDirectory,int nCmdShow);
#import


次に、PlaySoundEXの中身を書き換えます。

void PlaySoundEX(string wavfile)
{
   //string AppPath = "C:\\Program Files\\Winamp\\winamp.exe";
   string AppPath = "C:\\Program Files\\foobar2000\\foobar2000.exe";
   static datetime atime = 0;
   if(TimeLocal()-atime <10+MathRand()/32767.0*10) return;
   ShellExecuteA(0,0,AppPath,"\""+TerminalPath()+"\\sounds\\"+wavfile+"\"","",7);
   atime = TimeLocal();
}

AppPath には、音楽プレイヤーのファイルパスを書きます。
プレイヤーによっては、設定を変更する必要があります。例えば、foobar2000 の場合は、下記チェックを外さないとバックグラウンドで再生してもらえません。


音楽プレイヤーで再生させる場合、どのプレイヤーを使えば良いのか考える必要があるのですが、メジャーな所では、WinAMPか、foobar2000 ぐらいしか候補が思い浮かびません。深く調査した訳ではないのですが、どちらのプレイヤーも一長一短な気がします。
意外と、軽量で、バックグラウンドで再生ができて、ShellExecuteして曲を追加した時のリスト管理がきちんとできるプレイヤーは見つからないのかも...。