MT4やMT5で音を完全再生させるための支援ツール「MT4Sound」


インジケーターからPlaySound関数を呼び出して音を鳴らすことができますが、ほぼ同時に複数の音を鳴らそうとすると先に再生した音は後から再生した音に割り込まれ途中で切れます。
また、複数のMT4(MT5)を起動していて、音が同時に再生されると重なってしまいます。

以下のイメージ図で説明すると、音声1の再生開始後、少し遅れて音声2を再生した場合、
音の鳴り方のイメージ
割り込み(1つのMT4から両方再生など)の場合、音声1は「ポンド」までしか再生さません。
重なり(複数のMT4からそれぞれ再生など)の場合、音声1と音声2が合成されるので正しく聞き取れません。

MT4Soundを使用した場合、音声1の再生が終わった後に音声2が再生されるようになります。
また、MT4Sound側で再生するので、音声ファイルにmp3を指定することも可能です。

MT4Soundで再生させるためにはPlaySound関数をSendSoundNo関数に置き換える必要があります。
SendSoundNo関数はMT5での動作も確認済みです。

バージョン1.1.0.0から再生中の音声を停止させる機能が追加されました。

ファイルはMT4用のトップページからダウンロードできます。


導入方法(インストール)

ダウンロードしたZIPファイルを適当なフォルダに展開(解凍)してください。

補足:ZIPファイルはMT4用のトップページからダウンロードできます。

注意:「C:\Program Files\」や「C:\Program Files (x86)\」フォルダ配下には展開しないでください。正しく動作しない可能性があります。


削除方法(アンインストール)

MT4Soundを終了し、上記インストール時に作成したフォルダごと削除してください。
MT4Soundはレジストリを使用していません。

注意:設定で「Windows起動時に自動起動する」にチェックを入れている場合はあらかじめチェックを外してからアンインストールしてください。外さないとスタートアップフォルダにショートカットが残ったままになります。


使い方

MT4Sound.exeを起動します。
MT4Soundは常駐型なので起動後はシステムトレイにベルのアイコン「アイコン」が表示されます。
アイコンを右クリックするとポップアップメニューが表示されるので「設定」をクリックします。

設定画面が表示されたら「設定画面の説明」を参考にしながら再生したい音声ファイルの追加やその他の設定を行ってください。
設定が終わったら「保存」ボタンをクリックして設定画面を閉じます。

次にインジケーターを修正します。
まず、インジケーターに以下の宣言と関数を追加します。
挿入する場所はインジケーターのサンプルを参考にしてください。

/*-- インポートするDLLの宣言 ---------------------------------------*/ #import "user32.dll" int FindWindowW(string lpClassName,string lpWindowName); int PostMessageW(int hWnd,int Msg,int wParam,int lParam); #import //+------------------------------------------------------------------+ //|音声ファイル番号送信処理 | //+------------------------------------------------------------------+ void SendSoundNo(int AFileNo) { static int hWnd = 0; //MT4Soundのウィンドウハンドル取得 if (hWnd == 0) hWnd = FindWindowW("TfrmMT4Sound",NULL); //MT4Soundが起動している場合は音声ファイル番号を送信する(送信失敗した場合はハンドルを初期化) if (hWnd != 0) if (PostMessageW(hWnd,0x8000,AFileNo,0) == 0) hWnd = 0; }

次に、PlaySound関数をSendSoundNo関数に置き換えます。
SendSoundNo関数の引数(音声ファイル番号)はMT4Soundの設定画面の音声ファイル一覧の番号を指定します。

//PlaySound("alert.wav"); SendSoundNo(1);

修正したら保存し、インジケーターをチャートに挿入してください。
インジケーターをチャートに挿入する際は「DLLの使用を許可する」にチェックを入れてください。

以上です。
あとはインジケーターが音を鳴らすタイミングで音声ファイルが再生されるのを待ちます。


ポップアップメニューの説明

設定

設定画面を表示します。(注:設定画面表示中はシステムトレイにアイコンは表示されません)

終了

MT4Soundを終了します。(注:終了前の確認画面は表示されません)


設定画面の説明

再生したい音声ファイルの登録とMT4Soundの動作を設定する画面です。

設定画面

音声ファイル一覧

再生したい音声ファルのファイル名(フォルダ名も含む)とそのファイルに割り当てられた音声ファイル番号が表示されます。
一覧の上で右クリックするとポップアップメニューが表示され、追加、変更、削除および順番の入れ替えが行えます。

音量と時間帯

音声ファルを再生するときの音量を指定します。
指定できる値は0~100の範囲です。「0」を指定すると無音になります。
「再生」ボタンをクリックすると音声ファイル一覧で選択されている音声ファイルが再生されるので音の大きさを確認できます。

音量は2つの時間帯に対して別々に指定します。指定した時間帯以外は無音になります。
日中は大きめ、夜間は小さめ、就寝中は無音、といった設定が可能です。
24時間同じ音量にしたい場合は「音量1の時間帯」に「0:00:00」~「23:59:59」を指定してください。「音量1の時間帯」が優先されますので「音量2の時間帯」は適当で構いません。

スリープ解除

音声再生時にディスプレイのスリープ解除を行うかを指定します。
指定できるのは以下の通りです。

・しない
・する
・する(無音の時も)

スリープ解除については後述のディスプレイのスリープ解除についてを参照してください。

Windows起動時に自動起動する

Windowsが起動した時に、MT4Soundを自動的に起動させたい場合はチェックを入れてください。

注意:MT4Soundをアンインストールする際には、あらかじめチェックを外してください。外さないとスタートアップフォルダにショートカットが残ったままになります。
何らかの理由で残ったままになった場合はショートカットの手動削除を参照してください。

再生停止(バージョン1.1.0.0にて追加)

再生中の音声を途中で停止させることができます。
停止されるのは再生中の音声のみなので次の音声は再生されます。
再生時間の長い音声ファイルを再生していて、それを途中で止めたい場合に便利です。

マウスクリックにチェックを入れた場合、画面のどこでクリックしても停止します。

マウス移動にチェックを入れた場合、横のテキストボックスで指定した移動量の分だけマウスカーソルを動かすと停止します。

キー押下にチェックを入れた場合、選択ボタンをクリックして表示される「再生停止させるキーを選択する画面」で停止させるキーに指定したキーを押したとき(厳密には押して離したとき)に停止します。
左右のShiftキーとCtrlキーを押した場合のみ停止させたい場合は以下のように設定します。
再生停止させるキーを選択する画面
※各キーをクリックするごとに「停止させる」、「停止させない」が切り替わります。また、左下のプルダウンメニューを選択して「変更する」ボタンで一括して変更することもできます。

注意:フック処理を使用している都合上、管理者特権で動作しているアプリ(タスクマネージャーなど)がアクティブな場合は停止させることはできません。他にも何らかの理由(フック処理を使用している他のアプリとの競合など)で停止させることができない可能性があります。

保存

「MT4Sound.ini」ファイルに設定内容を保存して設定画面を閉じます。

キャンセル

変更した内容は破棄されて設定画面を閉じます。
画面右上の「×」で画面を閉じた場合も同様です。

ヘルプ

オフラインヘルプ(このHTML文書)を表示します。


インジケーターのサンプル

インジケーターからMT4Soundに音声ファイル番号を送信するサンプルを添付しています。参考にしてください。
ついでにmp3の音声ファイルも添付しました。気に入ったら使ってください。

MT5での動作も確認済みです。拡張子を「mq4」から「mq5」に変更して使用してください。

320_SendSound_Sample.mq4

チャートの足が増えるたびに音声ファイル番号を送信するサンプルです。
基本的に手持ちのインジケーター内にある「PlaySound」関数を「SendSoundNo」関数に置き換えて音声ファイル番号を指定し、サンプルソース内の「サンプル(ここから)」と「サンプル(ここまで)」で囲まれた範囲をコピーするだけで良いと思います。

320_SendSound_Sample_CN.mq4

クリックした位置の価格で通知するインジケーター「320_ClickNotice」を流用して作成したサンプルです。


ディスプレイのスリープ解除について

ディスプレイのスリープとは、例えば以下のようなWindowsの設定画面で「次の時間が経過後、ディスプレイの電源を切る」で指定した時間パソコンを操作しなかったことで自動的にディスプレイの電源が切れたときのことです。

Windowsのスリープを設定する画面

「普段は他の作業をしているのでチャートを見てないが、音声が再生されたら取引するか判断するためにチャートを見る」といった場合、ディスプレイをつけっぱなしだと電気代がもったいないしディスプレイの寿命も縮む、だからといって音声が再生されるたびに電源を入れるとかスリープ解除のためにキーボードやマウスを操作するのは面倒、という方には便利な機能だと思います。

注意:上記画面の「次の時間が経過後、PCをスリープ状態にする」でパソコンがスリープした場合のスリープ解除(つまりパソコンの電源を入れること)はできませんのでご注意ください。
(パソコンがスリープ状態だとMT4も止まっているのでどうしようもありません)


ショートカットの手動削除

エクスプローラーに以下のパスを入力すればスタートアップフォルダにたどり着けます。
その中に「MT4Sound」があれば削除してください。

%AppData%\Microsoft\Windows\Start Menu\Programs\Startup

ソースについて

MT4Sound.exeについては最低限必要なソースのみ添付しています。リソースファイル(.res)などは添付していません。


更新履歴

リリース日 バージョン 内容
2019/03/22 1.0.0.0 初リリース
2019/04/27 1.1.0.0 1.再生中の音声を停止させる機能を追加しました。
2.タスクトレイのポップアップメニューを左クリックでも表示するようにしました。