123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613 |
- #ifndef SPEAK_LIB_H
- #define SPEAK_LIB_H
- /***************************************************************************
- * Copyright (C) 2005 to 2010 by Jonathan Duddington *
- * email: [email protected] *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, see: *
- * <http://www.gnu.org/licenses/>. *
- ***************************************************************************/
-
-
- /*************************************************************/
- /* This is the header file for the library version of espeak */
- /* */
- /*************************************************************/
-
- #include <stdio.h>
- #include <stddef.h>
-
- #define ESPEAK_API_REVISION 6
- /*
- Revision 2
- Added parameter "options" to eSpeakInitialize()
-
- Revision 3
- Added espeakWORDGAP to espeak_PARAMETER
-
- Revision 4
- Added flags parameter to espeak_CompileDictionary()
-
- Revision 5
- Added espeakCHARS_16BIT
-
- Revision 6
- Added macros: espeakRATE_MINIMUM, espeakRATE_MAXIMUM, espeakRATE_NORMAL
- */
- /********************/
- /* Initialization */
- /********************/
-
- // values for 'value' in espeak_SetParameter(espeakRATE, value, 0), nominally in words-per-minute
- #define espeakRATE_MINIMUM 80
- #define espeakRATE_MAXIMUM 450
- #define espeakRATE_NORMAL 175
-
-
- typedef enum {
- espeakEVENT_LIST_TERMINATED = 0, // Retrieval mode: terminates the event list.
- espeakEVENT_WORD = 1, // Start of word
- espeakEVENT_SENTENCE = 2, // Start of sentence
- espeakEVENT_MARK = 3, // Mark
- espeakEVENT_PLAY = 4, // Audio element
- espeakEVENT_END = 5, // End of sentence or clause
- espeakEVENT_MSG_TERMINATED = 6, // End of message
- espeakEVENT_PHONEME = 7, // Phoneme, if enabled in espeak_Initialize()
- espeakEVENT_SAMPLERATE = 8 // internal use, set sample rate
- } espeak_EVENT_TYPE;
-
-
-
- typedef struct {
- espeak_EVENT_TYPE type;
- unsigned int unique_identifier; // message identifier (or 0 for key or character)
- int text_position; // the number of characters from the start of the text
- int length; // word length, in characters (for espeakEVENT_WORD)
- int audio_position; // the time in mS within the generated speech output data
- int sample; // sample id (internal use)
- void* user_data; // pointer supplied by the calling program
- union {
- int number; // used for WORD and SENTENCE events. For PHONEME events this is the phoneme mnemonic.
- const char *name; // used for MARK and PLAY events. UTF8 string
- } id;
- } espeak_EVENT;
- /*
- When a message is supplied to espeak_synth, the request is buffered and espeak_synth returns. When the message is really processed, the callback function will be repetedly called.
-
-
- In RETRIEVAL mode, the callback function supplies to the calling program the audio data and an event list terminated by 0 (LIST_TERMINATED).
-
- In PLAYBACK mode, the callback function is called as soon as an event happens.
-
- For example suppose that the following message is supplied to espeak_Synth:
- "hello, hello."
-
-
- * Once processed in RETRIEVAL mode, it could lead to 3 calls of the callback function :
-
- ** Block 1:
- <audio data> +
- List of events: SENTENCE + WORD + LIST_TERMINATED
-
- ** Block 2:
- <audio data> +
- List of events: WORD + END + LIST_TERMINATED
-
- ** Block 3:
- no audio data
- List of events: MSG_TERMINATED + LIST_TERMINATED
-
-
- * Once processed in PLAYBACK mode, it could lead to 5 calls of the callback function:
-
- ** SENTENCE
- ** WORD (call when the sounds are actually played)
- ** WORD
- ** END (call when the end of sentence is actually played.)
- ** MSG_TERMINATED
-
-
- The MSG_TERMINATED event is the last event. It can inform the calling program to clear the user data related to the message.
- So if the synthesis must be stopped, the callback function is called for each pending message with the MSG_TERMINATED event.
-
- A MARK event indicates a <mark> element in the text.
- A PLAY event indicates an <audio> element in the text, for which the calling program should play the named sound file.
- */
-
-
-
- typedef enum {
- POS_CHARACTER = 1,
- POS_WORD,
- POS_SENTENCE
- } espeak_POSITION_TYPE;
-
-
- typedef enum {
- /* PLAYBACK mode: plays the audio data, supplies events to the calling program*/
- AUDIO_OUTPUT_PLAYBACK,
-
- /* RETRIEVAL mode: supplies audio data and events to the calling program */
- AUDIO_OUTPUT_RETRIEVAL,
-
- /* SYNCHRONOUS mode: as RETRIEVAL but doesn't return until synthesis is completed */
- AUDIO_OUTPUT_SYNCHRONOUS,
-
- /* Synchronous playback */
- AUDIO_OUTPUT_SYNCH_PLAYBACK
-
- } espeak_AUDIO_OUTPUT;
-
-
- typedef enum {
- EE_OK=0,
- EE_INTERNAL_ERROR=-1,
- EE_BUFFER_FULL=1,
- EE_NOT_FOUND=2
- } espeak_ERROR;
-
-
- #ifdef __cplusplus
- extern "C"
- #endif
- int espeak_Initialize(espeak_AUDIO_OUTPUT output, int buflength, const char *path, int options);
- /* Must be called before any synthesis functions are called.
- output: the audio data can either be played by eSpeak or passed back by the SynthCallback function.
-
- buflength: The length in mS of sound buffers passed to the SynthCallback function.
-
- path: The directory which contains the espeak-data directory, or NULL for the default location.
-
- options: bit 0: 1=allow espeakEVENT_PHONEME events.
-
-
- Returns: sample rate in Hz, or -1 (EE_INTERNAL_ERROR).
- */
-
- typedef int (t_espeak_callback)(short*, int, espeak_EVENT*);
-
- #ifdef __cplusplus
- extern "C"
- #endif
- void espeak_SetSynthCallback(t_espeak_callback* SynthCallback);
- /* Must be called before any synthesis functions are called.
- This specifies a function in the calling program which is called when a buffer of
- speech sound data has been produced.
-
-
- The callback function is of the form:
-
- int SynthCallback(short *wav, int numsamples, espeak_EVENT *events);
-
- wav: is the speech sound data which has been produced.
- NULL indicates that the synthesis has been completed.
-
- numsamples: is the number of entries in wav. This number may vary, may be less than
- the value implied by the buflength parameter given in espeak_Initialize, and may
- sometimes be zero (which does NOT indicate end of synthesis).
-
- events: an array of espeak_EVENT items which indicate word and sentence events, and
- also the occurance if <mark> and <audio> elements within the text. The list of
- events is terminated by an event of type = 0.
-
-
- Callback returns: 0=continue synthesis, 1=abort synthesis.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- void espeak_SetUriCallback(int (*UriCallback)(int, const char*, const char*));
- /* This function may be called before synthesis functions are used, in order to deal with
- <audio> tags. It specifies a callback function which is called when an <audio> element is
- encountered and allows the calling program to indicate whether the sound file which
- is specified in the <audio> element is available and is to be played.
-
- The callback function is of the form:
-
- int UriCallback(int type, const char *uri, const char *base);
-
- type: type of callback event. Currently only 1= <audio> element
-
- uri: the "src" attribute from the <audio> element
-
- base: the "xml:base" attribute (if any) from the <speak> element
-
- Return: 1=don't play the sound, but speak the text alternative.
- 0=place a PLAY event in the event list at the point where the <audio> element
- occurs. The calling program can then play the sound at that point.
- */
-
-
- /********************/
- /* Synthesis */
- /********************/
-
-
- #define espeakCHARS_AUTO 0
- #define espeakCHARS_UTF8 1
- #define espeakCHARS_8BIT 2
- #define espeakCHARS_WCHAR 3
- #define espeakCHARS_16BIT 4
-
- #define espeakSSML 0x10
- #define espeakPHONEMES 0x100
- #define espeakENDPAUSE 0x1000
- #define espeakKEEP_NAMEDATA 0x2000
-
- #ifdef __cplusplus
- extern "C"
- #endif
- 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. The speech sound data is passed to the calling
- program in buffers by means of the callback function specified by espeak_SetSynthCallback(). The command is asynchronous: it is internally buffered and returns as soon as possible. If espeak_Initialize was previously called with AUDIO_OUTPUT_PLAYBACK as argument, the sound data are played by eSpeak.
-
- text: The text to be spoken, terminated by a zero character. It may be either 8-bit characters,
- wide characters (wchar_t), or UTF8 encoding. Which of these is determined by the "flags"
- parameter.
-
- size: Equal to (or greatrer than) the size of the text data, in bytes. This is used in order
- to allocate internal storage space for the text. This value is not used for
- AUDIO_OUTPUT_SYNCHRONOUS mode.
-
- position: The position in the text where speaking starts. Zero indicates speak from the
- start of the text.
-
- position_type: Determines whether "position" is a number of characters, words, or sentences.
- Values:
-
- end_position: If set, this gives a character position at which speaking will stop. A value
- of zero indicates no end position.
-
- flags: These may be OR'd together:
- Type of character codes, one of:
- espeakCHARS_UTF8 UTF8 encoding
- espeakCHARS_8BIT The 8 bit ISO-8859 character set for the particular language.
- espeakCHARS_AUTO 8 bit or UTF8 (this is the default)
- espeakCHARS_WCHAR Wide characters (wchar_t)
-
- espeakSSML Elements within < > are treated as SSML elements, or if not recognised are ignored.
-
- espeakPHONEMES Text within [[ ]] is treated as phonemes codes (in espeak's Hirshenbaum encoding).
-
- espeakENDPAUSE If set then a sentence pause is added at the end of the text. If not set then
- this pause is suppressed.
-
- unique_identifier: message identifier; helpful for identifying later
- data supplied to the callback.
-
- user_data: pointer which will be passed to the callback function.
-
- Return: EE_OK: operation achieved
- EE_BUFFER_FULL: the command can not be buffered;
- you may try after a while to call the function again.
- EE_INTERNAL_ERROR.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_Synth_Mark(const void *text,
- size_t size,
- const char *index_mark,
- unsigned int end_position,
- unsigned int flags,
- unsigned int* unique_identifier,
- void* user_data);
- /* Synthesize speech for the specified text. Similar to espeak_Synth() but the start position is
- specified by the name of a <mark> element in the text.
-
- index_mark: The "name" attribute of a <mark> element within the text which specified the
- point at which synthesis starts. UTF8 string.
-
- For the other parameters, see espeak_Synth()
-
- Return: EE_OK: operation achieved
- EE_BUFFER_FULL: the command can not be buffered;
- you may try after a while to call the function again.
- EE_INTERNAL_ERROR.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_Key(const char *key_name);
- /* Speak the name of a keyboard key.
- If key_name is a single character, it speaks the name of the character.
- Otherwise, it speaks key_name as a text string.
-
- Return: EE_OK: operation achieved
- EE_BUFFER_FULL: the command can not be buffered;
- you may try after a while to call the function again.
- EE_INTERNAL_ERROR.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_Char(wchar_t character);
- /* Speak the name of the given character
-
- Return: EE_OK: operation achieved
- EE_BUFFER_FULL: the command can not be buffered;
- you may try after a while to call the function again.
- EE_INTERNAL_ERROR.
- */
-
-
-
-
- /***********************/
- /* Speech Parameters */
- /***********************/
-
- typedef enum {
- espeakSILENCE=0, /* internal use */
- espeakRATE=1,
- espeakVOLUME=2,
- espeakPITCH=3,
- espeakRANGE=4,
- espeakPUNCTUATION=5,
- espeakCAPITALS=6,
- espeakWORDGAP=7,
- espeakOPTIONS=8, // reserved for misc. options. not yet used
- espeakINTONATION=9,
-
- espeakRESERVED1=10,
- espeakRESERVED2=11,
- espeakEMPHASIS, /* internal use */
- espeakLINELENGTH, /* internal use */
- espeakVOICETYPE, // internal, 1=mbrola
- N_SPEECH_PARAM /* last enum */
- } espeak_PARAMETER;
-
- typedef enum {
- espeakPUNCT_NONE=0,
- espeakPUNCT_ALL=1,
- espeakPUNCT_SOME=2
- } espeak_PUNCT_TYPE;
-
- #ifdef __cplusplus
- extern "C"
- #endif
- 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.
-
- parameter:
- espeakRATE: speaking speed in word per minute. Values 80 to 450.
-
- espeakVOLUME: volume in range 0-200 or more.
- 0=silence, 100=normal full volume, greater values may produce amplitude compression or distortion
-
- espeakPITCH: base pitch, range 0-100. 50=normal
-
- espeakRANGE: pitch range, range 0-100. 0-monotone, 50=normal
-
- espeakPUNCTUATION: which punctuation characters to announce:
- value in espeak_PUNCT_TYPE (none, all, some),
- see espeak_GetParameter() to specify which characters are announced.
-
- espeakCAPITALS: announce capital letters by:
- 0=none,
- 1=sound icon,
- 2=spelling,
- 3 or higher, by raising pitch. This values gives the amount in Hz by which the pitch
- of a word raised to indicate it has a capital letter.
-
- espeakWORDGAP: pause between words, units of 10mS (at the default speed)
-
- Return: EE_OK: operation achieved
- EE_BUFFER_FULL: the command can not be buffered;
- you may try after a while to call the function again.
- EE_INTERNAL_ERROR.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- int espeak_GetParameter(espeak_PARAMETER parameter, int current);
- /* current=0 Returns the default value of the specified parameter.
- current=1 Returns the current value of the specified parameter, as set by SetParameter()
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_SetPunctuationList(const wchar_t *punctlist);
- /* Specified a list of punctuation characters whose names are to be spoken when the
- value of the Punctuation parameter is set to "some".
-
- punctlist: A list of character codes, terminated by a zero character.
-
- Return: EE_OK: operation achieved
- EE_BUFFER_FULL: the command can not be buffered;
- you may try after a while to call the function again.
- EE_INTERNAL_ERROR.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- void espeak_SetPhonemeTrace(int value, FILE *stream);
- /* Controls the output of phoneme symbols for the text
- value=0 No phoneme output (default)
- value=1 Output the translated phoneme symbols for the text
- value=2 as (1), but also output a trace of how the translation was done (matching rules and list entries)
- value=3 as (1), but produces IPA rather than ascii phoneme names
-
- stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- void espeak_CompileDictionary(const char *path, FILE *log, int flags);
- /* Compile pronunciation dictionary for a language which corresponds to the currently
- selected voice. The required voice should be selected before calling this function.
-
- path: The directory which contains the language's '_rules' and '_list' files.
- 'path' should end with a path separator character ('/').
- log: Stream for error reports and statistics information. If log=NULL then stderr will be used.
-
- flags: Bit 0: include source line information for debug purposes (This is displayed with the
- -X command line option).
- */
- /***********************/
- /* Voice Selection */
- /***********************/
-
-
- // voice table
- typedef struct {
- const char *name; // a given name for this voice. UTF8 string.
- const char *languages; // list of pairs of (byte) priority + (string) language (and dialect qualifier)
- const char *identifier; // the filename for this voice within espeak-data/voices
- unsigned char gender; // 0=none 1=male, 2=female,
- unsigned char age; // 0=not specified, or age in years
- unsigned char variant; // only used when passed as a parameter to espeak_SetVoiceByProperties
- unsigned char xx1; // for internal use
- int score; // for internal use
- void *spare; // for internal use
- } espeak_VOICE;
-
- /* Note: The espeak_VOICE structure is used for two purposes:
- 1. To return the details of the available voices.
- 2. As a parameter to espeak_SetVoiceByProperties() in order to specify selection criteria.
-
- In (1), the "languages" field consists of a list of (UTF8) language names for which this voice
- may be used, each language name in the list is terminated by a zero byte and is also preceded by
- a single byte which gives a "priority" number. The list of languages is terminated by an
- additional zero byte.
-
- A language name consists of a language code, optionally followed by one or more qualifier (dialect)
- names separated by hyphens (eg. "en-uk"). A voice might, for example, have languages "en-uk" and
- "en". Even without "en" listed, voice would still be selected for the "en" language (because
- "en-uk" is related) but at a lower priority.
-
- The priority byte indicates how the voice is preferred for the language. A low number indicates a
- more preferred voice, a higher number indicates a less preferred voice.
-
- In (2), the "languages" field consists simply of a single (UTF8) language name, with no preceding
- priority byte.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec);
- /* Reads the voice files from espeak-data/voices and creates an array of espeak_VOICE pointers.
- The list is terminated by a NULL pointer
-
- If voice_spec is NULL then all voices are listed.
- If voice spec is given, then only the voices which are compatible with the voice_spec
- are listed, and they are listed in preference order.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_SetVoiceByName(const char *name);
- /* Searches for a voice with a matching "name" field. Language is not considered.
- "name" is a UTF8 string.
-
- Return: EE_OK: operation achieved
- EE_BUFFER_FULL: the command can not be buffered;
- you may try after a while to call the function again.
- EE_INTERNAL_ERROR.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_SetVoiceByProperties(espeak_VOICE *voice_spec);
- /* An espeak_VOICE structure is used to pass criteria to select a voice. Any of the following
- fields may be set:
-
- name NULL, or a voice name
-
- languages NULL, or a single language string (with optional dialect), eg. "en-uk", or "en"
-
- gender 0=not specified, 1=male, 2=female
-
- age 0=not specified, or an age in years
-
- variant After a list of candidates is produced, scored and sorted, "variant" is used to index
- that list and choose a voice.
- variant=0 takes the top voice (i.e. best match). variant=1 takes the next voice, etc
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_VOICE *espeak_GetCurrentVoice(void);
- /* Returns the espeak_VOICE data for the currently selected voice.
- This is not affected by temporary voice changes caused by SSML elements such as <voice> and <s>
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_Cancel(void);
- /* Stop immediately synthesis and audio output of the current text. When this
- function returns, the audio output is fully stopped and the synthesizer is ready to
- synthesize a new message.
-
- Return: EE_OK: operation achieved
- EE_INTERNAL_ERROR.
- */
-
-
- #ifdef __cplusplus
- extern "C"
- #endif
- int espeak_IsPlaying(void);
- /* Returns 1 if audio is played, 0 otherwise.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_Synchronize(void);
- /* This function returns when all data have been spoken.
- Return: EE_OK: operation achieved
- EE_INTERNAL_ERROR.
- */
-
- #ifdef __cplusplus
- extern "C"
- #endif
- espeak_ERROR espeak_Terminate(void);
- /* last function to be called.
- Return: EE_OK: operation achieved
- EE_INTERNAL_ERROR.
- */
-
-
- #ifdef __cplusplus
- extern "C"
- #endif
- const char *espeak_Info(void* ptr);
- /* Returns the version number string.
- The parameter is for future use, and should be set to NULL
- */
- #endif
|