| |
|
|
- Seite 1 - |
|
Frank Abbing | Ein kleines Testprogramm von mir. Happert es noch irgendwo? |
|
|
| |
|
|
|
| |
|
- Seite 3 - |
|
Frank Abbing | [quote:3dd6bef327]Die installierten Stimmen stehen in der Registry unter [HKEY_LOCAL_MACHINESOFTWAREMicrosoftSpeechVoicesTokens] Jede hat einen Unterschlüssel ATTRIBUTES, in dem alles drin steht, was es zu wissen gibt. Soweit ich das verstanden habe, lesen die entsprechenden SAPIs zum Auswählen/Aufzählen auch nur da nach.[/quote:3dd6bef327] Soweit klar. Ich kann dort alle installierten Stimmen finden. Nur kann ich beim besten Willen nicht erkennen, welche Stimme denn jetzt aktiviert ist. Kann mir mal jemand nen Schubs in die richtige Richtung geben? |
|
|
| |
|
|
|
Frank Abbing | Ok, hab die passende Stelle gefunden. Da werd ich nochmal ein bischen weiter basteln. |
|
|
| |
|
|
|
Frank Abbing | Die englisch nach deutsch Transformation bringt nicht viel ein. Ich werde sie für die Dll nicht weiter verfolgen. Ich schreib noch eine Anleitung, aber ansonsten ist sie fertig.
@Pascal, dein Programm produziert noch Fehler (Absturz oder fehlende Sprachausgabe), wenn die Buchstaben c, q und x im Text benutzt werden (sch wird ja umgewandelt in sh). |
|
|
| |
|
|
|
Walter | Hallo, das Thema Sprachausgabe ist hier seit 2006 verwaist, interessiert mich jedoch schon lange und nun wieder besonders. Habe 4 Stimmen installiert und erfolgreich einige Programme mit Sprachausgabe geschrieben - dank speech.dll - nun aber die Notwendigkeit, auch die Lautstärke zu steuern und die Stimme zu wechseln (was mit speech.dll derzeit nicht möglich ist). Die Versuchs- und Beispielscodes verstehe ich leider nur zum Teil . Scheitere ja bereits am ! in der ersten Zeile (was bedeutet das? Wo finde ich etwas darüber? zB
! window 50,50-500,200
Wenn mir auch Speicherbereiche nicht ganz fremd sind, sind Registry und COM zumindest derzeit nicht innerhalb meines Wirkungsvermögens - kurz: gibt es ev. doch eine DLL oder eine INC, mit der auch Unbedarfte SAPI samt Stimmenauswahl, Lautstärke, Pausen,... ansprechen können? |
|
|
| |
|
|
|
| Stimmt, das Thema ist 10 Jahre jung. ^^
Das Ausrufezeichen am Anfang dieses Codes gehört nicht zum Code - das war ein Flag für ein hiesiges Feature für Verzicht auf Codeformatierung.
Was die speech.dll betrifft schrieb Frank in 2006:
> Die englisch nach deutsch Transformation bringt nicht viel ein. > Ich werde sie für die Dll nicht weiter verfolgen.
Vielleicht kontaktierst Du ihn dafür direkt über seine Seite: [...]
Sehe ich das richtig, dass Uwe (weiter oben) mit seinem Code erfolgreich Sprache ausgibt? |
|
|
| |
|
|
|
Walter | >Sehe ich das richtig, dass Uwe (weiter oben) mit seinem Code erfolgreich Sprache ausgibt?
So klingt es, und ich habe es auch nach Entfernen des Rufzeichens versucht. Problemloser Durchlauf, jedoch bei mir kein Mucks. Waran es liegt?? Leider blicke ich an der Schnittstelle nicht durch... Wäre natürlich interessant, da ja (neben der Transformation der Laute) die deutsche Stimme auch direkt aufgerufen wird.
>Vielleicht kontaktierst Du ihn (Frank) dafür direkt über seine Seite
Werde ich machen. Danke! |
|
|
| |
|
|
|
| Hast Du mal den Code von Uwe repariert und parat, also diese ganzen überflüssigen Zeichen entfernt? |
|
|
| |
|
|
|
Walter | Das war meine letzte Testversion (vom 30.12.) |
| 4 kB | | Bezeichnung: | Test SAPI | | Kurzbeschreibung: | Versuchscode aus Uwes Beispiel | | Hochgeladen: | 12.01.2016 | | Ladeanzahl: | | | | Herunterladen |
|
|
| |
|
|
|
Walter | Habe von Frank leider eine Absage erhalten: "...wird es von meiner Software kein Update mehr geben." Mittlerweile auch versucht, im Code-Beispiel von Pascal StringToGUID("{96749377-3391-11D2-9EE3-00C04F797396}",a#) durch den Key von Steffi aus meiner Registry zu ersetzen. Ergebnis: Statt Durchlauf ohne Sprachausgabe (wie vorher) erfolgte ein Absturz. Gibt es irgendwo Doku, die mir weiterhilft? Beste Grüße Walter |
|
|
| |
|
|
|
Georg Teles | Nabend,
Walter (12.01.2016)
... nun aber die Notwendigkeit, auch die Lautstärke zu steuern und die Stimme zu wechseln (was mit speech.dll derzeit nicht möglich ist) ...
also mit der Lautstärke kann man sich mit der WINMM.DLL behelfen, um diese wenigstens über den MS-Mixer zu steuern, hier die erweiterte Speech.prf
Declare sx&,sy&,text$,x&,y&,speechdll&
Declare hButt01&, hButt02&, hEdit01&
Def GetSysColor(1) !"USER32","GetSysColor"
Def LoadIcon(2) !"USER32","LoadIconA"
Def InitSpeech(0) !"SPEECH","InitSpeech"
Def DeInitSpeech(0) !"SPEECH","DeInitSpeech"
Def PlaySpeech(2) !"SPEECH","PlaySpeech"
Def StopSpeech(0) !"SPEECH","StopSpeech"
'--------# zusätzliche DEFs
DEF waveOutSetVolume(2)!"winmm","waveOutSetVolume"
DEF waveOutGetVolume(2)!"winmm","waveOutGetVolume"
Def HiWord(1) (&(1)\$10000)
Def LoWord(1) And(&(1),$FFFF)
Def MakeLong(2)Or(&(1),(&(2)*$10000))
Def GetLeftChannel(1) (LoWord(&(1))\$028F)
Def GetRightChannel(1) (HiWord(&(1))\$028F)
'--------#
speechdll&=UseDll("Speech.dll")
sx&=640
sy&=480
Windowstyle 26+512
Windowtitle "Speech.dll Testcode."
Window %maxx,0-sx&,sy&
SendMessage(%hwnd,$80,1,LoadIcon(0,32517))'Application Icon setzen
Cls GetSysColor(15)
UseFont "MS Sans Serif",13,0,0,0,0
SetDialogFont 1
hButt01& = Create("BUTTON",,%hwnd,"Text sprechen",16, 408, 120, 24)
hButt02& = Create("BUTTON", %hwnd,"Sprache stoppen", 144, 408, 120, 24)
hEdit01& = Create("MultiEdit",%hwnd,"Das ist ein Probetext.",16,16,600,382)
'--------# zusätzliche VARs & Regler
Declare volumeregler&,LautL%,LautR%,Volume&
volumeregler&=Create("HScroll",%HWND,"",288, 408, 120, 24)
SetScrollRange volumeregler&,0,100'Range auf 100 setzen
waveOutGetVolume(-1,Addr(Volume&))
LautL% = GetLeftChannel(Volume&)'linker Kanal reciht aus um beide gleich zu setzen
'LautR% = GetRightChannel(Volume&) 'rechter Kanal
SetScrollPos volumeregler&,LautL%
'--------#
SetWindowPos %hwnd=(%maxx/2-(sx&/2)),(%maxy/2-(sy&/2))-sx&,sy&
InitSpeech()
While 1
Waitinput
'--------# zusätzliche abfrage Regler & Lautstärke setzen
LautL% = (GetScrollPos(volumeregler&))
waveOutSetVolume(-1,MakeLong((LautL%*$028F),(LautL%*$028F)))'beide gleich setzen nach dem Regler
'waveOutSetVolume(-1,MakeLong((LautL%*$028F),(LautR%*$028F))) 'beide Kanäle
'--------#
If %key=2
BREAK
ElseIf Clicked(hButt01&)
text$=GetText$(hEdit01&)
PlaySpeech(addr(text$),len(text$))
ElseIf Clicked(hButt02&)
StopSpeech()
EndIf
EndWhile
DeInitSpeech()
Freedll speechdll&
End
Aber die Stimme zu wechseln, keine Ahnung, noch nie damit zutun gehabt
Servus |
|
|
| |
|
|
| |
|
- Seite 4 - |
|
|
Walter | Ja, geht super! Die Lautstärke anpassen zu können ist bereits sehr hilfreich! Danke Walter |
|
|
| |
|
|
|
Georg Teles | |
|
| |
|
|