[gelöst] API für Sprache

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
paweld
Beiträge: 91
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: API für Sprache

Beitrag von paweld »

Nach dem Inhalt der Konfigurationsdatei ist '3.3.1' ein Alias für trunk/main:

Code: Alles auswählen

[ALIASfpcBRANCH]
trunk.gitlab=trunk
3.3.1.gitlab=trunk
aber Vorsicht, es gibt auch ein 3.3.1-Tag im Repository für eine Version, die mehr als 5 Jahre alt ist.
Grüße / Pozdrawiam
paweld

Benutzeravatar
juelin
Beiträge: 290
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: API für Sprache

Beitrag von juelin »

was mich auch stutzig macht ist:
ich habe ja Lazarus vom Internet downgeloaded und installiert.
Da habe ich Lazarus Version 3.8 drin
Im GitLab ist nur bis Lazarus 3.6 drin.
Gruß
Jürgen

Benutzeravatar
theo
Beiträge: 10916
Registriert: Mo 11. Sep 2006, 19:01

Re: API für Sprache

Beitrag von theo »

Im fpcupdeluxe hast du sogar 4.99, aber das sind nur Aliase für "trunk".
"Stable" ist derzeit 3.6.

Benutzeravatar
juelin
Beiträge: 290
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: API für Sprache

Beitrag von juelin »

Hallo alle zusammen,
erst nochmals ganz großen Dank an theo und af0815,
ohne Euch wäre ich nie soweit gekommen wie ich heute bin.
Ich möchste Euch nun meine Erfahrung mitteilen.
Es geht um Text-To-Speech
Ich wollte eigentlich die männliche Stimma Stefan einstellen.
Speech stellt mir 7 Stimmen zur Auswahl (siehe bild2).
Wenn ich im Systemeinstellungen->Barrierefreiheit->Sprachausgabe die
Spachausgabe anschalte (siehe bild3)
dann liest er mir vor und ich kann jede der 7 Stimmen auswählen.
Wenn ich aber in meinem Lazarusprogramm mit der SpeechAPI (SAPI) arbeite
kann ich mit dem Befehl: SpVoice.Voice:=SpVoice.GetVoices.Item(0);
nur zwischen 0 und 1 wählen. Wobei
0 = die Stimme Microsoft Hedda Desktop - German
1 = die Stimme Microsoft Zira Desktop - English (United States)
ist.
Es gehen mit SAPI nur Stimmen die Desktop im Namen haben.
Die Stimme Microsoft Stefan - German (Germany) bekomme ich nicht in SAPI.

Ich hoffe damit könnt Ihr was anfangen.
Keine Ahnung warum das so ist.

Gruß
Jürgen
Dateianhänge
bild3.jpg
(171.68 KiB) Noch nie heruntergeladen
bild2.jpg
bild2.jpg (34.22 KiB) 554 mal betrachtet

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6845
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: API für Sprache

Beitrag von af0815 »

Kannst du ein Testprogramm inkl. der TLB mal hochladen/veröffentlichen (nur Source) damit man sich was ansehen und Testen kann. So kann ich das nur im meiner ermatteten Glaskugel ansehen und vorstellen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Beiträge: 290
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: API für Sprache

Beitrag von juelin »

hallo af0815,
danke für Deine Antwort.
Anbei eon Demoprogramm HAL
Die Procedure wo es drauf ankommt ist SpeakText(const Textout: string)
versuch mal hier eine andere Stimme als im Namen Desktop zu nehmen.
Der Stimmwechselbefehl ist SpVoice.Voice:=SpVoice.GetVoices.Item(0);
indem Du die Nummer von GetVoices.Item(0) änderst.
Wenn die Ansage: "bitte sagen sie etwas" kommt ist sagenaus immer = 0
Und nun viel Spass.
Danke und Gruß
Jürgen
Dateianhänge
hal.zip
(2.47 MiB) 112-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6845
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: API für Sprache

Beitrag von af0815 »

Ich habe mir einmal mühsam das herausextrahiert, was wichtig ist. Die komischen pl_* sind unnötig (und ich will generell keine Units die mit pl_ anfangen) und lassen sich bei mir auf Lazarus64 nicht kompilieren. Und auch das ganze ZEOS ist für ein Beispiel mehr als störend. Siehe dem Beispiel was ich angehängt habe, da ist alles auf ein Minimum reduziert.

Auch auf meinem System sind nur 2 Sprachen verfügbar und mehr werden über das Interface auch nicht zur Verfügung gestellt. Man sieht es, wenn man das Interface nach der Anzahl der Einträge fragt (Abfrage über Count der Auflistung). Es werden nicht mehr als die zwei gelistet. Egal was du irgendwo in den wirren von Windows 11 (10) einstellst.
Anzahl Sprachen 2
Sprache 1 Microsoft Hedda Desktop - German
Sprache 2 Microsoft Zira Desktop - English (United States)
Gehe ich in die Sprachausgabe von Windows, so sehe ich auch die anderen Sprecher, das ist schön, aber über OLE lässt sich das ganz einfach nicht ansprechen.

Edit: Es sieht so aus, als würde man das SAPI SDK benötigen, soweit ich sehe ist das noch 32Bit, zumindest der OLE Teil. Da ist die Frage für wielange das noch unterstützt wird. Da kommt die Vermutung auf, das das wie Direct Show, langsam ausläuft.

https://www.microsoft.com/en-us/downloa ... x?id=10121

Falls du dir das chm File herunterlädst und öffnest und es erscheint nur das Menü link und kein Inhalt, so muss man das über den Dateiexplorer und den Eigenschaften erst zulassen..
Dateianhänge
SAPITest.zip
(95.13 KiB) 111-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

dj_leinad
Beiträge: 40
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win10 pro (Laz 3.2 / FPC 3.2.2)
CPU-Target: Win 64Bit
Wohnort: CH

Re: API für Sprache

Beitrag von dj_leinad »

Die mit SAPI verfügbaren Sprachen in Win10 oder Win11 werden angezeigt, wenn man sapi.cpl startet. Diese cpl-Datei befindet sich im Verzeichniss c:\Windows\System32\Speech\SpeechUX\.
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.

Benutzeravatar
juelin
Beiträge: 290
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: API für Sprache

Beitrag von juelin »

Hallo dj_leinad,
stimmt leider nicht.
Habe es ausprobiert. Auch mit sapi.cpl kommen im SAPI nur zwei Stimmen.
Gruß
Jürgen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6845
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: API für Sprache

Beitrag von af0815 »

SAPI und SAPI müssen nicht gleich sein. Das ist bei MS dasselbe wie bei den Kameras, Willst du mehr, musst du auf UWP ausweichen und das geht mit Lazarus nichts mehr. Sieht für mich so aus, als würde mehr nur im ManagedCode funktionieren.

Vielleicht ginge mehr, wenn man das SDK von SAPI installiert, dann müsste man aber bei seiner App auch die Runtime von SAPI mit installieren.

Für Tests, tue ich mir das nicht an.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

dj_leinad
Beiträge: 40
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win10 pro (Laz 3.2 / FPC 3.2.2)
CPU-Target: Win 64Bit
Wohnort: CH

Re: API für Sprache

Beitrag von dj_leinad »

Hallo Jürgen,
über sapi.cpl werden Dir die Sprachen angezeigt die über das sapi.dll erreichbar sind. Das sind jedoch nicht alle Sprachen die Du im Windows-Dialog angezeigt bekommst. Wo und wie diese im Windows-Dialog angezeigten Sprachen verwendet werden können weiss ich leider auch nicht.

In der Registry sind diese Sprachen unter dem Key:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\
registriert.
Zuletzt geändert von dj_leinad am So 1. Jun 2025, 13:36, insgesamt 1-mal geändert.
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.

paweld
Beiträge: 91
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: API für Sprache

Beitrag von paweld »

Laut diesem Link: https://stackoverflow.com/questions/404 ... showing-up
Der Rest der sichtbaren Stimmen ist nur über die WinRT-API zugänglich
Grüße / Pozdrawiam
paweld

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6845
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: API für Sprache

Beitrag von af0815 »

WinRT wird automatisch von UWP Apps verwendet. Ist also mehr oder minder ManagedCode. Und somit M$ Apps mit VS only.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
juelin
Beiträge: 290
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: [gelöst] API für Sprache

Beitrag von juelin »

Hallo Leute,
so es ist endlich geschafft.
Ich habe jetzt alle Stimmen un SAPI.
Auf die Idee hat mich dj_leinad mit der Registry gebracht.
Im Verzeichnis HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\
stehen die zwei Stimmen die ich bisher im SAPI hatte.
Die anderen Stimmen stehen im Verzeichnis
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\
Habe die Stimmen inHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens\
expotiert. Dann mit Editor die Verzeichnisse in den Exportfiles angepasst
und anschliessend wieder importiert.
Jetzt kann ich mit SAPI auf alle Stimmen zugreifen.
Das wollte ich Euch nur noch mitteilen, da wohl einige Unklarheiten bestanden.
Danke und Gruß
Jürgen
Dateianhänge
bild4.jpg
(236.9 KiB) Noch nie heruntergeladen

Antworten