Ermitteln der Abspielzeit einer Sprachausgabe oder eines Klanges:
Da habe ich lange getüftelt und es ist etwas komplizierter, hier meine Lösung:
Ich habe immer je Soundkarte 2 winamp Instancen. Eine für Klänge und Sprache ($SK1_wav) und eine für Musik und Internetradio($SK1).
Die Lautstärke wird vor der Sprach- oder Klangausgabe gespeichert und danach wieder auf den Ursprungswert zurückgesetzt.
File : Konstanten.ips.php
//----------------------- wav & Sprachausgabe Dateien -------------------------
$wav = array(
"Hinweis" => "C:/IP-Symcon/Thomas/hinweis.wav",
"Meldung" => "C:/IP-Symcon/Thomas/meldung.wav",
"Abmelden" => "C:/IP-Symcon/Thomas/abmelden.wav",
"Aus" => "C:/IP-Symcon/Thomas/aus.wav",
"coin" => "C:/IP-Symcon/Thomas/coin-fall.wav",
"thunder" => "C:/IP-Symcon/Thomas/thunder.wav",
"clock" => "C:/IP-Symcon/Thomas/clock.wav",
"bell" => "C:/IP-Symcon/Thomas/bell.wav",
"Sprache1" => "C:/IP-Symcon/Thomas/Sprache1.wav");
function SK1_wait($w1)
{
$SK1 = 56641;
if ($w1 == 1)
{
$WAC_Vol = GetValueInteger("SK1_WAC_Vol_Merk"); //Lautstärke von mp3 am Anfang zurückholen
WAC_SetVolume($SK1, $WAC_Vol);
SetValueBoolean("Run_Winamp_SK1", false);
return; //raus ohne Pause
}
sleep(1);
$Warten = GetValueInteger("Length_SK1_2");
if($Warten<10)
{
Sleep($Warten+1); // mind. 1s warten für sehr kurze Texte/Klänge
SetValueBoolean("Run_Winamp_SK1", false);
}
else
{
Sleep($Warten); // für längere Texte/Klänge
SetValueBoolean("Run_Winamp_SK1", false);
}
$WAC_Vol = GetValueInteger("SK1_WAC_Vol_Merk"); //Lautstärke von mp3 am Anfang zurückholen
WAC_SetVolume($SK1, $WAC_Vol);
}
File : Winamp_SK1.ips.php
include(IPS_GetScriptFile("Konstanten"));
// Mehrfaches Triggern in kurzer Zeit verhindern
if ($Run_Winamp_SK1){return;}
SetValueBoolean("Run_Winamp_SK1", true);
//-------------------- Sprache und Ton ohne Musikunterbrechnung ---------------
$WAC_Vol = GetValueInteger("SK1_WAC_Vol");
SetValueInteger("SK1_WAC_Vol_Merk", $WAC_Vol); //Lautstärke von mp3 am Anfang speichern
WAC_SetVolume ($SK1, 5);
$Ansagetext_wav = GetValueString("Ansagetext_wav_SK1");
$Ansagetext_wav = explode(",", $Ansagetext_wav);
$wz = count($Ansagetext_wav); // Werte zählen
$Ausgabe_Typ = $Ansagetext_wav[$wz-1];
unset($Ansagetext_wav[$wz-1]); // $Ausgabe_Typ von Text trennen
$Ansagetext = implode(",", $Ansagetext_wav); //Ansagetext zusammenfügen
$Error = strlen($Ansagetext); //Fehler durch leeren Ansagetext abfangen
if($Error<1)
{
SetValueBoolean("Run_Winamp_SK1", false);
return;
}
if($Ausgabe_Typ == "Sprache") //Sprachausgabe
{
TTS_GenerateFile($TTS_SK1, $Ansagetext, "c:/IP-Symcon/Thomas/Sprache1.wav",39);
IPS_Sleep(50);
WAC_Stop($SK1_wav);
WAC_SetRepeat($SK1_wav, false);
WAC_SetShuffle ($SK1_wav, false);
WAC_ClearPlaylist($SK1_wav);
WAC_AddFile($SK1_wav,"c:/IP-Symcon/Thomas/Sprache1.wav");
}
else // diverse Töne Ausgeben
{
WAC_Stop($SK1_wav);
WAC_SetRepeat($SK1_wav, false);
WAC_SetShuffle ($SK1_wav, false);
WAC_ClearPlaylist($SK1_wav);
WAC_AddFile($SK1_wav,$wav[$Ausgabe_Typ]);
}
//------------------------------ Wav abspielen --------------------------------
WAC_Play($SK1_wav);
IPS_Sleep(200); //warten bis winamp Laufzeit übergeben hat
//Triggerscript Zeit übermittel wie lange es warten soll
$SK1_WAC_Length = GetValueString("SK1_WAC_Length_2");
$Length = explode(":",$SK1_WAC_Length);
$zeit = ($Length[1]*60)+$Length[2];
SetValueInteger("Length_SK1_2",$zeit); //berechnete Wartezeit an die Funktion übergeben
//-----------------------------------------------------------------------------
Aufruf der Sprache oder des Klanges:
(der String „Ansagetext_wav_SK1“ triggert mit OnUpdate dann Winamp_SK1.ips.php)
Die Funktion SK1_wait() gibt die Zeit an, die das Script auf die Sprache oder den Klang warten muß bis es weiter abgearbeitet wird.
$nachricht="Hier kann ein sehr langer Text stehen";
SetValueString("Ansagetext_wav_SK1", "$nachricht,Sprache"); //Sprachausgabe
sleep(1); // Platzhalter für Scriptlaufzeit nicht verändern
SK1_wait(2); // Laufzeit der Winamp Ausgabe
//hier gehts weiter im Script