[MQL] #resourceを使って音声ファイルをex4に埋め込む方法

#resourceプロパティを使って、音声ファイルをex4ファイルに埋め込む方法を説明します。

下記の記事を先に読むと理解しやすくなります。

音声ファイルをex4に埋めこむ目的

MQLで独自の音声ファイル(効果音)を再生させるには、PlaySound()を使います。しかしPlaySound()を使うには、再生する音声ファイルを指定のフォルダに置いておく必要があります。

制作者自身がインジケーターを使用するケースではそれでも問題ありません。しかし制作者以外がインジケーターを使用する場合、分かりにくいMT4のフォルダ構成を考えると、音声ファイルを指定のフォルダに保存するのはハードルが高いと思われます。

音声ファイルをあらかじめex4ファイルに埋め込んでおけば、音声ファイルを配布する必要や、音声ファイルを指定フォルダに保存する必要もなくなるため、インジケーターのインストール時に特別な操作をする必要が無くなります。

音声ファイルをex4に埋めこむ方法

音声ファイルをex4ファイルに埋め込むには、#resourceプロパティを使います。

#resourceは、プログラムに取り込むリソース(画像ファイルまたは音声ファイル)を指定するプロパティです。

使い方は以下の2ステップです。

リソースファイルを指定

プログラムの冒頭に#resourceプロパティを使ってプログラムに取り込むリソースファイルを指定します。

#resource "\\resource\\sound\\notice.wav"

ファイルを置く場所は、「データフォルダを開く」で開く→「MQL4」フォルダ以下の任意のフォルダに入れます。上記のコードは「MQL4」→「resource」→「sound」の中にnotice.wavという音声ファイルを置いています。

フォルダ階層をバックスラッシュ2本\\で区切ります。書き方を間違えると機能しないので注意してください。

リソースファイルを再生する

音声ファイルを再生したい場所で、引数にリソースファイルを指定してPlaySound()で音声を再生します。

string file_name = "::resource\\sound\\notice.wav";
PlaySound(file_name);

#resourceプロパティで指定したリソースファイルを指定する場合は、ファイルパスの先頭にコロン2つ(::)という書き方になります。慣れないと変な感じがしますが慣れましょう。

あとは、#resource指定したフォルダに音声ファイルを置いて、コンパイルすれば、音声ファイルがex4ファイルに取り込まれます。

音声ファイルを取り込んだ後は、もともとの音声ファイルを削除してもex4ファイルで音声を再生することができます。

サンプルプログラム

#resourceを使ったサンプルプログラムを用意しました。ティック受信のたびにnotice.wavを再生します。

下記のプログラムをコンパイルすると、音声ファイル(¥¥MQL4¥resource¥sound¥notice.wav)を取り込んでex4ファイルができます。

注意:このままコンパイルしたとしても、フォルダも音声ファイルもご自身のPCにありませんのでコンパイルでエラーになります。音声ファイルはご自身で用意していただき、音声ファイルへのパスもご自身のPCのフォルダに合わせて書き換えてください。

//+------------------------------------------------------------------+
//|                                              resource_sample.mq4 |
//|                                                     minagachi FX |
//|                                            https://minagachi.com |
//+------------------------------------------------------------------+
#property copyright "minagachi FX"
#property link      "https://minagachi.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#resource "\\resource\\sound\\notice.wav"

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   string file_name = "::resource\\sound\\notice.wav";
   PlaySound(file_name);
   return(rates_total);
}
//+------------------------------------------------------------------+

まとめ

この記事では音声ファイルをプログラムに取り込んで再生する方法を説明しました。

resoueceはファイルパスなどの書き方が少し独特で間違えやすいのですが、誤記さえしなければ思ったよりも簡単に使えます。

インジケーターの質を上げたり、独自性を出したりする際に使うと効果的です。

#resourceを使ったことがない人は一度チャレンジしてみることをおすすめします。

コメント

この記事へのコメント(0 件)