TTS Sprachausgabe einer Fliesskommazahl

Nach Jahren fällt mir auf dass Steffi bei Minustemperaturen kein Komma ansagt. Da ich die float2speech Function nie richtig verstanden habe und der Fehler wohl dort liegt hier mal mein ganzes Skript.

$Temp1=GetValueFloat(10840 /*[AUSSEN\WETTERSTATION\Garten (KS300-WDE1)\Temperatur]*/);
$Temp1="-12.35"; //test
$id=26285 /*[Media Player USB Speaker]*/;   // ID des Mediaplayers

function float2speech( $v, $r=1){
	$s = strval(round($v, $r));
	if( preg_match( '#(.*)\.(.*)#', $s, $m))
      $s = $m[1].','.preg_replace('#(.)#', '\\1 ', $m[2]);
   return( $s );
}

if((time() > strtotime("04:20")) && (time() < strtotime("06:20")))
{

	WAC_ClearPlaylist($id);
	WAC_SetVolume($id, 50);  //Musik leiser

 	//>>>Script DatumZeitansage einfügen
 	function includeScript($scriptID)
	{
		$s = IPS_GetScript($scriptID);
		include($s['ScriptFile']);
 	}
 
 	//includeScript (12238 /*[Kategorielos\Sprachausgabe\DatumZeitansage]*/);

 	//<<<
 

 	if  ($Temp1 < 0)
  	{
   	//TTS_Speak(19854 /*[Text To Speech USB Speaker]*/, "die aktuelle Aussentemperatur beträgt minus".float2speech( $Temp1, 1)." °",false);
		TTS_GenerateFile(19854 /*[Text To Speech USB Speaker]*/, "die aktuelle Aussentemperatur beträgt minus".float2speech( $Temp1, 1)." °", "C:/IP-Symcon/AussenTemp.WAV", 19);
		WAC_AddFile ($id,"C:/IP-Symcon/AussenTemp.WAV");
  	}
 	else
  	{
   	//TTS_Speak(19854 /*[Text To Speech USB Speaker]*/, "die aktuelle Aussentemperatur beträgt".float2speech( $Temp1, 1)." °",false);
		TTS_GenerateFile(19854 /*[Text To Speech USB Speaker]*/, "die aktuelle Aussentemperatur beträgt".float2speech( $Temp1, 1)." °", "C:/IP-Symcon/AussenTemp.WAV", 19);
		WAC_AddFile ($id,"C:/IP-Symcon/AussenTemp.WAV");
  	}
  	
	WAC_Play(26285 /*[Media Player USB Speaker]*/);
}

Das Thema hatten wir schon mal aber es liegt im Archive und dort kann man nicht mehr antworten, Vielleicht kann jemand die float2speech Function erklären.

Hat niemand eine Idee was man in der float2speech Function ändern muss damit Steffi bei Minustemperaturen auch ein Komma ansagt? Durch probieren komme ich leider nicht weiter.

Hi,

versuchs mal so

$temperatur = number_format($temperatur, 1, ',', '.');

Grüsse
Dave

Wie meinst du das genau? Wenn ich es einfach zwischensetze

$Temp1 = number_format($Temp1, 1, ',', '.');  

sagt Steffi nur die ganzen Zahlen. Weder „Komma“ noch Nachkommastelle(n)

lass das float2speech einfach raus, ich mache das bei mir genau so und es läuft seit jahren wunderbbar…


$Temp1=GetValueFloat(10840 /*[AUSSEN\WETTERSTATION\Garten (KS300-WDE1)\Temperatur]*/);
$Temp1="-12.35"; //test
$id=26285 /*[Media Player USB Speaker]*/;   // ID des Mediaplayers
$Temp1 = number_format($Temp1, 1, ',', '.');  

if((time() > strtotime("04:20")) && (time() < strtotime("06:20")))
{

    WAC_ClearPlaylist($id);
    WAC_SetVolume($id, 50);  //Musik leiser

     //>>>Script DatumZeitansage einfügen
     function includeScript($scriptID)
    {
        $s = IPS_GetScript($scriptID);
        include($s['ScriptFile']);
     }
 
     //includeScript (12238 /*[Kategorielos\Sprachausgabe\DatumZeitansage]*/);

     //<<<
 

     if  ($Temp1 < 0)
      {
       //TTS_Speak(19854 /*[Text To Speech USB Speaker]*/, "die aktuelle Aussentemperatur beträgt minus".float2speech( $Temp1, 1)." °",false);
        TTS_GenerateFile(19854 /*[Text To Speech USB Speaker]*/, "die aktuelle Aussentemperatur beträgt minus".$Temp1 ." °", "C:/IP-Symcon/AussenTemp.WAV", 19);
        WAC_AddFile ($id,"C:/IP-Symcon/AussenTemp.WAV");
      }
     else
      {
       //TTS_Speak(19854 /*[Text To Speech USB Speaker]*/, "die aktuelle Aussentemperatur beträgt".float2speech( $Temp1, 1)." °",false);
        TTS_GenerateFile(19854 /*[Text To Speech USB Speaker]*/, "die aktuelle Aussentemperatur beträgt".$Temp1 ." °", "C:/IP-Symcon/AussenTemp.WAV", 19);
        WAC_AddFile ($id,"C:/IP-Symcon/AussenTemp.WAV");
      }
      
    WAC_Play(26285 /*[Media Player USB Speaker]*/);
}  


einfach noch die zeilen mit TTS_GenerateFile ersetzen und es sollte laufen :slight_smile:

Das habe ich natürlich auch so Probiert. Aber es bleibt dabei, bei Minus werten sagt Steffi kein „Komma“ an.

Aber es stimmt, das number_format ersetzt die float2speech function.

komisch… ich habe es gerade bei mir getestet, Hans (von Ivona) sagt komma werte an…
teste das ganze mal mit einem "echo $Temp1; "
und schau ob da komma steht… ansonsten bin ich auch ratlos…

btw. in deinem „Test“ hast du kein Float sondern einen String :wink:

Mit Echo habe ich natürlich auch getestet. Aber es bleibt dabei ein
12,35 wird von Steffi korrekt als „zwölf komma vier“, ein -12,35 aber als"zwölf vier" ausgesprochen.

Aber was meinst du mit ?

btw. in deinem „Test“ hast du kein Float sondern einen String

PS: Mit String meinst du die „12.35“ Ändert aber auch nichts

das ist ein String

$Temp1="-12.35"; //test

das ist float

$Temp1 = -12.35; //test