SAPI : change Voice
- nageswaragunupudi
- Posts: 10691
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: SAPI : change Voice
I just replaced
\harbour\lib\win\bcc\hbwin.lib
with the new hbwin.lib.
Now it is working for me.
\harbour\lib\win\bcc\hbwin.lib
with the new hbwin.lib.
Now it is working for me.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: SAPI : change Voice
hi,
i have try to change hbwin.LIB in my working Environment
but than i got this Errors
where do i get latest harbour Version
i have try to change hbwin.LIB in my working Environment
but than i got this Errors
i use FWH 23.07 and harbour 3.2.0 Dev (r1801051438)Error: Unresolved external '_hb_iswinsp' referenced from C:\HARBOUR\LIB\WIN\BCC\HBWIN.LIB|win_osc
Error: Unresolved external '_HB_FUN_HB_OSISWIN7' referenced from C:\HARBOUR\LIB\WIN\BCC\HBWIN.LIB|win_os
where do i get latest harbour Version
greeting,
Jimmy
Jimmy
Re: SAPI : change Voice
hi Antonio,
have installed harbour Version, which was include in my harbour_win32_bcc_2020_10_19.zip, and override hbwin.LIB
now it work without Error and i can change "Voice" of SpVoice.
thx again for your GREAT help.
have installed harbour Version, which was include in my harbour_win32_bcc_2020_10_19.zip, and override hbwin.LIB
now it work without Error and i can change "Voice" of SpVoice.
thx again for your GREAT help.
greeting,
Jimmy
Jimmy
- Antonio Linares
- Site Admin
- Posts: 42259
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: SAPI : change Voice
Dear Jimmy,
Thanks to you for your great feedback
Thanks to you for your great feedback
- Antonio Linares
- Site Admin
- Posts: 42259
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: SAPI : change Voice
Simpler fix thanks to Bruno Cantero:
Code: Select all | Expand
lOleError = HB_VTBL( pDisp )->Invoke( HB_THIS_(pDisp) dispid, HB_ID_REF(IID_NULL),
LOCALE_USER_DEFAULT,
( V_VT( dispparam.rgvarg ) == VT_DISPATCH ) ? DISPATCH_PROPERTYPUTREF : DISPATCH_PROPERTYPUT,
&dispparam, NULL, &excep, &uiArgErr );
- Antonio Linares
- Site Admin
- Posts: 42259
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: SAPI : change Voice
Dear Jimmy,
I have reviewed the topic at https://hmgforum.com/viewtopic.php?t=7505 I have requested to join the forums so maybe we can solve it together.
I have been trying to use the events and it seems as something is missing:
I have reviewed the topic at https://hmgforum.com/viewtopic.php?t=7505 I have requested to join the forums so maybe we can solve it together.
I have been trying to use the events and it seems as something is missing:
Code: Select all | Expand
function main()
local oVoice := CreateObject( "Sapi.SPVoice", "WithEvents" )
// oVoice:WithEvents = .T.
oVoice:EventInterests = 327679
oVoice:__hSink := __axRegisterHandler( oVoice:__hObj, { | ... | QOut( ... ) } )
// oVoice:voice = oVoice:GetVoices():Item( 0 )
oVoice:Speak( "harbour and xharbour" )
oVoice:Speak( "another" )
return nil
-
- Posts: 26
- Joined: Tue Mar 20, 2012 11:06 pm
Re: SAPI : change Voice
Hola Antonio Linares con su permiso voy a responder en español , no recordaba estar registrado en su sitio y lo abré hecho para leer el foro.Antonio Linares wrote:Dear Jimmy,
I have reviewed the topic at https://hmgforum.com/viewtopic.php?t=7505 I have requested to join the forums so maybe we can solve it together.
I have been trying to use the events and it seems as something is missing:Code: Select all | Expand
function main() local oVoice := CreateObject( "Sapi.SPVoice", "WithEvents" ) // oVoice:WithEvents = .T. oVoice:EventInterests = 327679 oVoice:__hSink := __axRegisterHandler( oVoice:__hObj, { | ... | QOut( ... ) } ) // oVoice:voice = oVoice:GetVoices():Item( 0 ) oVoice:Speak( "harbour and xharbour" ) oVoice:Speak( "another" ) return nil
con respecto al bug que encontró en olecore.c todavia no pude corregir el mismo, si tuviera la amabilidad de enviarme el fuente de olecore.c se lo agradeceria muchisimo.
todos los dias leo el changelog.txt en github de harbour para ver si se hiceron las modificaciones pero todavia no sucedió.. le comento que el uso de SapiVoice era una inclusión para un ejemplo de una aplicacion de Bingo en www.hmgforum.com y noté que habia mas narradores en windows y que se podia elegir pero no llegamos poder utilizarlos por este BUG.
otra cosa mas que vi en SapiVoice es la posibilidad de usar Eventos pero lo iba a usar cuando este funcional el poder elegir los narradores de microsoft
desde ya mucha gracias
- Antonio Linares
- Site Admin
- Posts: 42259
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: SAPI : change Voice
Estimado Daniel,
En harbour/contrib/hbwin/olecore.c busca esta función:
Ahi tienes el fix:
En harbour/contrib/hbwin/olecore.c busca esta función:
Code: Select all | Expand
HB_FUNC( WIN_OLEAUTO___ONERROR )
{
IDispatch * pDisp;
const char * szMethod;
wchar_t szMethodWide[ HB_SYMBOL_NAME_LEN + 1 ];
OLECHAR * pMemberArray;
DISPID dispid;
DISPPARAMS dispparam;
VARIANTARG variant;
EXCEPINFO excep;
UINT uiArgErr;
HRESULT lOleError;
HB_USHORT uiClass;
int iPCount;
hb_oleInit();
uiClass = hb_objGetClass( hb_stackSelfItem() );
if( uiClass == 0 )
return;
/* Get object handle */
hb_vmPushDynSym( s_pDyns_hObjAccess );
hb_vmPush( hb_stackSelfItem() );
hb_vmSend( 0 );
pDisp = hb_oleParam( -1 );
if( ! pDisp )
return;
iPCount = hb_pcount();
szMethod = hb_itemGetSymbol( hb_stackBaseItem() )->szName;
AnsiToWideBuffer( szMethod, szMethodWide, ( int ) HB_SIZEOFARRAY( szMethodWide ) );
/* Try property put */
if( szMethod[ 0 ] == '_' && iPCount >= 1 )
{
pMemberArray = &szMethodWide[ 1 ];
lOleError = HB_VTBL( pDisp )->GetIDsOfNames( HB_THIS_( pDisp ) HB_ID_REF( IID_NULL ), &pMemberArray,
1, LOCALE_USER_DEFAULT, &dispid );
if( lOleError == S_OK )
{
DISPID lPropPut = DISPID_PROPERTYPUT;
memset( &excep, 0, sizeof( excep ) );
GetParams( &dispparam, 0, HB_FALSE, 0, NULL, NULL );
dispparam.rgdispidNamedArgs = &lPropPut;
dispparam.cNamedArgs = 1;
lOleError = HB_VTBL(pDisp)->Invoke(HB_THIS_(pDisp) dispid, HB_ID_REF(IID_NULL),
LOCALE_USER_DEFAULT,
(V_VT(dispparam.rgvarg) == VT_DISPATCH) ? DISPATCH_PROPERTYPUTREF : DISPATCH_PROPERTYPUT,
&dispparam, NULL, &excep, &uiArgErr);
FreeParams( &dispparam );
Code: Select all | Expand
lOleError = HB_VTBL(pDisp)->Invoke(HB_THIS_(pDisp) dispid, HB_ID_REF(IID_NULL),
LOCALE_USER_DEFAULT,
(V_VT(dispparam.rgvarg) == VT_DISPATCH) ? DISPATCH_PROPERTYPUTREF : DISPATCH_PROPERTYPUT,
&dispparam, NULL, &excep, &uiArgErr);
-
- Posts: 26
- Joined: Tue Mar 20, 2012 11:06 pm
Re: SAPI : change Voice
Hola Antonio Linares:
con su invalorable ayuda pude despues de estudiar y modificar olecore.c el cual me costo entender el fix pude compilar la libreria Contrib de HBWIN que descargue desde el repositio de Harbour en GITHUB mediante el bin HBMK2 y el compilador MinGW.
desde ya quedo muy agradecido como muchos otros de la comunidad HMGForum un saludo y abrazo a la distancia
con su invalorable ayuda pude despues de estudiar y modificar olecore.c el cual me costo entender el fix pude compilar la libreria Contrib de HBWIN que descargue desde el repositio de Harbour en GITHUB mediante el bin HBMK2 y el compilador MinGW.
desde ya quedo muy agradecido como muchos otros de la comunidad HMGForum un saludo y abrazo a la distancia
- Antonio Linares
- Site Admin
- Posts: 42259
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: SAPI : change Voice
Estimado Daniel,
Lo que no hemos conseguido que funcione son los eventos.
A ver si entre todos descubrimos como hacerlo funcionar:
Lo que no hemos conseguido que funcione son los eventos.
A ver si entre todos descubrimos como hacerlo funcionar:
Code: Select all | Expand
function main()
local oVoice := CreateObject( "Sapi.SPVoice", "WithEvents" )
// oVoice:WithEvents = .T.
oVoice:EventInterests = 327679
oVoice:__hSink := __axRegisterHandler( oVoice:__hObj, { | ... | QOut( ... ) } )
// oVoice:voice = oVoice:GetVoices():Item( 0 )
oVoice:Speak( "harbour and xharbour" )
oVoice:Speak( "another" )
return nil
-
- Posts: 26
- Joined: Tue Mar 20, 2012 11:06 pm
Re: SAPI : change Voice
Hola Antonio Linares :Antonio Linares wrote:Estimado Daniel,
Lo que no hemos conseguido que funcione son los eventos.
A ver si entre todos descubrimos como hacerlo funcionar:Code: Select all | Expand
function main() local oVoice := CreateObject( "Sapi.SPVoice", "WithEvents" )
estuve leyendo Voice Events en https://learn.microsoft.com/en-us/previ ... 2(v=vs.85)
voy a ver como hacer un ejemplo en Harbour/HMG que es lo que utilizo, ya que nunca utilize FiveWin que es su producto.Eventos de voz
A medida que una voz habla texto, puede generar eventos cuando detecta ciertas condiciones en el flujo de entrada. Estos eventos están contenidos en la enumeración SpeechVoiceEvents. Ejemplos de estos eventos son la finalización de fonemas, palabras u oraciones, así como cambios de voz o la presencia de marcadores. La gama de condiciones que SpeechVoiceEvents puede informar es lo suficientemente amplia como para que la mayoría de las aplicaciones utilicen sólo algunas de ellas. Para evitar que el motor TTS genere eventos que la aplicación ignorará, utilice la propiedad EventInterests para especificar los eventos de interés. Sólo se plantearán estos eventos.
El punto en el flujo de texto de entrada en el que se ha completado un evento potencial se denomina límite de evento. En cada límite de evento, el tipo de evento se compara con los EventInterests actuales. Si el tipo de evento es de interés, se genera un evento de ese tipo. Los eventos de voz devuelven el número de flujo de entrada para asociarlos con el flujo apropiado.
SLDS
- Antonio Linares
- Site Admin
- Posts: 42259
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: SAPI : change Voice
Daniel,
Este ejemplo es Harbour, no usa FWH
Este ejemplo es Harbour, no usa FWH
Code: Select all | Expand
function main()
local oVoice := TOleAuto():New( "Sapi.SPVoice" )
// oVoice:WithEvents = .T.
oVoice:EventInterests = 327679
oVoice:__hSink := __axRegisterHandler( oVoice:__hObj, { | ... | QOut( ... ) } )
oVoice:Speak( "harbour and xharbour" )
oVoice:Speak( "another" )
return nil
- Enrico Maria Giordano
- Posts: 8728
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: SAPI : change Voice
I get this error:
Code: Select all | Expand
test.prg(7) Error E0030 Syntax error "syntax error at '...'"
- Antonio Linares
- Site Admin
- Posts: 42259
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: SAPI : change Voice
Dear Enrico,
xHarbour does not support "..." syntax, so such line should be:
oVoice:__hSink := __axRegisterHandler( oVoice:__hObj, { | x, y | QOut( x, y ) } )
but function __axRegisterHandler() is available in Harbour and not in xHarbour, if I am correct
xHarbour does not support "..." syntax, so such line should be:
oVoice:__hSink := __axRegisterHandler( oVoice:__hObj, { | x, y | QOut( x, y ) } )
but function __axRegisterHandler() is available in Harbour and not in xHarbour, if I am correct
- Enrico Maria Giordano
- Posts: 8728
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: SAPI : change Voice
I compiled your sample with latest Harbour, not xHarbour.