Hallo,
Nun noch eine Frage für Spezialisten.
Spracheingabe:
Gibt es eine Möglichkeit das Programm (die Form) zu minimieren.
Dabei verliert ja das TEDIT den Focus und die Spracheingabe funktioniert nicht mehr.
Spracheinagbe mit dem Tastencode WIN+H aktiviert.
Sprachausgabe
Und noch ne Frage, wie kann man der Sprachausgabe eine andere Stimme geben?
Sprachausgabe mit
SpVoice := ComObj.CreateOleObject('SAPI.SpVoice');
SpVoice.Speak(Textout, 0);
Danke und Gruß
Jürgen
Lazarus mit Sprach Ein- und Ausgabe
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 375
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Lazarus mit Sprach Ein- und Ausgabe
Die Windows-Diktat-Funktion überwacht den Fokuswechsel und bricht sofort ab, wenn das ursprüngliche Control den Fokus verliert.juelin hat geschrieben: Do 22. Mai 2025, 10:30 Gibt es eine Möglichkeit das Programm (die Form) zu minimieren.
Dabei verliert ja das TEDIT den Focus und die Spracheingabe funktioniert nicht mehr.
Ich vermute, dass dies zwei Gründe hat: der User quatscht nicht unbemerkt in ein falsches (gewechseltes) Feld - und eine Malware kann nicht unbemerkt eine Stimmaufnahme kapern. Ich denke, dass man es nur schwerlich oder gar nicht austricksen kann.
Falls es dir weiterhilft, könntest du versuchen das Fenster quasi unsichtbar zu machen, aber nicht über .Visible Eigenschaft, sondern über Transparenz.
Hier ein kleines Schnipsel für Transparenz aus meinem Programm. Bei Bedarf müsstest du es aber selber für dein Form anpassen.
Code: Alles auswählen
uses Windows;
procedure TTransparentForm.FormCreate(Sender: TObject);
var Style: LongInt;
begin
Style := GetWindowLong(Handle, GWL_EXSTYLE);
Style := Style or WS_EX_LAYERED;
SetWindowLong(Handle, GWL_EXSTYLE, Style);
SetLayeredWindowAttributes(Handle, 0, 1{Deckkraft 0..255}, LWA_ALPHA); // muss mindestens 1 Deckkraft haben, damit es Events erhält!
end;
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 375
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Lazarus mit Sprach Ein- und Ausgabe
Eine andere Stimme geht, siehe unten meine erweiterte Funktion, aber nur die Standardstimme (Index 0) spricht deutsch, zumindest bei mir unter Windows 10.juelin hat geschrieben: Do 22. Mai 2025, 10:30 wie kann man der Sprachausgabe eine andere Stimme geben?
In meinem Windows werden noch zwei weitere Stimmen bereitgestellt, aber englisch! (Index 1 = männlich englisch, 2 = weiblich englisch).
Vermutlich kann man im TTS-System (Text to Speech) weitere Stimmen nachinstallieren, aber das habe ich nicht ausprobiert.
Code: Alles auswählen
uses Variants, ComObj;
function SpeakText(const Text: String): Boolean;
var
SpVoice: OleVariant;
begin
Result := true;
try
SpVoice := ComObj.CreateOleObject('SAPI.SpVoice'); // https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms723602(v=vs.85)
except
Result := false; // ShowMessage('Could not find or start SAPI.SpVoice');
Exit;
end;
ShowMessage('verfügbare Stimmen Index 0..'+IntToStr(SpVoice.GetVoices.Count-1)); // bei mir 0..2
SpVoice.Voice := SpVoice.GetVoices.Item(0); // Index 0 = weibliche deutsche Stimme, weitere Stimmen englisch!
SpVoice.Volume := 90; // Lautstärke 0..100
SpVoice.Rate := 0; // -10..10, which represent the slowest and the fastest speaking rates
SpVoice.Speak(Text, 0);
end;
- juelin
- Beiträge: 267
- Registriert: Sa 24. Jul 2021, 18:03
- OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Mannheim
Re: Lazarus mit Sprach Ein- und Ausgabe
Hallo Jorg3000,
wie immer toll geholfen. Danke.
Das mit dem minimieren (Fokus) hatte ich mir schon gedacht.
Aber habe trotzdem mal gefragt.
Müsste eigenlich gehen, weil WIN+STRG+S ja auch den Focus verliert
und trotzdem weiter läuft.
Ich wollte halt mein Programm als Batch laufen lassen.
Zur Stimme, das mit dem SpVoice.GetVoices.Item(0) hatte ich auch schon gefunden.
Aber bei mir geht nur 0=weibliche Stimme deutsch und 1=weibliche Stimme englisch.
Ich hätte ber gerne auch eine männliche Stimme in deutsch gehabt.
Habe schon im Internet gesucht (den ganzen Nachmitag) aber nix gefunden mit der SAPI.
Habe nur gefunden was mit Azure von Mikrosoft.
Kostet aber Geld und ich bin nicht sicher ob damit auch die SAPI läuft.
Na ja, so ist es.
Alles Gute und Gruß
Jürgen
PS In Einstellungen -> Barrierefreiheit -> Sprachausgabe kann man zwar eine Stimme einstellen,
aber die zieht nicht in meinem Lazarusprogramm. Geht wahrscheinlich nur in Office.
wie immer toll geholfen. Danke.
Das mit dem minimieren (Fokus) hatte ich mir schon gedacht.
Aber habe trotzdem mal gefragt.
Müsste eigenlich gehen, weil WIN+STRG+S ja auch den Focus verliert
und trotzdem weiter läuft.
Ich wollte halt mein Programm als Batch laufen lassen.
Zur Stimme, das mit dem SpVoice.GetVoices.Item(0) hatte ich auch schon gefunden.
Aber bei mir geht nur 0=weibliche Stimme deutsch und 1=weibliche Stimme englisch.
Ich hätte ber gerne auch eine männliche Stimme in deutsch gehabt.
Habe schon im Internet gesucht (den ganzen Nachmitag) aber nix gefunden mit der SAPI.
Habe nur gefunden was mit Azure von Mikrosoft.
Kostet aber Geld und ich bin nicht sicher ob damit auch die SAPI läuft.
Na ja, so ist es.
Alles Gute und Gruß
Jürgen
PS In Einstellungen -> Barrierefreiheit -> Sprachausgabe kann man zwar eine Stimme einstellen,
aber die zieht nicht in meinem Lazarusprogramm. Geht wahrscheinlich nur in Office.