Воспроизведение звука

 

Добрый вечер, ребят, нужна помощь в воспроизведении звука, мне необходимо чтоб если условие исполнялось звук играл раз в 5 секунд, как это реализовать? 

 
Roman Usenkov:

Добрый вечер, ребят, нужна помощь в воспроизведении звука, мне необходимо чтоб если условие исполнялось звук играл раз в 5 секунд, как это реализовать? 

  1. Через таймер
  2. Через счётчик и статическую переменную datetime.
 
Через таймер
 

что такое таймер в mql4 и как им пользоваться

вот например

if(15>10)

{

PlaySound("news.wav"); 

 

Вот пример: если есть условие, то НЕ ЧАЩЕ ЧЕМ РАЗ В ПЯТЬ СЕКУНД будет звук:

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameter
input string   file_name="alert.wav";
//---
bool           plaed=false;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer (every 10 seconds)
   EventSetTimer(5);
//---
   plaed=false;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- здесь своё условие, для примера поставлю приметивное условие
   if(3==3)
      if(!plaed)
        {
         PlaySound("alert.wav");
         plaed=true;
        }
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   plaed=false;
  }
//+------------------------------------------------------------------+
Файлы:
TestEA.mq5  4 kb
 
Vladimir Karputov:

Вот пример: если есть условие, то НЕ ЧАЩЕ ЧЕМ РАЗ В ПЯТЬ СЕКУНД будет звук:

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameter
input string   file_name="alert.wav";
//---
bool           plaed=false;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer (every 10 seconds)
   EventSetTimer(5);
//---
   plaed=false;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- здесь своё условие, для примера поставлю приметивное условие
   if(3==3)
      if(!plaed)
        {
         PlaySound("alert.wav");
         plaed=true;
        }
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   plaed=false;
  }
//+------------------------------------------------------------------+
если честно то я не свсем понял, можете объяснить написанное?
 
почему именно там пишите и что ознаечает plead фолс в  onInit?
 
Roman Usenkov:
если честно то я не свсем понял, можете объяснить написанное?

Сначала Мы выставили таймер на пять секунд:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer (every 10 seconds)
   EventSetTimer(5);

это означает, что раз в пять секунд будет генерироваться событие OnTimer() - то есть Мы раз в пять секунд будет попадать в OnTimer().

Что делает таймер?  Он флагу plaed присваивает значение false:

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   plaed=false;
  }

Что это даёт? На каждом тике Мы попадаем сюда и проверяем наше условие:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- здесь своё условие, для примера поставлю приметивное условие
   if(3==3)
      if(!plaed)
        {
         PlaySound("alert.wav");
         plaed=true;
        }

  }

если это условие истинно, то дальше проверяем флаг plaed: если plaed==false, то будет проиграна музыка и флаг plaed станет true.

На следующем тике Мы снова попадаем в OnTick(), снова условие истинно, но флаг plaed==true - в итоге условие истинно, но музыка не зазвучит.

 
Vladimir Karputov:

Сначала Мы выставили таймер на пять секунд:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer (every 10 seconds)
   EventSetTimer(5);

это означает, что раз в пять секунд будет генерироваться событие OnTimer() - то есть Мы раз в пять секунд будет попадать в OnTimer().

Что делает таймер?  Он флагу plaed присваивает значение false:

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   plaed=false;
  }

Что это даёт? На каждом тике Мы попадаем сюда и проверяем наше условие:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- здесь своё условие, для примера поставлю приметивное условие
   if(3==3)
      if(!plaed)
        {
         PlaySound("alert.wav");
         plaed=true;
        }

  }

если это условие истинно, то дальше проверяем флаг plaed: если plaed==false, то будет проиграна музыка и флаг plaed станет true.

На следующем тике Мы снова попадаем в OnTick(), снова условие истинно, но флаг plaed==true - в итоге условие истинно, но музыка не зазвучит.

дело в том что у меня нет onTick() и когда пытаюсь написать его он отображается обычным черным текстом, естественно пишу перед ним воид. Я пишу индикатор на мт4
 
Roman Usenkov:
дело в том что у меня нет onTick() и когда пытаюсь написать его он отображается обычным черным текстом, естественно пишу перед ним воид. Я пишу индикатор на мт4
Откройте редактор MetaEditor для MetaTradre 5 и всё заработает. Для МТ4 не вижу смысла что-либо подсказывать. Извините.
 
Roman Usenkov:
дело в том что у меня нет onTick() и когда пытаюсь написать его он отображается обычным черным текстом, естественно пишу перед ним воид. Я пишу индикатор на мт4
datetime DelayAlert;

int OnInit() {
  DelayAlert=TimeLocal()+5;
 return(INIT_SUCCEEDED);
}

void OnTick() {

// Delay Alert
  if(DelayAlert<TimeLocal()) {
   PlaySound("alert.wav");
   DelayAlert=TimeLocal()+5;
  }
//-
}
Это без таймера, если нет тиков, то прозвучит чуток позже, но не раньше