Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 16.09.13 22:09 
Hallo,
im Netz habe ich etwas (für mich) Neues gefunden, die Sprachausgabe eines Textes.
Es funktioniert wunderbar mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
   oleVoice: OLEVariant;
procedure rtferzeugen;
begin
...    //Richedit1 wird mit RTF gefüllt
end;
begin
   rtferzeugen;
   oleVoice := CreateOLEObject('SAPI.SpVoice');
   oleVoice.Speak(richedit1.text, 0);
end;

Einziges Problem ist, dass der vorzulesende RTF-Text auch etwas länger sein kann und ich einfach nicht weiß, wie ich die Sprachausgabe unterbrechen kann.
Wer will sich schon minutenlang Text anhören, wenn er ihn langweilig findet? :wink:

Kann mir jemand helfen? Allerdings ahne ich schon, dass die Lösung wohl nicht so einfach ist.
Danke.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein


Zuletzt bearbeitet von Mathematiker am Di 17.09.13 22:44, insgesamt 1-mal bearbeitet
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 16.09.13 22:14 
Moin Mathematiker,

ich habe im Internet[1] die Methoden pause und resume gefunden. Vielleicht tun die ja, was sie sollen, testen konnte ich das leider nicht.

Bis dann,

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 16.09.13 22:24 
Hallo,
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
ich habe im Internet[1] die Methoden pause und resume gefunden.

Danke.
Aber kaum hatte ich auf Absenden des ersten Eintrags gedrückt, kam mir die "Erleuchtung".
Mit einer Variablen sprachausgabe und der zeilenweise Abarbeitung des RTF-Textes funktioniert es:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
      sprachausgabe:=true;
      rtferzeugen;
      oleVoice := CreateOLEObject('SAPI.SpVoice');
      i:=0;
      repeat
        oleVoice.Speak(richedit1.lines[i], 0);
        application.processmessages;  //erneuter Klick auf den Startschalter setzt sprachausgabe:=false;
        inc(i);
      until (i>richedit1.lines.count-1or (not sprachausgabe);

Ich hätte vielleicht länger nachdenken müssen. :autsch:
Warum muss ich eigentlich nicht oleVoice.free am Ende ausführen? Versuche ich es, fliegt mir das Programm um die Ohren.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 16.09.13 22:28 
Funktioniert das mit der Pausierung trotzdem? Wenn dich Sprachausgabe schon überrascht, solltest du die Spracherkennung ausprobieren. ;)

Zum Thema Freigabe von OLE-Objekten: stackoverflow.com/qu...sing-createoleobject

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 16.09.13 22:41 
Hallo,
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
Funktioniert das mit der Pausierung trotzdem?

Nein, funktioniert doch noch nicht. Ich bin wohl heute zu schnell euphorisch. :(
Die vielen Steuerzeichen im RTF-Text sorgen dafür, dass das Vorlesen in jedem Satz mehrfach stoppt. Klingt besch...
Ich habe deshalb auf eine Stringliste umgestellt. Klingt besser.
Ist aber die Zeile lang, nervt es, da man es erst abbrechen kann, wenn eine Zeile komplett vorgelesen ist. Und das dauert!

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
Wenn dich Sprachausgabe schon überrascht, solltest du die Spracherkennung ausprobieren. ;)

Danke, sehe ich mir an.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 17.09.13 01:14 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Mit einer Variablen sprachausgabe und der zeilenweise Abarbeitung des RTF-Textes funktioniert es:

Versuch's mal mit "skip": msdn.microsoft.com/e...08%28v=vs.85%29.aspx

Für diesen Beitrag haben gedankt: Mathematiker
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 17.09.13 02:02 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 17.09.13 09:30 
Hallo,
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe mir mal die Typenbibliothek SpeechLib_TLB angesehen, mich ein bisschen herumgespielt und voilà:
ausblenden Delphi-Quelltext
1:
2:
oleVoice.Speak(richedit1.text, $00000001); // abspielen
oleVoice.Speak(''$00000002); // unterbrechen


Mit der Konstanten $00000001 passiert bei mir gar nichts.
Das liegt daran, dass ich mir wohl erst einmal SpeechLib_TLB besorgen muss. Ich denke, dass es dann funktioniert. Danke.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 17.09.13 13:16 
Das geht auch ohne:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button8Click(Sender: TObject);
type
  SpeechVoiceSpeakFlags = TOleEnum;
const
  SVSFDefault = 0;
  SVSFlagsAsync = 1;
  SVSFPurgeBeforeSpeak = 2;
var i : Integer;
begin
   oleVoice := CreateOLEObject('SAPI.SpVoice');
for I := 0 to 3 do
BEGIN
   oleVoice.Speak('Hallo'0);
   Sleep(1000);
END;
for I := 0 to 30 do Memo1.lines.add('hallo');

   oleVoice.Speak(Memo1.text, 1);
   Sleep(1000);

   oleVoice.Speak('Hallo'2); // stoppt die Ausgabe nach 1x Hallo, statt 31x Hallo
end;

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 17.09.13 15:27 
Hallo,
Danke Allen für die zahlreiche Hilfe.
Als erstes habe ich die Sprachausgabe in mein Fachwörterbuch www.entwickler-ecke....ewtopic.php?t=111548 integriert und ich finde es ziemlich "cool".
Mal sehen, wo so eine Sprachausgabe noch interessant wäre? Vielleicht 1 Million Stellen von Pi vorlesen lassen? Man gönnt sich ja sonst nichts. :lol:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 17.09.13 15:30 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Mal sehen, wo so eine Sprachausgabe noch interessant wäre? Vielleicht 1 Million Stellen von Pi vorlesen lassen? Man gönnt sich ja sonst nichts. :lol:

Yea, darauf hat die Welt gewartet. Endlich muss ich nicht mehr selbst Schäfchen zum Einschlafen zählen. :zustimm:

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 17.09.13 16:02 
oder:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
for I := 0 to 1000000 do
BEGIN
   oleVoice.Speak('Sie liebt mich, sie liebt mich nicht'0);
   Sleep(1000);
END;
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 17.09.13 16:07 
Hallo,
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Endlich muss ich nicht mehr selbst Schäfchen zum Einschlafen zählen. :zustimm:

schaefchen
Dein Wunsch war mir ein besonderes Bedürfnis. Im Anhang findest Du Dein zukünftiges Lieblingsprogramm: "Schäfchen zählen". :lol:

Beste Grüße
Mathematiker
Einloggen, um Attachments anzusehen!
_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Martok
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 17.09.13 16:19 
Hey, super, aaaber :bawling: Funktioniert leider bei mir nicht.

Auf Englisch bekomme ich diese Meldung:
---------------------------
Schäfchen zählen
---------------------------
OLE error 80045039.
---------------------------
OK
---------------------------

Und auf Deutsch:
---------------------------
Schäfchen zählen
---------------------------
Floating point division by zero.
---------------------------
OK
---------------------------

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 17.09.13 16:30 
Hallo,
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Hey, super, aaaber :bawling: Funktioniert leider bei mir nicht.

Mist! :autsch:
Habe ich schon vermutet. Das hat vielleicht etwas mit der jeweiligen Windows-Variante zu tun. Ich habe Win8.
Ich hänge mal den Quelltext an.
Wahrscheinlich muss Du beim Compilieren das GIF-Bild 'rauswerfen, da Du die Unit RXGif vielleicht nicht hast. Oder entsprechend ersetzen.

Ein sich ärgernder Mathematiker :motz:
Ich hatte mich so gefreut. :cry:

Nachtrag: Ich habe es gerade unter Win 7 getestet und es funktioniert nicht! :evil:
Einloggen, um Attachments anzusehen!
_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 17.09.13 16:46 
Ich hab es mal ein bisschen abgeändert. Ich hab scheinbar nur Englisch installiert. Wenn ich die Abfrage auf die Sprache rauswerfe, funktioniert es. Allerdings nur unter meinem Windows 7 32 bit. Unter meinem Windows 7 64-bit funktioniert es nicht.
Ich häng Dir mal meine geänderte Version an, vielleicht hilft es Dir.
Einloggen, um Attachments anzusehen!
_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 17.09.13 16:51 
Hallo,
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Ich häng Dir mal meine geänderte Version an, vielleicht hilft es Dir.

Danke.
Den Ärger macht also die Stimmenauswahl
ausblenden Delphi-Quelltext
1:
olevoice.GetVoices.item(0);					

Ich werde wohl erst einmal testen müssen, ob mehrere Stimmen installiert sind. Es ist trotzdem ärgerlich.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 17.09.13 16:58 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Den Ärger macht also die Stimmenauswahl

Ja, unter der 32-bit version geht es dann. Aber unter der 64-bit Version hab ich es nicht ans Laufen gebracht.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 17.09.13 17:04 
Hallo,
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Ja, unter der 32-bit version geht es dann. Aber unter der 64-bit Version hab ich es nicht ans Laufen gebracht.

Schaffe ich auch nicht.
Zuerst habe ich
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    Voices := olevoice.getvoices;
    if voices.count>1 then
    begin
      if radiobutton1.checked
      then
        olevoice.Voice := voices.item(0)
      else
        olevoice.Voice := voices.item(1);
    end;

versucht, ohne Ergebnis.
Das vollständige Entfernen von getvoice brachte unter Win 7-64 auch bei mir nichts. Er gibt nur einen Fehler aus und das war's.
Ich wollte mich doch heute abend entspannen. Wird nun nichts. Fehler suchen ist angesagt.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 17.09.13 18:47 
Bei WIN 8 ist Hedda als DEUTSCH installiert und zusätzlich eine ENGLISCHE Sprecherin.

"Sie haben Microsoft Hedda Desktop - German als Standardstimme des Computers ausgewählt."