/* File: SpeechSynthesis.h Contains: Speech Interfaces. Version: Technology: System 7.5 Release: QuickTime 6.0.2 Copyright: (c) 1989-2001 by Apple Computer, Inc., all rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __SPEECHSYNTHESIS__ #define __SPEECHSYNTHESIS__ #ifndef __MACTYPES__ #include #endif #ifndef __MIXEDMODE__ #include #endif #ifndef __FILES__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif enum { kTextToSpeechSynthType = FOUR_CHAR_CODE('ttsc'), kTextToSpeechVoiceType = FOUR_CHAR_CODE('ttvd'), kTextToSpeechVoiceFileType = FOUR_CHAR_CODE('ttvf'), kTextToSpeechVoiceBundleType = FOUR_CHAR_CODE('ttvb') }; enum { kNoEndingProsody = 1, kNoSpeechInterrupt = 2, kPreflightThenPause = 4 }; enum { kImmediate = 0, kEndOfWord = 1, kEndOfSentence = 2 }; /*------------------------------------------*/ /* GetSpeechInfo & SetSpeechInfo selectors */ /*------------------------------------------*/ enum { soStatus = FOUR_CHAR_CODE('stat'), soErrors = FOUR_CHAR_CODE('erro'), soInputMode = FOUR_CHAR_CODE('inpt'), soCharacterMode = FOUR_CHAR_CODE('char'), soNumberMode = FOUR_CHAR_CODE('nmbr'), soRate = FOUR_CHAR_CODE('rate'), soPitchBase = FOUR_CHAR_CODE('pbas'), soPitchMod = FOUR_CHAR_CODE('pmod'), soVolume = FOUR_CHAR_CODE('volm'), soSynthType = FOUR_CHAR_CODE('vers'), soRecentSync = FOUR_CHAR_CODE('sync'), soPhonemeSymbols = FOUR_CHAR_CODE('phsy'), soCurrentVoice = FOUR_CHAR_CODE('cvox'), soCommandDelimiter = FOUR_CHAR_CODE('dlim'), soReset = FOUR_CHAR_CODE('rset'), soCurrentA5 = FOUR_CHAR_CODE('myA5'), soRefCon = FOUR_CHAR_CODE('refc'), soTextDoneCallBack = FOUR_CHAR_CODE('tdcb'), /* use with SpeechTextDoneProcPtr*/ soSpeechDoneCallBack = FOUR_CHAR_CODE('sdcb'), /* use with SpeechDoneProcPtr*/ soSyncCallBack = FOUR_CHAR_CODE('sycb'), /* use with SpeechSyncProcPtr*/ soErrorCallBack = FOUR_CHAR_CODE('ercb'), /* use with SpeechErrorProcPtr*/ soPhonemeCallBack = FOUR_CHAR_CODE('phcb'), /* use with SpeechPhonemeProcPtr*/ soWordCallBack = FOUR_CHAR_CODE('wdcb'), soSynthExtension = FOUR_CHAR_CODE('xtnd'), soSoundOutput = FOUR_CHAR_CODE('sndo') }; /*------------------------------------------*/ /* Speaking Mode Constants */ /*------------------------------------------*/ enum { modeText = FOUR_CHAR_CODE('TEXT'), /* input mode constants */ modePhonemes = FOUR_CHAR_CODE('PHON'), modeNormal = FOUR_CHAR_CODE('NORM'), /* character mode and number mode constants */ modeLiteral = FOUR_CHAR_CODE('LTRL') }; enum { soVoiceDescription = FOUR_CHAR_CODE('info'), soVoiceFile = FOUR_CHAR_CODE('fref') }; typedef struct OpaqueSpeechChannel* SpeechChannel; struct VoiceSpec { OSType creator; OSType id; }; typedef struct VoiceSpec VoiceSpec; typedef VoiceSpec * VoiceSpecPtr; enum { kNeuter = 0, kMale = 1, kFemale = 2 }; struct VoiceDescription { long length; VoiceSpec voice; long version; Str63 name; Str255 comment; short gender; short age; short script; short language; short region; long reserved[4]; }; typedef struct VoiceDescription VoiceDescription; struct VoiceFileInfo { FSSpec fileSpec; short resID; }; typedef struct VoiceFileInfo VoiceFileInfo; struct SpeechStatusInfo { Boolean outputBusy; Boolean outputPaused; long inputBytesLeft; short phonemeCode; }; typedef struct SpeechStatusInfo SpeechStatusInfo; struct SpeechErrorInfo { short count; OSErr oldest; long oldPos; OSErr newest; long newPos; }; typedef struct SpeechErrorInfo SpeechErrorInfo; struct SpeechVersionInfo { OSType synthType; OSType synthSubType; OSType synthManufacturer; long synthFlags; NumVersion synthVersion; }; typedef struct SpeechVersionInfo SpeechVersionInfo; struct PhonemeInfo { short opcode; Str15 phStr; Str31 exampleStr; short hiliteStart; short hiliteEnd; }; typedef struct PhonemeInfo PhonemeInfo; struct PhonemeDescriptor { short phonemeCount; PhonemeInfo thePhonemes[1]; }; typedef struct PhonemeDescriptor PhonemeDescriptor; struct SpeechXtndData { OSType synthCreator; Byte synthData[2]; }; typedef struct SpeechXtndData SpeechXtndData; struct DelimiterInfo { Byte startDelimiter[2]; Byte endDelimiter[2]; }; typedef struct DelimiterInfo DelimiterInfo; typedef CALLBACK_API( void , SpeechTextDoneProcPtr )(SpeechChannel chan, long refCon, const void **nextBuf, unsigned long *byteLen, long *controlFlags); typedef CALLBACK_API( void , SpeechDoneProcPtr )(SpeechChannel chan, long refCon); typedef CALLBACK_API( void , SpeechSyncProcPtr )(SpeechChannel chan, long refCon, OSType syncMessage); typedef CALLBACK_API( void , SpeechErrorProcPtr )(SpeechChannel chan, long refCon, OSErr theError, long bytePos); typedef CALLBACK_API( void , SpeechPhonemeProcPtr )(SpeechChannel chan, long refCon, short phonemeOpcode); typedef CALLBACK_API( void , SpeechWordProcPtr )(SpeechChannel chan, long refCon, unsigned long wordPos, unsigned short wordLen); typedef STACK_UPP_TYPE(SpeechTextDoneProcPtr) SpeechTextDoneUPP; typedef STACK_UPP_TYPE(SpeechDoneProcPtr) SpeechDoneUPP; typedef STACK_UPP_TYPE(SpeechSyncProcPtr) SpeechSyncUPP; typedef STACK_UPP_TYPE(SpeechErrorProcPtr) SpeechErrorUPP; typedef STACK_UPP_TYPE(SpeechPhonemeProcPtr) SpeechPhonemeUPP; typedef STACK_UPP_TYPE(SpeechWordProcPtr) SpeechWordUPP; #if OPAQUE_UPP_TYPES #if CALL_NOT_IN_CARBON EXTERN_API(SpeechTextDoneUPP) NewSpeechTextDoneUPP (SpeechTextDoneProcPtr userRoutine); EXTERN_API(SpeechDoneUPP) NewSpeechDoneUPP (SpeechDoneProcPtr userRoutine); EXTERN_API(SpeechSyncUPP) NewSpeechSyncUPP (SpeechSyncProcPtr userRoutine); EXTERN_API(SpeechErrorUPP) NewSpeechErrorUPP (SpeechErrorProcPtr userRoutine); EXTERN_API(SpeechPhonemeUPP) NewSpeechPhonemeUPP (SpeechPhonemeProcPtr userRoutine); EXTERN_API(SpeechWordUPP) NewSpeechWordUPP (SpeechWordProcPtr userRoutine); EXTERN_API(void) DisposeSpeechTextDoneUPP (SpeechTextDoneUPP userUPP); EXTERN_API(void) DisposeSpeechDoneUPP (SpeechDoneUPP userUPP); EXTERN_API(void) DisposeSpeechSyncUPP (SpeechSyncUPP userUPP); EXTERN_API(void) DisposeSpeechErrorUPP (SpeechErrorUPP userUPP); EXTERN_API(void) DisposeSpeechPhonemeUPP (SpeechPhonemeUPP userUPP); EXTERN_API(void) DisposeSpeechWordUPP (SpeechWordUPP userUPP); EXTERN_API(void) InvokeSpeechTextDoneUPP (SpeechChannel chan, long refCon, const void ** nextBuf, unsigned long * byteLen, long * controlFlags, SpeechTextDoneUPP userUPP); EXTERN_API(void) InvokeSpeechDoneUPP (SpeechChannel chan, long refCon, SpeechDoneUPP userUPP); EXTERN_API(void) InvokeSpeechSyncUPP (SpeechChannel chan, long refCon, OSType syncMessage, SpeechSyncUPP userUPP); EXTERN_API(void) InvokeSpeechErrorUPP (SpeechChannel chan, long refCon, OSErr theError, long bytePos, SpeechErrorUPP userUPP); EXTERN_API(void) InvokeSpeechPhonemeUPP (SpeechChannel chan, long refCon, short phonemeOpcode, SpeechPhonemeUPP userUPP); EXTERN_API(void) InvokeSpeechWordUPP (SpeechChannel chan, long refCon, unsigned long wordPos, unsigned short wordLen, SpeechWordUPP userUPP); #endif /* CALL_NOT_IN_CARBON */ #else enum { uppSpeechTextDoneProcInfo = 0x0000FFC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */ enum { uppSpeechDoneProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */ enum { uppSpeechSyncProcInfo = 0x00000FC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes) */ enum { uppSpeechErrorProcInfo = 0x00003BC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 2_bytes, 4_bytes) */ enum { uppSpeechPhonemeProcInfo = 0x00000BC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 2_bytes) */ enum { uppSpeechWordProcInfo = 0x00002FC0 }; /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes, 2_bytes) */ #define NewSpeechTextDoneUPP(userRoutine) (SpeechTextDoneUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSpeechTextDoneProcInfo, GetCurrentArchitecture()) #define NewSpeechDoneUPP(userRoutine) (SpeechDoneUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSpeechDoneProcInfo, GetCurrentArchitecture()) #define NewSpeechSyncUPP(userRoutine) (SpeechSyncUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSpeechSyncProcInfo, GetCurrentArchitecture()) #define NewSpeechErrorUPP(userRoutine) (SpeechErrorUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSpeechErrorProcInfo, GetCurrentArchitecture()) #define NewSpeechPhonemeUPP(userRoutine) (SpeechPhonemeUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSpeechPhonemeProcInfo, GetCurrentArchitecture()) #define NewSpeechWordUPP(userRoutine) (SpeechWordUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppSpeechWordProcInfo, GetCurrentArchitecture()) #define DisposeSpeechTextDoneUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeSpeechDoneUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeSpeechSyncUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeSpeechErrorUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeSpeechPhonemeUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeSpeechWordUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define InvokeSpeechTextDoneUPP(chan, refCon, nextBuf, byteLen, controlFlags, userUPP) CALL_FIVE_PARAMETER_UPP((userUPP), uppSpeechTextDoneProcInfo, (chan), (refCon), (nextBuf), (byteLen), (controlFlags)) #define InvokeSpeechDoneUPP(chan, refCon, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppSpeechDoneProcInfo, (chan), (refCon)) #define InvokeSpeechSyncUPP(chan, refCon, syncMessage, userUPP) CALL_THREE_PARAMETER_UPP((userUPP), uppSpeechSyncProcInfo, (chan), (refCon), (syncMessage)) #define InvokeSpeechErrorUPP(chan, refCon, theError, bytePos, userUPP) CALL_FOUR_PARAMETER_UPP((userUPP), uppSpeechErrorProcInfo, (chan), (refCon), (theError), (bytePos)) #define InvokeSpeechPhonemeUPP(chan, refCon, phonemeOpcode, userUPP) CALL_THREE_PARAMETER_UPP((userUPP), uppSpeechPhonemeProcInfo, (chan), (refCon), (phonemeOpcode)) #define InvokeSpeechWordUPP(chan, refCon, wordPos, wordLen, userUPP) CALL_FOUR_PARAMETER_UPP((userUPP), uppSpeechWordProcInfo, (chan), (refCon), (wordPos), (wordLen)) #endif /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */ #define NewSpeechTextDoneProc(userRoutine) NewSpeechTextDoneUPP(userRoutine) #define NewSpeechDoneProc(userRoutine) NewSpeechDoneUPP(userRoutine) #define NewSpeechSyncProc(userRoutine) NewSpeechSyncUPP(userRoutine) #define NewSpeechErrorProc(userRoutine) NewSpeechErrorUPP(userRoutine) #define NewSpeechPhonemeProc(userRoutine) NewSpeechPhonemeUPP(userRoutine) #define NewSpeechWordProc(userRoutine) NewSpeechWordUPP(userRoutine) #define CallSpeechTextDoneProc(userRoutine, chan, refCon, nextBuf, byteLen, controlFlags) InvokeSpeechTextDoneUPP(chan, refCon, nextBuf, byteLen, controlFlags, userRoutine) #define CallSpeechDoneProc(userRoutine, chan, refCon) InvokeSpeechDoneUPP(chan, refCon, userRoutine) #define CallSpeechSyncProc(userRoutine, chan, refCon, syncMessage) InvokeSpeechSyncUPP(chan, refCon, syncMessage, userRoutine) #define CallSpeechErrorProc(userRoutine, chan, refCon, theError, bytePos) InvokeSpeechErrorUPP(chan, refCon, theError, bytePos, userRoutine) #define CallSpeechPhonemeProc(userRoutine, chan, refCon, phonemeOpcode) InvokeSpeechPhonemeUPP(chan, refCon, phonemeOpcode, userRoutine) #define CallSpeechWordProc(userRoutine, chan, refCon, wordPos, wordLen) InvokeSpeechWordUPP(chan, refCon, wordPos, wordLen, userRoutine) EXTERN_API( NumVersion ) SpeechManagerVersion (void) FOURWORDINLINE(0x203C, 0x0000, 0x000C, 0xA800); EXTERN_API( OSErr ) MakeVoiceSpec (OSType creator, OSType id, VoiceSpec * voice) FOURWORDINLINE(0x203C, 0x0604, 0x000C, 0xA800); EXTERN_API( OSErr ) CountVoices (short * numVoices) FOURWORDINLINE(0x203C, 0x0108, 0x000C, 0xA800); EXTERN_API( OSErr ) GetIndVoice (short index, VoiceSpec * voice) FOURWORDINLINE(0x203C, 0x030C, 0x000C, 0xA800); EXTERN_API( OSErr ) GetVoiceDescription (const VoiceSpec * voice, VoiceDescription * info, long infoLength) FOURWORDINLINE(0x203C, 0x0610, 0x000C, 0xA800); EXTERN_API( OSErr ) GetVoiceInfo (const VoiceSpec * voice, OSType selector, void * voiceInfo) FOURWORDINLINE(0x203C, 0x0614, 0x000C, 0xA800); EXTERN_API( OSErr ) NewSpeechChannel (VoiceSpec * voice, /* can be NULL */ SpeechChannel * chan) FOURWORDINLINE(0x203C, 0x0418, 0x000C, 0xA800); EXTERN_API( OSErr ) DisposeSpeechChannel (SpeechChannel chan) FOURWORDINLINE(0x203C, 0x021C, 0x000C, 0xA800); EXTERN_API( OSErr ) SpeakString (ConstStr255Param textToBeSpoken) FOURWORDINLINE(0x203C, 0x0220, 0x000C, 0xA800); EXTERN_API( OSErr ) SpeakText (SpeechChannel chan, const void * textBuf, unsigned long textBytes) FOURWORDINLINE(0x203C, 0x0624, 0x000C, 0xA800); EXTERN_API( OSErr ) SpeakBuffer (SpeechChannel chan, const void * textBuf, unsigned long textBytes, long controlFlags) FOURWORDINLINE(0x203C, 0x0828, 0x000C, 0xA800); EXTERN_API( OSErr ) StopSpeech (SpeechChannel chan) FOURWORDINLINE(0x203C, 0x022C, 0x000C, 0xA800); EXTERN_API( OSErr ) StopSpeechAt (SpeechChannel chan, long whereToStop) FOURWORDINLINE(0x203C, 0x0430, 0x000C, 0xA800); EXTERN_API( OSErr ) PauseSpeechAt (SpeechChannel chan, long whereToPause) FOURWORDINLINE(0x203C, 0x0434, 0x000C, 0xA800); EXTERN_API( OSErr ) ContinueSpeech (SpeechChannel chan) FOURWORDINLINE(0x203C, 0x0238, 0x000C, 0xA800); EXTERN_API( short ) SpeechBusy (void) FOURWORDINLINE(0x203C, 0x003C, 0x000C, 0xA800); EXTERN_API( short ) SpeechBusySystemWide (void) FOURWORDINLINE(0x203C, 0x0040, 0x000C, 0xA800); EXTERN_API( OSErr ) SetSpeechRate (SpeechChannel chan, Fixed rate) FOURWORDINLINE(0x203C, 0x0444, 0x000C, 0xA800); EXTERN_API( OSErr ) GetSpeechRate (SpeechChannel chan, Fixed * rate) FOURWORDINLINE(0x203C, 0x0448, 0x000C, 0xA800); EXTERN_API( OSErr ) SetSpeechPitch (SpeechChannel chan, Fixed pitch) FOURWORDINLINE(0x203C, 0x044C, 0x000C, 0xA800); EXTERN_API( OSErr ) GetSpeechPitch (SpeechChannel chan, Fixed * pitch) FOURWORDINLINE(0x203C, 0x0450, 0x000C, 0xA800); EXTERN_API( OSErr ) SetSpeechInfo (SpeechChannel chan, OSType selector, const void * speechInfo) FOURWORDINLINE(0x203C, 0x0654, 0x000C, 0xA800); EXTERN_API( OSErr ) GetSpeechInfo (SpeechChannel chan, OSType selector, void * speechInfo) FOURWORDINLINE(0x203C, 0x0658, 0x000C, 0xA800); EXTERN_API( OSErr ) TextToPhonemes (SpeechChannel chan, const void * textBuf, unsigned long textBytes, Handle phonemeBuf, long * phonemeBytes) FOURWORDINLINE(0x203C, 0x0A5C, 0x000C, 0xA800); EXTERN_API( OSErr ) UseDictionary (SpeechChannel chan, Handle dictionary) FOURWORDINLINE(0x203C, 0x0460, 0x000C, 0xA800); #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __SPEECHSYNTHESIS__ */