hallo,
tut mir leid, aber ich muss nochmal nerven.
Habe jetzt alles gelesen, was Microsoft so verzapft hat.
https://learn.microsoft.com/en-us/previ ... 2(v=vs.85)
ich habe in Systemeinstellungen->Barrierefreiheit->Sprachausgabe folgendes eingestellt (siehe bild1).
Er spricht aber mit Mikrosoft Hedda Dektop - German.
Folgende Stimmen sind im System Systemeinstellungen->Barrierefreiheit->Sprachausgabe (siehe bild2).
Mit dem Progamm:
Code: Alles auswählen
var
SpVoice: OleVariant;
Textout: string;
begin
// SpVoice.GetVoices.Items = Stimme in verschieden Sprachen (0-1)
// SpVoice.Volume = Lautstärke (0-100)
// SPVoice.Rate = Sprechgeschwindigkeit (-10 bis +10) Minus=Langsamer Plus=Schneller
Textout:='bitte sagen sie etwas';
SpVoice:=ComObj.CreateOleObject('SAPI.SpVoice');
SpVoice.Voice:=SpVoice.GetVoices.Item(0);
SpVoice.Speak(Textout, 0);
// 'Microsoft Hedda Desktop - German'
// SpVoice.Speak(SpVoice.Voice.GetDescription, 0);
in SpVoice.GetVoices.Item(0) kann ich nur zwischen 0 und 1 wählen
0 = Mikrosoft Hedda Dektop - German
1 = Mikrosoft Zira Dektop - English (United States)
den eingetellten Mikrosoft Stefan - German (Germany) bekomme ich nicht.
Dann habe ich nach der Microsoft-Anleitung versuccht selber die Stimme zu ändern (SetVoice).
Dazu gibt Microsoft vor:
Code: Alles auswählen
// Declare local identifiers:
HRESULT hr = S_OK;
CComPtr<ISpObjectToken> cpVoiceToken;
CComPtr<IEnumSpObjectTokens> cpEnum;
CComPtr<ISpVoice> cpVoice;
ULONG ulCount = 0;
// Create the SAPI voice.
hr = cpVoice.CoCreateInstance(CLSID_SpVoice);
if (SUCCEEDED (hr))
{
// Enumerate the available voices.
hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum;);
}
if (SUCCEEDED (hr))
{
// Get the number of voices.
hr = cpEnum->GetCount(&ulCount;);
}
// Obtain a list of available voice tokens, set
// the voice to the token, and call Speak.
while (SUCCEEDED(hr) && ulCount--)
{
cpVoiceToken.Release();
if (SUCCEEDED (hr))
{
hr = cpEnum->Next(1, &cpVoiceToken;, NULL);
}
if (SUCCEEDED (hr))
{
hr = cpVoice->SetVoice(cpVoiceToken);
}
if (SUCCEEDED (hr))
{
hr = cpVoice->Speak( L"How are you?", SPF_DEFAULT, NULL );
}
}
Aber in Lazarus kennt das SAPI-Objekt folgende Dinge nicht:
SpObjectToken und IEnumSpObjectTokens
Und damit habe ich keine Chance.
Ich wollte Euch nur mal Informieren wie es bei mir aussieht.
Wenn Jemand noch eine Idee hätte wäre ich dankbar.
Gruß
Jürgen