Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Einen Ton / Sounddatei nur 5 Sekunden abspielen (http://www.expert-advisor.com/forum/showthread.php?t=5986)

Angel 25.01.18 19:15

Einen Ton / Sounddatei nur 5 Sekunden abspielen
 
Hi, irgendwie gehen meine Artikel anscheinend unter:rolleyes:
Ich bin gerade an einem Problem, wie ich einen Ton oder eine Sounddatei mittels PlaySound() für eine bestimmte Zeitdauer abspielen kann.
Es soll ein Ton oder Sounddatei 5 Sekunden lang abgespielt werden, wenn die Bedingung erfüllt ist.
Mit Ticks geht es nicht, denn die sind zu unregelmäßig.
Mit a = TimeCurrent(); b=a+Zeit; geht es auch nicht, da TimeCurrent ja immer wieder neu berechnet wird.
Mir fehlt da echt die Idee!

Hat jemand bitte einen Gedanken, der mir weiterhelfen könnte?! Ein Codeschnippsel oder sonstwas?

next user 27.01.18 15:43

Komisches Gefühl, von Android Studio zu MetaEditor zu wechseln...
Aber ich hab grad mal spontan an folgendes gedacht:

Möglichkeit 1:
Nicht so toll (unter anderem wegen empfohlene Aufrufe in der Dokumentation)
Code:

// Zum Zeitpunkt von PlaySound(...)
EventSetTimer(5);

...
...

// In OnTimer()
PlaySound(NULL);
EventKillTimer();

Möglichkeit 2:
Find ich die beste von den drein...
Code:

...
int SEC_ON_START = 0;
int SEC_CUR = 0;
bool SOUND_ACTIVE = false;
...

// Timer in OnInit einmalig initialisieren
EventSetTimer(1);

// Zum Zeitpunkt von PlaySound(...)
SEC_ON_START = TimeSeconds(TimeCurrent());
SOUND_ACTIVE = true;

// In OnTimer()
if(SOUND_ACTIVE)
{
  SEC_CUR = TimeSeconds(TimeCurrent());

  if(SEC_ON_START < 55)
  {
      if((SEC_CUR >= SEC_ON_START+5) || (SEC_CUR < SEC_ON_START))
        {PlaySound(NULL); SOUND_ACTIVE = false;}
  }
  else
      if(SEC_CUR < SEC_ON_START && SEC_CUR+60 >= SEC_ON_START+5)
        {PlaySound(NULL); SOUND_ACTIVE = false;}
}

Möglichkeit 3:
Wenns ohne den Timer sein soll (ungenau auf Tick-Basis!) ...
Code:

...
int SEC_ON_START = 0;
int SEC_CUR = 0;
bool SOUND_ACTIVE = false;
...

// Zum Zeitpunkt von PlaySound(...)
SEC_ON_START = TimeSeconds(TimeCurrent());
SOUND_ACTIVE = true;

// In OnTick()
if(SOUND_ACTIVE)
{
  SEC_CUR = TimeSeconds(TimeCurrent());

  if(SEC_ON_START < 55)
  {
      if((SEC_CUR >= SEC_ON_START+5) || (SEC_CUR < SEC_ON_START))
        {PlaySound(NULL); SOUND_ACTIVE = false;}
  }
  else
      if(SEC_CUR < SEC_ON_START && SEC_CUR+60 >= SEC_ON_START+5)
        {PlaySound(NULL); SOUND_ACTIVE = false;}
}

Kann durchaus noch andere, bessere Wege geben. Das ist lediglich das,
was mir grad so in den Sinn kam...

PS: Benutze zum Posten von Code bitte entsprechende Tags im Editor...


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:07 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum