Differenze tra le versioni di ""Dal testo al parlato" mediante le funzioni esterne del API di eSpeack"
Da Gambas-it.org - Wikipedia.
(11 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
Le funzioni del API di '''eSpeak''' consentono la sintetizzazione vocale di un testo "dal testo al parlato" (''text-to-speech'') per l'inglese e per altre lingue. | Le funzioni del API di '''eSpeak''' consentono la sintetizzazione vocale di un testo "dal testo al parlato" (''text-to-speech'') per l'inglese e per altre lingue. | ||
− | Per fruire delle funzioni e delle altre risorse di ''eSpeack'' è necessario installare nel sistema la libreria: ''libespeak.so.1.1. | + | Per fruire delle funzioni e delle altre risorse di ''eSpeack'' è necessario installare nel sistema la libreria condivisa: "''libespeak.so.1.1.48'' ". |
<BR>Inoltre, ''eSpeack'' utilizza la libreria sonora ''PortAudio'', pertanto è necessario avere installata nel sistema anche quest'altra libreria. | <BR>Inoltre, ''eSpeack'' utilizza la libreria sonora ''PortAudio'', pertanto è necessario avere installata nel sistema anche quest'altra libreria. | ||
− | |||
Mostriamo di seguito un semplice codice per ottenere la sintetizzazione vocale di un breve testo in italiano: | Mostriamo di seguito un semplice codice per ottenere la sintetizzazione vocale di un breve testo in italiano: | ||
− | + | Library "libespeak:1.1.48" | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Private Const espeakSSML As Byte = 16 | |
+ | Private Const espeakPHONEMES As Short = 256 | ||
+ | Private Const espeakENDPAUSE As Short = 4096 | ||
+ | Private Const espeakKEEP_NAMEDATA As Short = 8192 | ||
+ | Private Enum AUDIO_OUTPUT_PLAYBACK = 0, AUDIO_OUTPUT_RETRIEVAL, AUDIO_OUTPUT_SYNCHRONOUS, AUDIO_OUTPUT_SYNCH_PLAYBACK | ||
+ | Private Enum EE_INTERNAL_ERROR = -1, EE_OK, EE_BUFFER_FULL, EE_NOT_FOUND | ||
+ | Private Enum POS_CHARACTER = 1, POS_WORD, POS_SENTENCE | ||
+ | Private Enum espeakCHARS_AUTO = 0, espeakCHARS_UTF8, espeakCHARS_8BIT, espeakCHARS_WCHAR, espeakCHARS_16BIT | ||
+ | Private Enum espeakRATE = 1, espeakVOLUME, espeakPITCH, espeakRANGE, espeakPUNCTUATION, espeakCAPITALS, espeakWORDGAP | ||
+ | Private Enum espeakPUNCT_NONE = 0, espeakPUNCT_ALL, espeakPUNCT_SOME | ||
+ | Private Enum NONE = 0, SOUND_ICON, SPELLING, RAISING_PITCH | ||
<FONT color=gray>' ''int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options)'' | <FONT color=gray>' ''int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options)'' | ||
' ''Inizializza la libreria 'libespeak'. Ritorna la frequenza di camionamento in Hz, oppure -1 (EE_INTERNAL_ERROR)''</font> | ' ''Inizializza la libreria 'libespeak'. Ritorna la frequenza di camionamento in Hz, oppure -1 (EE_INTERNAL_ERROR)''</font> | ||
− | + | Private Extern espeak_Initialize(audio_output As Byte, buflength As Integer, path As String, options As Integer) As Integer | |
<FONT color=gray>' ''espeak_ERROR espeak_SetVoiceByName(const char *name)'' | <FONT color=gray>' ''espeak_ERROR espeak_SetVoiceByName(const char *name)'' | ||
' ''Searches for a voice with a matching "name" field. For example, "en" for English, "de" for German, "it" for Italian.''</font> | ' ''Searches for a voice with a matching "name" field. For example, "en" for English, "de" for German, "it" for Italian.''</font> | ||
− | + | Private Extern espeak_SetVoiceByName(name As String) As Integer | |
<FONT color=gray>' ''espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int relative)'' | <FONT color=gray>' ''espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int relative)'' | ||
' ''Sets the value of the specified parameter. relative = 0 sets the absolute value of the parameter. relative = 1 sets a relative value of the parameter.''</font> | ' ''Sets the value of the specified parameter. relative = 0 sets the absolute value of the parameter. relative = 1 sets a relative value of the parameter.''</font> | ||
− | + | Private Extern espeak_SetParameter(parameter As Byte, value As Integer, relative As Integer) As Integer | |
<FONT color=gray>' ''espeak_ERROR espeak_Synth(const void *text, size_t size, unsigned int position, espeak_POSITION_TYPE position_type, unsigned int end_position, unsigned int flags, unsigned int* unique_identifier, void* user_data)'' | <FONT color=gray>' ''espeak_ERROR espeak_Synth(const void *text, size_t size, unsigned int position, espeak_POSITION_TYPE position_type, unsigned int end_position, unsigned int flags, unsigned int* unique_identifier, void* user_data)'' | ||
' ''Synthesize speech for the specified text.''</font> | ' ''Synthesize speech for the specified text.''</font> | ||
− | + | Private Extern espeak_Synth(text As String, size As Integer, posiztion As Integer, position_type As Pointer, end_position As Integer, flags As Integer, unique_identifier As Pointer, user_data As Pointer) As Integer | |
<FONT color=gray>' ''espeak_ERROR espeak_Synchronize(void)'' | <FONT color=gray>' ''espeak_ERROR espeak_Synchronize(void)'' | ||
' ''This function returns when all data have been spoken.''</font> | ' ''This function returns when all data have been spoken.''</font> | ||
− | + | Private Extern espeak_Synchronize() As Integer | |
<FONT color=gray>' ''espeak_ERROR espeak_Terminate(void)'' | <FONT color=gray>' ''espeak_ERROR espeak_Terminate(void)'' | ||
' ''last function to be called.''</font> | ' ''last function to be called.''</font> | ||
− | + | Private Extern espeak_Terminate() As Integer | |
<FONT color=gray>' ''const char *espeak_Info(const char **path_data)'' | <FONT color=gray>' ''const char *espeak_Info(const char **path_data)'' | ||
' ''Returns the version number string. 'path_data' returns the path to espeak_data.''</font> | ' ''Returns the version number string. 'path_data' returns the path to espeak_data.''</font> | ||
− | + | Private Extern espeak_Info(path_data As Pointer) As String | |
− | + | Public Sub Main() | |
Dim data_path, versione_lib, nomevoce, testo As String | Dim data_path, versione_lib, nomevoce, testo As String | ||
Dim freqcamp, err, size As Integer | Dim freqcamp, err, size As Integer | ||
Dim percorso_dati As Pointer | Dim percorso_dati As Pointer | ||
− | |||
<FONT color=gray>' ''Imposta il testo da pronunciare:''</font> | <FONT color=gray>' ''Imposta il testo da pronunciare:''</font> | ||
Riga 64: | Riga 59: | ||
data_path = Null | data_path = Null | ||
nomevoce = "it" | nomevoce = "it" | ||
− | |||
<FONT color=gray>' ''Inizializza la libreria:''</font> | <FONT color=gray>' ''Inizializza la libreria:''</font> | ||
− | + | freqcamp = espeak_Initialize(AUDIO_OUTPUT_SYNCH_PLAYBACK, 0, data_path, 0) | |
− | + | If freqcamp = EE_INTERNAL_ERROR Then | |
− | + | Error.Raise("Errore nell'inizializzazione della libreria 'libespeak' !") | |
− | + | Else | |
− | + | Print "Frequenza di campionamento = " & freqcamp & " Hertz" | |
− | + | Endif | |
− | + | versione_lib = espeak_Info(VarPtr(percorso_dati)) | |
− | + | Print "Versione della libreria: " & versione_lib | |
− | + | Print "Percorso dei dati della libreria: " & String@(percorso_dati) | |
+ | |||
+ | err = espeak_SetVoiceByName(nomevoce) | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione della lingua !") | ||
+ | |||
+ | <FONT color=gray>' ''Imposta alcuni parametri di lettura:''</font> | ||
+ | err = espeak_SetParameter(espeakRATE, 140, 0) <FONT color=gray>' ''Velocità del parlato in parole-per minuto (valori: 80 - 450)''</font> | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakRATE' !") | ||
+ | err = espeak_SetParameter(espeakVOLUME, 100, 0) <FONT color=gray>' ''Volume (valori 0- 200)''</font> | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakVOLUME' !") | ||
+ | err = espeak_SetParameter(espeakPITCH, 50, 0) <FONT color=gray>' ''Tono (valori: 0 - 100)''</font> | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakPITCH' !") | ||
+ | err = espeak_SetParameter(espeakRANGE, 50, 0) <FONT color=gray>' ''Gamma tonale (valori: 0 - 100; 0 = monotono)''</font> | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakRANGE' !") | ||
+ | err = espeak_SetParameter(espeakPUNCTUATION, espeakPUNCT_NONE, 0) <FONT color=gray>' ''Imposta quali caratteri di punteggiatura sono da annunciare''</font> | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakPUNCTUATION' !") | ||
+ | err = espeak_SetParameter(espeakCAPITALS, NONE, 0) <FONT color=gray>' ''Annuncia eventualmente una lettera maiuscola''</font> | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakCAPITALS' !") | ||
+ | err = espeak_SetParameter(espeakWORDGAP, 6, 0) <FONT color=gray>' ''Pausa tra le parole (unità di 10mS come velocità prestabilita = 1 )''</font> | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakWORDGAP' !") | ||
+ | size = Len(testo) | ||
+ | |||
+ | <FONT color=gray>' ''Attiva il motore di sintetizzazione vocale di "eSpeack":''</font> | ||
+ | err = espeak_Synth(testo, size + 1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, Null, Null) | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'operazione di sintetizzazione vocale del testo !") | ||
− | + | err = espeak_Synchronize() | |
− | + | If err < EE_OK Then Error.Raise("Errore alla funzione 'espeak_Synchronize' !") | |
+ | |||
+ | <FONT color=gray>' ''Chiude la libreria:''</font> | ||
+ | err = espeak_Terminate() | ||
+ | |||
+ | End | ||
+ | |||
+ | ===Uso della libreria "libespeak-ng.so"=== | ||
+ | E' possibile usare anche la libreria condivisa: "''libespeak-ng.so.1.1.51'' ". | ||
+ | Library "libespeak-ng:1.1.51" | ||
+ | |||
+ | Private Const espeakSSML As Byte = 16 | ||
+ | Private Const espeakPHONEMES As Short = 256 | ||
+ | Private Const espeakENDPAUSE As Short = 4096 | ||
+ | Private Const espeakKEEP_NAMEDATA As Short = 8192 | ||
+ | Private Enum AUDIO_OUTPUT_PLAYBACK = 0, AUDIO_OUTPUT_RETRIEVAL, AUDIO_OUTPUT_SYNCHRONOUS, AUDIO_OUTPUT_SYNCH_PLAYBACK | ||
+ | Private Enum EE_INTERNAL_ERROR = -1, EE_OK, EE_BUFFER_FULL, EE_NOT_FOUND | ||
+ | Private Enum POS_CHARACTER = 1, POS_WORD, POS_SENTENCE | ||
+ | Private Enum espeakCHARS_AUTO = 0, espeakCHARS_UTF8, espeakCHARS_8BIT, espeakCHARS_WCHAR, espeakCHARS_16BIT | ||
+ | Private Enum espeakRATE = 1, espeakVOLUME, espeakPITCH, espeakRANGE, espeakPUNCTUATION, espeakCAPITALS, espeakWORDGAP | ||
+ | |||
+ | <FONT color=gray>' ''int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options)'' | ||
+ | ' ''Inizializza la libreria 'libespeak'. Ritorna la frequenza di camionamento in Hz, oppure -1 (EE_INTERNAL_ERROR)''</font> | ||
+ | Private Extern espeak_Initialize(audio_output As Byte, buflength As Integer, path As String, options As Integer) As Integer | ||
+ | |||
+ | <FONT color=gray>' ''espeak_ERROR espeak_SetVoiceByName(const char *name)'' | ||
+ | ' ''Searches for a voice with a matching "name" field. For example, "en" for English, "de" for German, "it" for Italian.''</font> | ||
+ | Private Extern espeak_SetVoiceByName(name As String) As Integer | ||
+ | |||
+ | <FONT color=gray>' ''espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int relative)'' | ||
+ | ' ''Sets the value of the specified parameter. relative = 0 sets the absolute value of the parameter. relative = 1 sets a relative value of the parameter.''</font> | ||
+ | Private Extern espeak_SetParameter(parameter As Byte, value As Integer, relative As Integer) As Integer | ||
+ | <FONT color=gray>' ''espeak_ERROR espeak_Synth(const void *text, size_t size, unsigned int position, espeak_POSITION_TYPE position_type, unsigned int end_position, unsigned int flags, unsigned int* unique_identifier, void* user_data)'' | ||
+ | ' ''Synthesize speech for the specified text.''</font> | ||
+ | Private Extern espeak_Synth(text As String, size As Integer, posiztion As Integer, position_type As Pointer, end_position As Integer, flags As Integer, unique_identifier As Pointer, user_data As Pointer) As Integer | ||
+ | <FONT color=gray>' ''espeak_ERROR espeak_Synchronize(void)'' | ||
+ | ' ''This function returns when all data have been spoken.''</font> | ||
+ | Private Extern espeak_Synchronize() As Integer | ||
+ | |||
+ | <FONT color=gray>' ''espeak_ERROR espeak_Terminate(void)'' | ||
+ | ' ''last function to be called.''</font> | ||
+ | Private Extern espeak_Terminate() As Integer | ||
+ | |||
+ | <FONT color=gray>' ''const char *espeak_Info(const char **path_data)'' | ||
+ | ' ''Returns the version number string. 'path_data' returns the path to espeak_data.''</font> | ||
+ | Private Extern espeak_Info(path_data As Pointer) As String | ||
+ | |||
+ | |||
+ | Public Sub Main() | ||
+ | |||
+ | Dim data_path, versione_lib, nomevoce, testo As String | ||
+ | Dim freqcamp, err, size As Integer | ||
+ | Dim percorso_dati As Pointer | ||
+ | |||
+ | <FONT color=gray>' ''Imposta il testo da pronunciare:''</font> | ||
+ | testo = "www.Gambas-it.org è il sito della comunità italiana dei programmatori Gambas." | ||
+ | |||
+ | data_path = Null | ||
+ | nomevoce = "it" | ||
+ | |||
+ | <FONT color=gray>' ''Inizializza la libreria:''</font> | ||
+ | freqcamp = espeak_Initialize(AUDIO_OUTPUT_SYNCH_PLAYBACK, 0, data_path, 0) | ||
+ | If freqcamp = EE_INTERNAL_ERROR Then | ||
+ | Error.Raise("Errore nell'inizializzazione della libreria 'libespeak' !") | ||
+ | Else | ||
+ | Print "Frequenza di campionamento = " & freqcamp & " Hertz" | ||
+ | Endif | ||
+ | |||
+ | versione_lib = espeak_Info(VarPtr(percorso_dati)) | ||
+ | Print "Versione della libreria: " & versione_lib | ||
+ | Print "Percorso dei dati della libreria: " & String@(percorso_dati) | ||
+ | |||
+ | err = espeak_SetVoiceByName(nomevoce) | ||
+ | If err <> EE_OK Then Error.Raise("Errore nell'impostazione della lingua !") | ||
+ | |||
<FONT color=gray>' ''Imposta alcuni parametri di lettura:''</font> | <FONT color=gray>' ''Imposta alcuni parametri di lettura:''</font> | ||
− | + | err = espeak_SetParameter(espeakRATE, 140, 0) <FONT color=gray>' ''Velocità del parlato in parole-per minuto (valori: 80 - 450)''</font> | |
− | + | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakRATE' !") | |
− | + | err = espeak_SetParameter(espeakVOLUME, 100, 0) <FONT color=gray>' ''Volume (valori 0- 200)''</font> | |
− | + | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakVOLUME' !") | |
− | + | err = espeak_SetParameter(espeakPITCH, 50, 0) <FONT color=gray>' ''Tono (valori: 0 - 100)''</font> | |
− | + | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakPITCH' !") | |
− | + | err = espeak_SetParameter(espeakRANGE, 50, 0) <FONT color=gray>' ''Gamma tonale (valori: 0 - 100; 0 = monotono)''</font> | |
− | + | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakRANGE' !") | |
− | + | err = espeak_SetParameter(espeakWORDGAP, 6, 0) <FONT color=gray>' ''Pausa tra le parole (unità di 10mS come velocità prestabilita = 1 )''</font> | |
− | + | If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakWORDGAP' !") | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | size = Len(testo) | |
− | + | ||
− | + | <FONT color=gray>' ''Attiva il motore di sintetizzazione vocale di "eSpeack":''</font> | |
− | + | err = espeak_Synth(testo, size + 1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, Null, Null) | |
+ | If err <> EE_OK Then Error.Raise("Errore nell'operazione di sintetizzazione vocale del testo !") | ||
− | + | err = espeak_Synchronize() | |
− | + | If err < EE_OK Then Error.Raise("Errore alla funzione 'espeak_Synchronize' !") | |
− | + | ||
− | |||
− | |||
<FONT color=gray>' ''Chiude la libreria:''</font> | <FONT color=gray>' ''Chiude la libreria:''</font> | ||
− | + | err = espeak_Terminate() | |
− | + | ||
− | + | End | |
Versione attuale delle 11:54, 13 gen 2024
Le funzioni del API di eSpeak consentono la sintetizzazione vocale di un testo "dal testo al parlato" (text-to-speech) per l'inglese e per altre lingue.
Per fruire delle funzioni e delle altre risorse di eSpeack è necessario installare nel sistema la libreria condivisa: "libespeak.so.1.1.48 ".
Inoltre, eSpeack utilizza la libreria sonora PortAudio, pertanto è necessario avere installata nel sistema anche quest'altra libreria.
Mostriamo di seguito un semplice codice per ottenere la sintetizzazione vocale di un breve testo in italiano:
Library "libespeak:1.1.48" Private Const espeakSSML As Byte = 16 Private Const espeakPHONEMES As Short = 256 Private Const espeakENDPAUSE As Short = 4096 Private Const espeakKEEP_NAMEDATA As Short = 8192 Private Enum AUDIO_OUTPUT_PLAYBACK = 0, AUDIO_OUTPUT_RETRIEVAL, AUDIO_OUTPUT_SYNCHRONOUS, AUDIO_OUTPUT_SYNCH_PLAYBACK Private Enum EE_INTERNAL_ERROR = -1, EE_OK, EE_BUFFER_FULL, EE_NOT_FOUND Private Enum POS_CHARACTER = 1, POS_WORD, POS_SENTENCE Private Enum espeakCHARS_AUTO = 0, espeakCHARS_UTF8, espeakCHARS_8BIT, espeakCHARS_WCHAR, espeakCHARS_16BIT Private Enum espeakRATE = 1, espeakVOLUME, espeakPITCH, espeakRANGE, espeakPUNCTUATION, espeakCAPITALS, espeakWORDGAP Private Enum espeakPUNCT_NONE = 0, espeakPUNCT_ALL, espeakPUNCT_SOME Private Enum NONE = 0, SOUND_ICON, SPELLING, RAISING_PITCH ' int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options) ' Inizializza la libreria 'libespeak'. Ritorna la frequenza di camionamento in Hz, oppure -1 (EE_INTERNAL_ERROR) Private Extern espeak_Initialize(audio_output As Byte, buflength As Integer, path As String, options As Integer) As Integer ' espeak_ERROR espeak_SetVoiceByName(const char *name) ' Searches for a voice with a matching "name" field. For example, "en" for English, "de" for German, "it" for Italian. Private Extern espeak_SetVoiceByName(name As String) As Integer ' espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int relative) ' Sets the value of the specified parameter. relative = 0 sets the absolute value of the parameter. relative = 1 sets a relative value of the parameter. Private Extern espeak_SetParameter(parameter As Byte, value As Integer, relative As Integer) As Integer ' espeak_ERROR espeak_Synth(const void *text, size_t size, unsigned int position, espeak_POSITION_TYPE position_type, unsigned int end_position, unsigned int flags, unsigned int* unique_identifier, void* user_data) ' Synthesize speech for the specified text. Private Extern espeak_Synth(text As String, size As Integer, posiztion As Integer, position_type As Pointer, end_position As Integer, flags As Integer, unique_identifier As Pointer, user_data As Pointer) As Integer ' espeak_ERROR espeak_Synchronize(void) ' This function returns when all data have been spoken. Private Extern espeak_Synchronize() As Integer ' espeak_ERROR espeak_Terminate(void) ' last function to be called. Private Extern espeak_Terminate() As Integer ' const char *espeak_Info(const char **path_data) ' Returns the version number string. 'path_data' returns the path to espeak_data. Private Extern espeak_Info(path_data As Pointer) As String Public Sub Main() Dim data_path, versione_lib, nomevoce, testo As String Dim freqcamp, err, size As Integer Dim percorso_dati As Pointer ' Imposta il testo da pronunciare: testo = "www.Gambas-it.org è il sito della comunità italiana dei programmatori Gambas." data_path = Null nomevoce = "it" ' Inizializza la libreria: freqcamp = espeak_Initialize(AUDIO_OUTPUT_SYNCH_PLAYBACK, 0, data_path, 0) If freqcamp = EE_INTERNAL_ERROR Then Error.Raise("Errore nell'inizializzazione della libreria 'libespeak' !") Else Print "Frequenza di campionamento = " & freqcamp & " Hertz" Endif versione_lib = espeak_Info(VarPtr(percorso_dati)) Print "Versione della libreria: " & versione_lib Print "Percorso dei dati della libreria: " & String@(percorso_dati) err = espeak_SetVoiceByName(nomevoce) If err <> EE_OK Then Error.Raise("Errore nell'impostazione della lingua !") ' Imposta alcuni parametri di lettura: err = espeak_SetParameter(espeakRATE, 140, 0) ' Velocità del parlato in parole-per minuto (valori: 80 - 450) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakRATE' !") err = espeak_SetParameter(espeakVOLUME, 100, 0) ' Volume (valori 0- 200) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakVOLUME' !") err = espeak_SetParameter(espeakPITCH, 50, 0) ' Tono (valori: 0 - 100) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakPITCH' !") err = espeak_SetParameter(espeakRANGE, 50, 0) ' Gamma tonale (valori: 0 - 100; 0 = monotono) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakRANGE' !") err = espeak_SetParameter(espeakPUNCTUATION, espeakPUNCT_NONE, 0) ' Imposta quali caratteri di punteggiatura sono da annunciare If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakPUNCTUATION' !") err = espeak_SetParameter(espeakCAPITALS, NONE, 0) ' Annuncia eventualmente una lettera maiuscola If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakCAPITALS' !") err = espeak_SetParameter(espeakWORDGAP, 6, 0) ' Pausa tra le parole (unità di 10mS come velocità prestabilita = 1 ) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakWORDGAP' !") size = Len(testo) ' Attiva il motore di sintetizzazione vocale di "eSpeack": err = espeak_Synth(testo, size + 1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, Null, Null) If err <> EE_OK Then Error.Raise("Errore nell'operazione di sintetizzazione vocale del testo !") err = espeak_Synchronize() If err < EE_OK Then Error.Raise("Errore alla funzione 'espeak_Synchronize' !") ' Chiude la libreria: err = espeak_Terminate() End
Uso della libreria "libespeak-ng.so"
E' possibile usare anche la libreria condivisa: "libespeak-ng.so.1.1.51 ".
Library "libespeak-ng:1.1.51" Private Const espeakSSML As Byte = 16 Private Const espeakPHONEMES As Short = 256 Private Const espeakENDPAUSE As Short = 4096 Private Const espeakKEEP_NAMEDATA As Short = 8192 Private Enum AUDIO_OUTPUT_PLAYBACK = 0, AUDIO_OUTPUT_RETRIEVAL, AUDIO_OUTPUT_SYNCHRONOUS, AUDIO_OUTPUT_SYNCH_PLAYBACK Private Enum EE_INTERNAL_ERROR = -1, EE_OK, EE_BUFFER_FULL, EE_NOT_FOUND Private Enum POS_CHARACTER = 1, POS_WORD, POS_SENTENCE Private Enum espeakCHARS_AUTO = 0, espeakCHARS_UTF8, espeakCHARS_8BIT, espeakCHARS_WCHAR, espeakCHARS_16BIT Private Enum espeakRATE = 1, espeakVOLUME, espeakPITCH, espeakRANGE, espeakPUNCTUATION, espeakCAPITALS, espeakWORDGAP ' int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options) ' Inizializza la libreria 'libespeak'. Ritorna la frequenza di camionamento in Hz, oppure -1 (EE_INTERNAL_ERROR) Private Extern espeak_Initialize(audio_output As Byte, buflength As Integer, path As String, options As Integer) As Integer ' espeak_ERROR espeak_SetVoiceByName(const char *name) ' Searches for a voice with a matching "name" field. For example, "en" for English, "de" for German, "it" for Italian. Private Extern espeak_SetVoiceByName(name As String) As Integer ' espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int relative) ' Sets the value of the specified parameter. relative = 0 sets the absolute value of the parameter. relative = 1 sets a relative value of the parameter. Private Extern espeak_SetParameter(parameter As Byte, value As Integer, relative As Integer) As Integer ' espeak_ERROR espeak_Synth(const void *text, size_t size, unsigned int position, espeak_POSITION_TYPE position_type, unsigned int end_position, unsigned int flags, unsigned int* unique_identifier, void* user_data) ' Synthesize speech for the specified text. Private Extern espeak_Synth(text As String, size As Integer, posiztion As Integer, position_type As Pointer, end_position As Integer, flags As Integer, unique_identifier As Pointer, user_data As Pointer) As Integer ' espeak_ERROR espeak_Synchronize(void) ' This function returns when all data have been spoken. Private Extern espeak_Synchronize() As Integer ' espeak_ERROR espeak_Terminate(void) ' last function to be called. Private Extern espeak_Terminate() As Integer ' const char *espeak_Info(const char **path_data) ' Returns the version number string. 'path_data' returns the path to espeak_data. Private Extern espeak_Info(path_data As Pointer) As String Public Sub Main() Dim data_path, versione_lib, nomevoce, testo As String Dim freqcamp, err, size As Integer Dim percorso_dati As Pointer ' Imposta il testo da pronunciare: testo = "www.Gambas-it.org è il sito della comunità italiana dei programmatori Gambas." data_path = Null nomevoce = "it" ' Inizializza la libreria: freqcamp = espeak_Initialize(AUDIO_OUTPUT_SYNCH_PLAYBACK, 0, data_path, 0) If freqcamp = EE_INTERNAL_ERROR Then Error.Raise("Errore nell'inizializzazione della libreria 'libespeak' !") Else Print "Frequenza di campionamento = " & freqcamp & " Hertz" Endif versione_lib = espeak_Info(VarPtr(percorso_dati)) Print "Versione della libreria: " & versione_lib Print "Percorso dei dati della libreria: " & String@(percorso_dati) err = espeak_SetVoiceByName(nomevoce) If err <> EE_OK Then Error.Raise("Errore nell'impostazione della lingua !") ' Imposta alcuni parametri di lettura: err = espeak_SetParameter(espeakRATE, 140, 0) ' Velocità del parlato in parole-per minuto (valori: 80 - 450) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakRATE' !") err = espeak_SetParameter(espeakVOLUME, 100, 0) ' Volume (valori 0- 200) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakVOLUME' !") err = espeak_SetParameter(espeakPITCH, 50, 0) ' Tono (valori: 0 - 100) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakPITCH' !") err = espeak_SetParameter(espeakRANGE, 50, 0) ' Gamma tonale (valori: 0 - 100; 0 = monotono) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakRANGE' !") err = espeak_SetParameter(espeakWORDGAP, 6, 0) ' Pausa tra le parole (unità di 10mS come velocità prestabilita = 1 ) If err <> EE_OK Then Error.Raise("Errore nell'impostazione del parametro 'espeakWORDGAP' !") size = Len(testo) ' Attiva il motore di sintetizzazione vocale di "eSpeack": err = espeak_Synth(testo, size + 1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO, Null, Null) If err <> EE_OK Then Error.Raise("Errore nell'operazione di sintetizzazione vocale del testo !") err = espeak_Synchronize() If err < EE_OK Then Error.Raise("Errore alla funzione 'espeak_Synchronize' !") ' Chiude la libreria: err = espeak_Terminate() End
Riferimenti
- Il sito eSpeak text to speech
- Il sito del API di eSpeack