Sprachausgabe
-
informir dich über sapi (speech api)
-
Ich hab es derletzt auch mal versucht, und zwar so:
OleVariant ovVoice; ovVoice = CreateOleObject("SAPI.SpVoice"); ovVoice.Speak("Talk to me", 0);
Ging aber leider nicht
Darum täte mich das auch mal sehr interessieren. In der MSDN hab ich nicht wirklich hilfreiche Infos gefunden....
-
Ich hab jetz wirklich die ganze Zei versucht das hinzubekommen, aber nicht ansatz weise geschafft. Kennt nicht evtl. jemand eine gute Seite, auf der das mal gut beschrieben worde ? Oder hat jemand ein kleines Beispielprogramm ?
Danke
-
Man schaue in die Hilfe zum Speech SDK, finde ein Tutorial, da steht:
include <stdafx.h> #include <sapi.h> int main(int argc, char* argv[]) { ISpVoice * pVoice = NULL; if (FAILED(::CoInitialize(NULL))) return FALSE; HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); if( SUCCEEDED( hr ) ) { hr = pVoice->Speak(L"Hello world", 0, NULL); pVoice->Release(); pVoice = NULL; } ::CoUninitialize(); return TRUE; }
-
woher bekomme ich die beiden Header dateien ?
Und wo ist diese Hilfe zur Speech SDK ?
-
bitte schreibt doch was
-
-
Hallo,
mich würde noch folgendes interessieren.
Wie übergebe ich der FunktionpVoice->Speak(L"Hello world", 0, NULL);
eine dynamische Zeichenkette, sprich eine Stringvariable, die ich vorher mit cin eingelesen habe (nach dem motto
cin>>szBuffer; pVoice->Speak(L szBuffer, 0, NULL);
. Das funktioniert so natürlich nicht, und wenn ich vor szBuffer noch einen (unsigned short
cast ansetze gibt die Sprachausgabe Musekohl aus. Ich habe also ein Problem mit der Typumwandlung und hoffe, dass mir jemand zeigt, wie das geht.
MFG, '][' !
P.S. wofür steht eigentlich das L in
pVoice->Speak(L"Hello world", 0, NULL);
???
-
MultiByteToWideChar
mit dem L machst du Unicode Zeichenketten
-
geht das vielleicht noch'n Stück preziser?!
MFG, ']['
-
nein
-
hä?! wie jetzt... Du drückst dich nicht gerade verständlich aus...
-
L"Hallo" oder besser TEXT("Hallo") sagt dem Compiler, dass du gerne eine UNICODE Zeichenkette haben willst, wenn die Konstante UNICODE vor allen #include Anweisungen definiert ist:
#define UNICODE #include <windows.h> ... LPTSTR a = TEXT("Hallo");
Bei Unicode hat ein einzelnes Zeichen nicht 1 Byte, sondern 2. Dein Hallo steht damit als H a l l o im Speicher, wobei die Leerzeichen Nullbytes sind. Mit Unicode ist es möglich 65536 Zeichen darzustellen. Sinnvoll z.B. für chinesische, japanische, arabische oder technische und mathematische Zeichen.
Die meisten API Funktionen gibt es in zwei Varianten, die Ascii und die WideChar Variante. Die Konstante UNICODE besimmt welche benutzt wird.#ifdef UNICODE #define SetWindowText SetWindowTextW #else #define SetWindowText SetWindowTextA #endif // !UNICODE
Genauso verhält es sich mit TCHAR, LPTSTR ... schau einfach hier: Unicode in the Windows API (msdn)
-
OH gut, danke!
-
Die Ratschläge waren sehr informatif,
nur wie läuft das nun mit der Funktion:
Ich möchte anstelle vonhr = pVoice->Speak(L"This fucks me", 0, NULL);
das was ich vorher in szBuffer eingelesen habe ausgeben.
hr = pVoice->Speak(szBuffer,0, NULL);
der erste parameter (szBuffeR) ist dabei ein (unsigned short *), wenn ich also szBuffer in (unsigned short
caste, dann sagt er nur "Bi".
Ich hoffe, dass ich mein Problem jetzt verständlicer darlegehn konnt. MFG, ')('
-
Original erstellt von <wchar>:
MultiByteToWideCharHi,
scheint 'ne Funktion zu sein? Oder siehst du das anders? Vielleicht hilft die dir ja? Schon mal ausprobiert?MFG
Alexander Sulfrian
-
Nur wo genau bekomme ich den die header her??
Hab unter dem Link nix gefunden!
-
-
Ich habs jetz gefunden... ich hatte blos noch nich das Plugin von Microsoft installiert. Da muss man dan aber noch, wenn man die ActiveX Komponente (Microsoft Text-To-Speach) importiert, in der Headerdatei eine Variable von der auskommentierung "befreien".
Dann hat man als Komponente das DirectSS zur verfügung.
Wenn man dann zum Beispiel ne Ansistring Vaiable übergeben will, kann man die einfach in einen WideString umwandeln und den dann in einen BSTR
AnsiString wort="hallo Benutzer"; WideString wort_widestring = wort; Form1->DirectSS1->Speak(BSTR(wort_widestring));