Sprachausgabe benutzen

Hallo Tonic1024!
Gehen wir mal davon aus, das ich am Tag nicht mehr als 5 Mails bekomme und ich vorsichtshalber 10 von diesen .Wav datein erstellt habe
„Sie haben (…) Emails im Postfach“.
Kann man es nicht irgendwie hin bekommen, das man in ein Scrpt, welches die Menge der Mails zählt, sagt er es soll bei 4 Mails die 4. .wav datei abspielen?
Keine Ahnung ob es geht, wollte nur mal nachfragen.
Denn ich habe mir tatsächlich nöchmal AT&T installiert und ausprobiert, aber im Vergleich kommt AT&T meiner meinung nicht an die Ausspeche und die Betonung von Linguatec ran. (Auußer Bedienkomfort)
Deshalb würde ich lieber bei Linguatec bleiben. Auch wenn es etwas Komplizierter wird.
Soetwas richtet man ja im Regelfall nur einmal ein. :slight_smile:
Gruß
Xanon

Andererseits:
falls du auf den Geschmack kommst Sprachausgabe zu betreiben könntest du dir auch die Temperaturen, die Luftfeuchte innerhalb der Wohnung, komplexe sprachgestützte Fernbedienungen usw… ausdenken. Das wird dann mit vorgenerierten Wav-Files etwas komplizierter…

Gruss,
Olli

Da hast du natürlich recht.
Was empfiehlst du mir?
Was setzt du oder die mehrzahl der User hier ein?
Ich bin in sachen IPS ein absoluter Newbie.
Habe (bis jetzt) ja auch erst 3 Steckdosen, 1 Fernbedienung und 1 Taster.
Wird aber nächsten Monat erweitert. (FREU)
Denn ich hatte am Anfang garnicht gewußt, das in IPS so ein Potential steckt.
Aber ich find das sooooooo Cool.
Gruß
Xanon

Wer interesse daran hat, nur eine Standard-Nachricht und Zahlen vorzulesen, könnte die Sound Dateien vom Asterisk VOIP Telefon System nehmen. Da es Open Source ist nehme ich an, dass es von Privatanwendern wie wir genutzt werden kann. Ist auch gleich in allen Sprachen erhältlich.

Hallo zapp!

…könnte die Sound Dateien vom Asterisk VOIP Telefon System nehmen

Ich benötige ja keine Sounddatein.
Die kann ich mir ja selbst erstellen.
Ich meinte eine Möglichkeit, um mir die summe der Mails vorsprechen zu lassen.
Also, wenn ich 3 Mails habe, das ich das in einem Script verfassen könnte (Keine Ahnung wie ich das mache, aber die frage ist ja ob es so ein script vielleicht schon gibt, oder wie ich es estellen könnte.)
Also … Mail ist angekommen.
„Sie haben 1 neue E-Mail“
Script 1 mit der 1.wav datei wird ausgelöst.

„Sie haben 2 neue Mails“
Script 2 mit der 2.wav datei wird ausgelöst.

oder so ähnlich.
Gruß
Xanon

Hallo Xanon,

Hier mein Script mit dem ich so etwas mache. Die Zeiten für das IPS_Sleep musst du anpassen:


//**  SAY THE NUMBER OF MESSAGES  **//

$soundFilePath = ...; // Hier der Pfad zu deinen Sound Dateien;
$nbOfNewMails = ...; // Hier die Anzahl der neuen E-mails durch z.B. externe Funktion lesen

say("youhave.wav",1100);

if ($nbOfNewMails == 0) {
   say("no.wav",600);
} else if ($nbOfNewMails > 0) {
   sayNumber($nbOfNewMails );
}

if ($nbOfNewMails > 1) {
   say("messages.wav",2500);
} else {
   say("message.wav",2500);
}


function sayNumber($number, $sayLeadingZero=false) {
   
   $digits = $number % 10;
   $decimals = $number - $digits;
   if ($decimals > 10) {
        say($decimals.".wav",500);
        say($digits.".wav",700);
   } else {
        if ($sayLeadingZero and ($number[0] == 0)) {
            say("oh.wav",300);
        }
        say($number.".wav",700);
   }
}

function say($wavFileName, $timeSleep) {
   global $soundFilePath;
   
   ISDN_PlayWave(56641, $soundFilePath.$wavFileName);
   IPS_Sleep((int)$timeSleep);
}


Gruss,

Zapp

Wenn du nicht mehr willst reicht das aus… Aber das ist dann quasi auch schon alles was du bei linguatec bekommen kannst. Der Trick besteht ja darin sich das Wetter oder das Fernsehprogramm aus dem Internet zu parsen (oder woher auch immer) und sich dann vorlesen zu lassen…

Man könnte jetzt dynamisch ein Word-Dokument öffnen lassen und den Text dort automatisch einfügen und vorlesen lassen… Aber was ist denn das bitte für ein Aufwand… Bis Word offen ist bin ich nicht nur schon durch die Tür sondern durch den Flur, Durch die Küche, hab geduscht und lieg auf dem Sofa… :frowning:

Sollte ich mich dem Thema nochmal widmen werde ich mich hier umsehen, auch denn das Java voraussetzt und ich lieber mit linguatec gearbeitet hätte. Und irgendwo hatte ich auch schon mal eine Portation von Festival auf Windows-Plattform gesehen.

Toni

Als erstes mal möchte ich mich auf diesem Weg mal bei euch bedanken, das ihr jemandem wie mir (absoluter Newbie) hier so unter die Arme greift.
Find ich echt SUPER, so eine Community.
Ist man leider nicht überall so gewohnt.
Also Vielen DANK!

@ Zapp
Vielen dank für dein Scipt. werde es mal ausprobieren.

@Tonic 1024

Der Trick besteht ja darin sich das Wetter oder das Fernsehprogramm aus dem Internet zu parsen (oder woher auch immer) und sich dann vorlesen zu lassen…

ACHSO ?!?
An so eine möglichkeit, habe ich nochgarnicht gedacht.
Aber ich habe nun schon die Klara von AT&T in der Version 1.4 mit 16Khz, Die RSSolo4GermanSteffi und die Loquendo TTS mit Stefan und Ulrike ausprobiert.
Aber wenn ich diese als Stadard bei Windows eingebe, hört such das immer so an als wenn sie einige Worte verschlucken bzw. als wenn sich da 2 Stimmen um ein Wort streiten. (Weiß nicht wie ich es andere beschreiben soll)
Ist aber nicht so das ich komisch schreibe.
Ich habe auch schon die Worte umgedreht oder hir und da mal mit einem anderen Buchstaben versehen. Aber das kann ich ja bei einem geparsendem Text nicht machen.
Im vergleich zu Linguatec hört sich das halt extrem Computer-technisch an.
Habe auch schonmal gedacht, das bei meinen Einstellungen etwas verkehrt ist oder es einen Patch gibt. Aber einstellen kann man da nicht viel, außer die Geschwindigkeit. Einen Patch habe ich auch nicht gefunden.
Hast du vielleicht sonst noch eine Idee was ich vielleicht verkehrt machen könnte?
Oder ist es einfach NORMAL, das sich die Stimmen so komisch anhören?
Übrigends, wenn ich mir die Texte Online, also auf den Seiten der Hersteller vorlesen lasse, hört sich das nicht so an, als wenn sich da zwei Stimmen überschneiden.
Gruß
Xanon

Genau da ligt ja das Problem…

Linguatec hat das bessere Produkt - keine Frage. Die sind nur zu nix ausser MS Office kompartiebel… Ich bin davon überzeugt, das jemand der dynamisch eine Sounddatei aus Word-Text erzeugen kann, sie auch aus jedem anderen Text erzeugen kann… Die wollen nur nicht. Seltsame Marktstrategie wenn ihr mich fragt…

Hallo Zapp!
Wollte nochmal nachfragen, ob du mir das Scipt nochmal erklären kannst.
Ist mir echt etwas unangenehm, aber ich kenne mich mit Scripten noch nicht so gut, aus.
Kannst du mir vielleicht nur kanz kurz nochmal an das Script eintagen, was da z.B. rein kommt? Bei manchen ist es mir ja klar, da hast du ja auch z.B.

//Hier den Pad zu deinen Sounddatein.

Aber was heißt das nächste ?

$nbOfNewMails = …; // Hier die Anzahl der neuen E-mails durch z.B. externe Funktion lesen

Soll da der script name rein, welches meine Mails überprüft?
Nur der Name?
Und was ist denn bitte IPS Sleep?

Die Zeiten für das IPS_Sleep musst du anpassen

Wann setzt man dieses Script ein, wenn man nachhause kommt, und man wissen will ob oder wieviele Mails man hat, oder immer um zu wissen, wenn Mail rein kommen?
Habe im Scipt mal alles durch =…= makiert.
Sorry, das ich noch so unwissend bin, aber ich kann diese Scripte einfach nochnicht lesen.

//** SAY THE NUMBER OF MESSAGES **//

$soundFilePath = …; // Hier der Pfad zu deinen Sound Dateien; = klar!=
$nbOfNewMails = …; // Hier die Anzahl der neuen E-mails durch z.B. externe Funktion lesen =?? Name des Scrips, welches ich einsetze???=

say(„youhave.wav“,1100); =Sie haben.wav?=

if ($nbOfNewMails == 0) {
say(„no.wav“,600); =Keine.wav=
} else if ($nbOfNewMails > 0) { =Wenn keine Mail, springe
sayNumber($nbOfNewMails ); =Spinge zum befehl $nbOfNewMails=
}

if ($nbOfNewMails > 1) { =Wenn eine Mail, sage:
say(„messages.wav“,2500); nochmal Sie haben???=
} else { =???=
say(„message.wav“,2500); =wann, welche .wav???=
}

function sayNumber($number, $sayLeadingZero=false) {

$digits = $number % 10; =10% für Lautstärke?=
$decimals = $number - $digits; =ab Hier kapiere ich garnichts mehr,
if ($decimals > 10) { was ich wo eintragen soll.???=
say($decimals.".wav",500);
say($digits.".wav",700);
} else {
if ($sayLeadingZero and ($number[0] == 0)) {
say(„oh.wav“,300);
}
say($number.".wav",700);
}
}

function say($wavFileName, $timeSleep) { =Und was ist das???=
global $soundFilePath;

ISDN_PlayWave(56641, $soundFilePath.$wavFileName);
IPS_Sleep((int)$timeSleep);
}

Ich hoffe ich mache nicht zuviel arbeit.
Danke im vorraus.
Gruß
Xanon

Hallo Xanon,

Eine sehr gutes Tutorial von Toni zum PHP Script schreiben findest du hier. Da werden auch funktionen beschrieben.

Infos zu IPS Befehlen (z.B. IPS_Sleep) findest du im WIKI und für PHP Befehle auf der http://www.php.net Seite. % ist der Modulus und wird z.B. hier beschrieben.

Ich werde dir eine kleine Beschreibung zu meinem Script vorbereiten.

Gruss,

Zapp

Hallo Zapp!
Vielen dank für deine Unterstützung!
Gruß
Xanon

@Xanon

eine Funktion zum lesen der Email findest Du Hier

Jürgen

Danke, aber das Script setze ich schon ein, um meine Mails zu Checken.
Ich möchte jetzt doch gern mal dieses TTS ausprobieren.
Habe also das Scrip:

<?
/*


IP-SYMCON Event Scripting


File : Outlook…php
Trigger :
Interval :
*/
//Connect POP3-Server
function pop3_open($server, $port)
{
global $POP3_GLOBAL_STATUS;
$pop3 = fsockopen($server, $port);
if ($pop3 <= 0) return 0;
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

return $pop3;
}

//User-Authentifizierung: USERNAME
function pop3_user($pop3, $user)
{
global $POP3_GLOBAL_STATUS;
fputs($pop3, "USER $user
");
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

return 1;
}

//User-Authentifizierung: PASSWORT
function pop3_pass($pop3, $pass)
{
global $POP3_GLOBAL_STATUS;
fputs($pop3, "PASS $pass
");
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

return 1;
}

//POP3-Mailliste laden
function pop3_list($pop3)
{
global $POP3_GLOBAL_STATUS;
fputs($pop3, "LIST
");
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

$i = 0;
while(substr($line=fgets($pop3, 1024),0,1)<>".")
{
$articles[$i] = $line;
$i++;
}
$articles[„count“] = $i;
return $articles;
}

//POP3-Verbindung schlieen
function pop3_quit($pop3)
{
global $POP3_GLOBAL_STATUS;
fputs($pop3, "QUIT
");
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

return 1;
}

//Hauptscript
$pop3 = pop3_open(„XXX“,„110“); //HIER
if (!$pop3)
echo "[ERROR] Failed to connect
";

if (!pop3_user($pop3, „XXX“)) //HIER
echo "[ERROR] Username failed!
";

if (!pop3_pass($pop3, „XXX“)) //HIER
echo "[ERROR] PASS failed!
";

$articles = pop3_list($pop3);
if (!$articles)
echo "[ERROR] LIST failed!
";

if (!pop3_quit($pop3))
echo "[ERROR] Close POP3 failed!
";

//hier die Anzahl der „gezhlten“ Nachrichten in die IPS-Variable ablegen
SetValueInteger(„Outook_Variable“,(integer)$articles[„count“]);
echo „es sind „.$articles[„count“].“ Nachrichten auf dem Server“;

TTS_Speak(12367, „Hello World“);

?>

Ganz unten habe ich nun die Instance für das TTS modul eingegeben. aber wie sage ich ihm nun, das es dies benutzen soll und vorallem zählen?
Ich weiß also noch nicht genau, wie ich diese jetzt verbinde.
Danke!
Gruß
Xanon

Hallo,
ich mache es so

//hier die Anzahl der „gezählten“ Nachrichten in die IPS-Variable ablegen
SetValueInteger(„Anzahl_Neue_Mails“,(integer)$articles[„count“]);
echo „es sind „.$articles[„count“].“ Nachrichten auf dem Server“;
$text_ist = GetValueInteger(„Anzahl_Neue_Mails“);
//$text_ist = sprintf(number_format($text_ist, 1, „,“, „.“ ));

TTS_SPEAK(15994,„es sind“ .$text_ist.„Nachrichten auf dem Server“);

versuch es mal, bei mir klappt es gut

cu uwe

Hallo Uwe.
Erstmal Vielen Dank für deine Hilfe.
Hat geklappt.
Zumindest höre ich schonmal die Stimme!
Hört sich zwar nicht ganz so gut an, wie mit der Stimme von linguatec aber OK.
Aber…
Ich habe folgendes im Sinn:
Ich möchte mich per Sprachausgabe im Wohnzimmer daüber informieren lassen, wenn neue Nachrichten eingegangen sind.
Also bei keiner neuen Nachricht soll er still sein, und wenn eine kommt, soll er los reden.
Ich bekomme es aber nur hin, das er zwar in einer angegebenen Zeit meine Mails abruft, aber dann auch sagt " Sie haben keine Neuen Nachrichten im Postfach".
Das dürfte nach einigen Tagen ganz schön nerven.
Ist es nicht möglich, das man das so einstellt, das er mir nur bei neuen Nachrichten bescheid gibt?
Habe es schon über die Script Events Probiert, aber leider ohne Erfolg.
Hier nochmal der Code: Was muß ich ändern?

/*


IP-SYMCON Event Scripting


File : Outlook_Check.ips.php
Trigger :
Interval :
*/
//Connect POP3-Server
function pop3_open($server, $port)
{
global $POP3_GLOBAL_STATUS;
$pop3 = fsockopen($server, $port);
if ($pop3 <= 0) return 0;
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

return $pop3;
}

//User-Authentifizierung: USERNAME
function pop3_user($pop3, $user)
{
global $POP3_GLOBAL_STATUS;
fputs($pop3, "USER $user
");
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

return 1;
}

//User-Authentifizierung: PASSWORT
function pop3_pass($pop3, $pass)
{
global $POP3_GLOBAL_STATUS;
fputs($pop3, "PASS $pass
");
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

return 1;
}

//POP3-Mailliste laden
function pop3_list($pop3)
{
global $POP3_GLOBAL_STATUS;
fputs($pop3, "LIST
");
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

$i = 0;
while(substr($line=fgets($pop3, 1024),0,1)<>".")
{
$articles[$i] = $line;
$i++;
}
$articles[„count“] = $i;
return $articles;
}

//POP3-Verbindung schlieen
function pop3_quit($pop3)
{
global $POP3_GLOBAL_STATUS;
fputs($pop3, "QUIT
");
$line = fgets($pop3, 1024);
$ergebnis=substr($line,1,2);
if($ergebnis<>„OK“)
return 0;

return 1;
}

//Hauptscript
$pop3 = pop3_open(„XXX“); //HIER
if (!$pop3)
echo "[ERROR] Failed to connect
";

if (!pop3_user($pop3, „XXX“)) //HIER
echo "[ERROR] Username failed!
";

if (!pop3_pass($pop3, „XXX“)) //HIER
echo "[ERROR] PASS failed!
";

$articles = pop3_list($pop3);
if (!$articles)
echo "[ERROR] LIST failed!
";

if (!pop3_quit($pop3))
echo "[ERROR] Close POP3 failed!
";

//hier die Anzahl der „gezhlten“ Nachrichten in die IPS-Variable ablegen
SetValueInteger(„Anzahl_neue_Mails“,(integer)$articles[„count“]);
echo „es sind „.$articles[„count“].“ Nachrichten auf dem Server“;
$text_ist = GetValueInteger(„Anzahl_Neue_Mails“);
//$text_ist = sprintf(number_format($text_ist, 1, „,“, „.“ ));

TTS_SPEAK(63149,„es sind“ .$text_ist.„Nachrichten auf dem Server“);
?>

  1. Du hast folgendes zu dem Script hinzu gefügt:

$text_ist = GetValueInteger(„Anzahl_Neue_Mails“);
//$text_ist = sprintf(number_format($text_ist, 1, „,“, „.“ ));

in der 2. Spalte hast du ein // gesetzt. Warum? Ich habe gelesen, das man dies nur tut, um ein Kommentar hinein zu schreiben.
Aber das sieht mir eher nach einem Code aus. Oder habe ich jetzt ganz den Faden berloren?

Ich weiß einfach nicht wie das geht.
Gruß
Xanon

Ich habe das ganze mal etwas verschoben… Hatte seit 2 Seite nichts mehr mit dem Thema zu tun.

paresy

OK, Sorry!
Bin wohl etwas vom Thema abgekommen.
Gruß
Xanon

So würde er bei 0 Nachrichten nix sagen:

//hier die Anzahl der „gezhlten“ Nachrichten in die IPS-Variable ablegen
SetValueInteger(„Anzahl_neue_Mails“,(integer)$arti cles[„count“]);
echo „es sind „.$articles[„count“].“ Nachrichten auf dem Server“;
$text_ist = GetValueInteger(„Anzahl_Neue_Mails“);
//$text_ist = sprintf(number_format($text_ist, 1, „,“, „.“ ));

if ($text_ist > 0){
TTS_SPEAK(63149,„es sind“ .$text_ist.„Nachrichten auf dem Server“);
}

Er sagt also nur was wenn mehr als 0 Mails vorliegen.

Dadurch wird die Zeile Auskommentiert, also nicht mehr abgearbeitet.