espeak.bac

'
' eSpeak definitions based on libespeak 1.47 - http://espeak.sourceforge.net/
'
' Ported to BaCon INCLUDE file by Peter van Eerten - MIT License 2016.
'
' Version 1.0: Initial release - thanks to vovchik for his groundbreaking work.
' Version 1.1: Allow SSML tags in text.
'
'-----------------------------------------------------------------------------------
'
' API by vovchik - 2015
'
' ESPEAK_INIT(voice$)
'  => Initialize eSpeak on default sound device. Voice can be empty, or NULL, or "en", "en-us",
'        "nl", "de", "ru", etc. or a common ISO 639-1 code. See http://espeak.sourceforge.net/languages.html
'
' ESPEAK_INFO
'  => Print some information about the eSpeak version
'
' ESPEAK_SET(parameter, value)
'  => Set properties of the eSpeak voice:
'
'    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, value 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)
'    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)
'
' ESPEAK_SAY(text$)
'  => Speak the text$
'
' ESPEAK_FREE
'  => Free allocated resources for eSpeak
'
'-----------------------------------------------------------------------------------

ESPEAK_lib$ = "libespeak.so.0"
ESPEAK_seq = -1

CATCH GOTO espeak_lib_import_retry

LABEL espeak_lib_import_retry
    INCR ESPEAK_seq
    IF ESPEAK_seq > 100 THEN
        PRINT "No eSpeak library found! Exiting."
        END 1
    ENDIF
    ESPEAK_lib$ = LEFT$(ESPEAK_lib$, INSTRREV(ESPEAK_lib$, ".")) & STR$(ESPEAK_seq)

IMPORT "espeak_Initialize(int,int,const char*,int)" FROM ESPEAK_lib$ TYPE int

CATCH RESET

ENUM
    POS_CHARACTER = 1,
    POS_WORD,
    POS_SENTENCE
ENDENUM

ENUM
    AUDIO_OUTPUT_PLAYBACK,
    AUDIO_OUTPUT_RETRIEVAL,
    AUDIO_OUTPUT_SYNCHRONOUS,
    AUDIO_OUTPUT_SYNCH_PLAYBACK
ENDENUM

ENUM
    EE_OK=0,
    EE_INTERNAL_ERROR=-1,
    EE_BUFFER_FULL=1,
    EE_NOT_FOUND=2
ENDENUM

ENUM
    espeakSILENCE=0, /* internal use */
    espeakRATE=1,
    espeakVOLUME=2,
    espeakPITCH=3,
    espeakRANGE=4,
    espeakPUNCTUATION=5,
    espeakCAPITALS=6,
    espeakWORDGAP=7,
    espeakOPTIONS=8,
    espeakINTONATION=9,
    espeakRESERVED1=10,
    espeakRESERVED2=11,
    espeakEMPHASIS,   /* internal use */
    espeakLINELENGTH, /* internal use */
    espeakVOICETYPE,  /* internal, 1=mbrola */
    N_SPEECH_PARAM    /* last enum */
ENDENUM

ENUM
    espeakPUNCT_NONE=0,
    espeakPUNCT_ALL=1,
    espeakPUNCT_SOME=2
ENDENUM

CONST espeakCHARS_AUTO = 0
CONST espeakCHARS_UTF8 = 1
CONST espeakCHARS_8BIT = 2
CONST espeakCHARS_WCHAR = 3
CONST espeakCHARS_16BIT = 4

CONST espeakSSML = 0x10
CONST espeakPHONEMES = 0x100
CONST espeakENDPAUSE = 0x1000
CONST espeakKEEP_NAMEDATA = 0x2000

IMPORT "espeak_SetSynthCallback(void*)" FROM ESPEAK_lib$ TYPE void
IMPORT "espeak_SetUriCallback(void*)" FROM ESPEAK_lib$ TYPE void
IMPORT "espeak_Synth(const void*,size_t,unsigned int,int,unsigned int,unsigned int,unsigned int*,void*)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_Synth_Mark(const void*,size_t,char*,unsigned int,unsigned int,unsigned int*,void*)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_Key(char*)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_Char(short)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_SetParameter(int,int,int)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_GetParameter(int,int)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_SetPunctuationList(char*)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_SetPhonemeTrace(int,FILE*)" FROM ESPEAK_lib$ TYPE void
IMPORT "espeak_TextToPhonemes(const void**,int,int)" FROM ESPEAK_lib$ TYPE const char*
IMPORT "espeak_CompileDictionary(const char*,FILE*,int)" FROM ESPEAK_lib$ TYPE void
/* espeak_ListVoices */
IMPORT "espeak_SetVoiceByName(char*)" FROM ESPEAK_lib$ TYPE int
/* espeak_SetVoiceByProperties */
/* espeak_GetCurrentVoice */
IMPORT "espeak_Cancel(void)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_IsPlaying(void)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_Synchronize(void)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_Terminate(void)" FROM ESPEAK_lib$ TYPE int
IMPORT "espeak_Info(const char**)" FROM ESPEAK_lib$ TYPE char*

SUB ESPEAK_INIT(voice$)

    espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, NULL, 0)
    
    IF LEN(voice$) = 0 THEN
        espeak_SetVoiceByName("default")
    ELSE
        espeak_SetVoiceByName(voice$)
    ENDIF

END SUB

SUB ESPEAK_INFO
    
    LOCAL version$

    version$ = espeak_Info(NULL)

    PRINT "Version of eSpeak: ", version$

END SUB

SUB SPEAK_SET(int parameter, int value)

    espeak_SetParameter(parameter, value, 0)

END SUB

SUB ESPEAK_SAY(STRING text$)

    espeak_Synth(text$, LEN(text$), 0, POS_CHARACTER, 0, espeakPHONEMES|espeakSSML|espeakENDPAUSE, NULL, NULL)
    espeak_Synchronize()

END SUB

SUB ESPEAK_EXIT

    espeak_Cancel()
    espeak_Terminate()

END SUB

Generated by GNU Enscript 1.6.5.90.