Kawe Mazidjatari b3a68ed095 Add EABase, EAThread and DirtySDK to R5sdk
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
2024-04-05 18:29:03 +02:00

147 lines
7.0 KiB
C

/*H********************************************************************************/
/*!
\File voiptranscribe.h
\Description
Voip transcription API wrapping Cloud-based speech-to-text services, supporting
IBM Watson, Microsoft Speech Service, Google Speech, and Amazon Transcribe.
\Copyright
Copyright 2018 Electronic Arts
\Version 08/30/2018 (jbrookes) First Version
*/
/********************************************************************************H*/
#ifndef _voiptranscribe_h
#define _voiptranscribe_h
/*!
\Moduledef VoipTranscribe VoipTranscribe
\Modulemember Voip
*/
//@{
/*** Include files ****************************************************************/
#include "DirtySDK/platform.h"
/*** Defines **********************************************************************/
//! maximum length of transcription text, null termination included
#define VOIPTRANSCRIBE_OUTPUT_MAX (1024)
/*
Transcription profiles
*/
// [......xx] transport (1=http, 2=http/2, 3=websockets)
// [....xx..] audio format (1=li16, 2=wav16, 3=opus)
// [..xx....] provider (1=watson, 2=bing)
// [xx......] reserved
//! construct a transcription profile identifier
#define VOIPTRANSCRIBE_PROFILE_CONSTRUCT(_eProvider, _eAudioFormat, _eTransport) ((_eTransport)|((_eAudioFormat)<<8)|((_eProvider<<16)))
#define VOIPTRANSCRIBE_PROFILE_PROVIDER(_uProfile) (VoipTranscribeProviderE)(((_uProfile)>>16)&0xff)
#define VOIPTRANSCRIBE_PROFILE_FORMAT(_uProfile) (VoipTranscribeFormatE)(((_uProfile)>>8)&0xff)
#define VOIPTRANSCRIBE_PROFILE_TRANSPORT(_uProfile) (VoipTranscribeTransportE)((_uProfile)&0xff)
// disabled profile
#define VOIPTRANSCRIBE_PROFILE_DISABLED VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_NONE, VOIPTRANSCRIBE_FORMAT_NONE, VOIPTRANSCRIBE_TRANSPORT_NONE)
// watson profiles
#define VOIPTRANSCRIBE_PROFILE_IBMWATSON_HTTP_LI16 VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_IBMWATSON, VOIPTRANSCRIBE_FORMAT_LI16, VOIPTRANSCRIBE_TRANSPORT_HTTP)
#define VOIPTRANSCRIBE_PROFILE_IBMWATSON_HTTP_WAV16 VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_IBMWATSON, VOIPTRANSCRIBE_FORMAT_WAV16, VOIPTRANSCRIBE_TRANSPORT_HTTP)
#define VOIPTRANSCRIBE_PROFILE_IBMWATSON_HTTP_OPUS VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_IBMWATSON, VOIPTRANSCRIBE_FORMAT_OPUS, VOIPTRANSCRIBE_TRANSPORT_HTTP)
#define VOIPTRANSCRIBE_PROFILE_IBMWATSON_WEBSOCKETS_LI16 VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_IBMWATSON, VOIPTRANSCRIBE_FORMAT_LI16, VOIPTRANSCRIBE_TRANSPORT_WEBSOCKETS)
#define VOIPTRANSCRIBE_PROFILE_IBMWATSON_WEBSOCKETS_WAV16 VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_IBMWATSON, VOIPTRANSCRIBE_FORMAT_WAV16, VOIPTRANSCRIBE_TRANSPORT_WEBSOCKETS)
#define VOIPTRANSCRIBE_PROFILE_IBMWATSON_WEBSOCKETS_OPUS VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_IBMWATSON, VOIPTRANSCRIBE_FORMAT_OPUS, VOIPTRANSCRIBE_TRANSPORT_WEBSOCKETS)
// bing profiles
#define VOIPTRANSCRIBE_PROFILE_MICROSOFT_HTTP_WAV16 VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_MICROSOFT, VOIPTRANSCRIBE_FORMAT_WAV16, VOIPTRANSCRIBE_TRANSPORT_HTTP)
#define VOIPTRANSCRIBE_PROFILE_MICROSOFT_HTTP_OPUS VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_MICROSOFT, VOIPTRANSCRIBE_FORMAT_OPUS, VOIPTRANSCRIBE_TRANSPORT_HTTP)
// google profiles
#define VOIPTRANSCRIBE_PROFILE_GOOGLE_HTTP_LI16 VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_GOOGLE, VOIPTRANSCRIBE_FORMAT_LI16, VOIPTRANSCRIBE_TRANSPORT_HTTP)
#define VOIPTRANSCRIBE_PROFILE_GOOGLE_HTTP_OPUS VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_GOOGLE, VOIPTRANSCRIBE_FORMAT_OPUS, VOIPTRANSCRIBE_TRANSPORT_HTTP)
#define VOIPTRANSCRIBE_PROFILE_GOOGLE_HTTP2_LI16 VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_GOOGLE, VOIPTRANSCRIBE_FORMAT_LI16, VOIPTRANSCRIBE_TRANSPORT_HTTP2)
#define VOIPTRANSCRIBE_PROFILE_GOOGLE_HTTP2_OPUS VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_GOOGLE, VOIPTRANSCRIBE_FORMAT_OPUS, VOIPTRANSCRIBE_TRANSPORT_HTTP2)
// amazon profiles
#define VOIPTRANSCRIBE_PROFILE_AMAZON_HTTP2 VOIPTRANSCRIBE_PROFILE_CONSTRUCT(VOIPTRANSCRIBE_PROVIDER_AMAZON, VOIPTRANSCRIBE_FORMAT_LI16, VOIPTRANSCRIBE_TRANSPORT_HTTP2)
/*** Macros ***********************************************************************/
/*** Type Definitions *************************************************************/
//! possible transcription providers
typedef enum VoipTranscribeProviderE
{
VOIPTRANSCRIBE_PROVIDER_NONE,
VOIPTRANSCRIBE_PROVIDER_IBMWATSON, //!< IBM Watson
VOIPTRANSCRIBE_PROVIDER_MICROSOFT, //!< Microsoft Cognitive Services
VOIPTRANSCRIBE_PROVIDER_GOOGLE, //!< Google Speech
VOIPTRANSCRIBE_PROVIDER_AMAZON, //!< Amazon Transcribe
VOIPTRANSCRIBE_NUMPROVIDERS
} VoipTranscribeProviderE;
//! possible transcription audio formats
typedef enum VoipTranscribeFormatE
{
VOIPTRANSCRIBE_FORMAT_NONE,
VOIPTRANSCRIBE_FORMAT_LI16, //!< 16bit linear PCM audio with no framing
VOIPTRANSCRIBE_FORMAT_WAV16, //!< 16bit linear PCM in a WAV wrapper
VOIPTRANSCRIBE_FORMAT_OPUS, //!< Opus codec
VOIPTRANSCRIBE_NUMFORMATS
} VoipTranscribeFormatE;
//! possible transport protocols
typedef enum VoipTranscribeTransportE
{
VOIPTRANSCRIBE_TRANSPORT_NONE,
VOIPTRANSCRIBE_TRANSPORT_HTTP, //!< HTTPS
VOIPTRANSCRIBE_TRANSPORT_HTTP2, //!< HTTP2
VOIPTRANSCRIBE_TRANSPORT_WEBSOCKETS, //!< WebSockets
VOIPTRANSCRIBE_NUMTRANSPORTS
} VoipTranscribeTransportE;
//! opaque module state
typedef struct VoipTranscribeRefT VoipTranscribeRefT;
/*** Variables ********************************************************************/
/*** Functions ********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
// create the module
DIRTYCODE_API VoipTranscribeRefT *VoipTranscribeCreate(int32_t iBufSize);
// configure the transcribe module
DIRTYCODE_API void VoipTranscribeConfig(uint32_t uProfile, const char *pUrl, const char *pKey);
// destroy the module
DIRTYCODE_API void VoipTranscribeDestroy(VoipTranscribeRefT *pVoipTranscribe);
// submit voice data to be transcribed
DIRTYCODE_API int32_t VoipTranscribeSubmit(VoipTranscribeRefT *pVoipTranscribe, const uint8_t *pBuffer, int32_t iBufLen);
// get a transcription
DIRTYCODE_API int32_t VoipTranscribeGet(VoipTranscribeRefT *pVoipTranscribe, char *pBuffer, int32_t iBufLen);
// get module status
DIRTYCODE_API int32_t VoipTranscribeStatus(VoipTranscribeRefT *pVoipTranscribe, int32_t iStatus, int32_t iValue, void *pBuffer, int32_t iBufSize);
// set control options
DIRTYCODE_API int32_t VoipTranscribeControl(VoipTranscribeRefT *pVoipTranscribe, int32_t iControl, int32_t iValue, int32_t iValue2, void *pValue);
// update module
DIRTYCODE_API void VoipTranscribeUpdate(VoipTranscribeRefT *pVoipTranscribe);
#ifdef __cplusplus
}
#endif
//@}
#endif // _voiptranscribe_h