/**************************************************************************** * * Copy right: 2017-, Copyrigths of EigenComm Ltd. * File name: audio.h * Description: EC618 mqtt demo entry header file * History: Rev1.0 2018-07-12 * ****************************************************************************/ #ifndef __AUDIO_H__ #define __AUDIO_H__ #include #include #include "api_codec.h" #include "openplayer.h" #ifdef FEATURE_SUBSYS_MP3_ENABLE #include "mp3.h" #endif #ifdef FEATURE_SUBSYS_TTS_ENABLE #include "tts.h" #endif #ifdef FEATURE_SUBSYS_WAV_ENABLE #include "wav.h" #endif #ifdef FEATURE_SUBSYS_AMR_ENABLE #include "amr.h" #endif #ifdef FEATURE_SUBSYS_PCM_ENABLE #include "pcm.h" #endif #ifdef FEATURE_SUBSYS_RECORD_ENABLE #include "record.h" #endif #ifdef SPI_CODEC_ENABLE #define AUDIO_TX_TRANSFER_SIZE 640 #else #define AUDIO_TX_TRANSFER_SIZE 8000 #endif #define AUDIO_RX_TRANSFER_SIZE 8000 #ifdef EXTERNAL_TTS_LFS_ENABLE #if defined(FEATURE_SUBSYS_MP3_ENABLE) #define WELCOME_SOUND "D:/Welcome.mp3" #define POWER_SOUND_OFF "D:/PowerOff.mp3" #define SIM_SOUND_UNREADY "D:/SimUnready.mp3" #define NW_SOUND_READY "D:/NwReady.mp3" #define NW_SOUND_UNREADY "D:/NwUnready.mp3" #define SERVER_SOUND_READY "D:/ServerReady.mp3" #define SERVER_SOUND_UNREADY "D:/ServerUnready.mp3" #define VOLUME_SOUND_MIN "D:/VolumeMin.mp3" #define VOLUME_SOUND_MAX "D:/VolumeMax.mp3" #define VOLUME_SOUND_MINUS "D:/VolumeMinus.mp3" #define VOLUME_SOUND_PLUS "D:/VolumePlus.mp3" #define BATTRY_SOUND_100 "D:/Battery100.mp3" #define BATTRY_SOUND_75 "D:/Battery75.mp3" #define BATTRY_SOUND_50 "D:/Battery50.mp3" #define BATTRY_SOUND_25 "D:/Battery25.mp3" #define BATTRY_SOUND_LOW "D:/BatteryLow.mp3" #define CHARGE_SOUND_BEGIN "D:/ChargeBegin.mp3" #define CHARGE_SOUND_END "D:/ChargeEnd.mp3" #elif defined(FEATURE_SUBSYS_TTS_ENABLE) #define WELCOME_SOUND "欢迎使用移芯收款播报设备" #define POWER_SOUND_OFF "正在关机" #define SIM_SOUND_UNREADY "无SIM卡" #define NW_SOUND_READY "网络连接成功" #define NW_SOUND_UNREADY "网络连接失败" #define SERVER_SOUND_READY "服务器连接成功" #define SERVER_SOUND_UNREADY "服务器连接失败" #define VOLUME_SOUND_MIN "音量最小" #define VOLUME_SOUND_MAX "音量最大" #define VOLUME_SOUND_MINUS "音量减小" #define VOLUME_SOUND_PLUS "音量加大" #define BATTRY_SOUND_100 "电量百分之一百" #define BATTRY_SOUND_75 "电量百分之七十五" #define BATTRY_SOUND_50 "电量百分之五十" #define BATTRY_SOUND_25 "电量百分之二十五" #define BATTRY_SOUND_LOW "电量过低" #define CHARGE_SOUND_BEGIN "充电开始" #define CHARGE_SOUND_END "充电结束" #elif defined(FEATURE_SUBSYS_WAV_ENABLE) #define WELCOME_SOUND "D:/Welcome.wav" #define POWER_SOUND_OFF "D:/PowerOff.wav" #define SIM_SOUND_UNREADY "D:/SimUnready.wav" #define NW_SOUND_READY "D:/NwReady.wav" #define NW_SOUND_UNREADY "D:/NwUnready.wav" #define SERVER_SOUND_READY "D:/ServerReady.wav" #define SERVER_SOUND_UNREADY "D:/ServerUnready.wav" #define VOLUME_SOUND_MIN "D:/VolumeMin.wav" #define VOLUME_SOUND_MAX "D:/VolumeMax.wav" #define VOLUME_SOUND_MINUS "D:/VolumeMinus.wav" #define VOLUME_SOUND_PLUS "D:/VolumePlus.wav" #define BATTRY_SOUND_100 "D:/Battery100.wav" #define BATTRY_SOUND_75 "D:/Battery75.wav" #define BATTRY_SOUND_50 "D:/Battery50.wav" #define BATTRY_SOUND_25 "D:/Battery25.wav" #define BATTRY_SOUND_LOW "D:/BatteryLow.wav" #define CHARGE_SOUND_BEGIN "D:/ChargeBegin.wav" #define CHARGE_SOUND_END "D:/ChargeEnd.wav" #else #error "No defined audio types, such as MP3, TTS and WAV." #endif #else #if defined(FEATURE_SUBSYS_MP3_ENABLE) #define WELCOME_SOUND "C:/Welcome.mp3" #define POWER_SOUND_OFF "C:/PowerOff.mp3" #define SIM_SOUND_UNREADY "C:/SimUnready.mp3" #define NW_SOUND_READY "C:/NwReady.mp3" #define NW_SOUND_UNREADY "C:/NwUnready.mp3" #define SERVER_SOUND_READY "C:/ServerReady.mp3" #define SERVER_SOUND_UNREADY "C:/ServerUnready.mp3" #define VOLUME_SOUND_MIN "C:/VolumeMin.mp3" #define VOLUME_SOUND_MAX "C:/VolumeMax.mp3" #define VOLUME_SOUND_MINUS "C:/VolumeMinus.mp3" #define VOLUME_SOUND_PLUS "C:/VolumePlus.mp3" #define BATTRY_SOUND_100 "C:/Battery100.mp3" #define BATTRY_SOUND_75 "C:/Battery75.mp3" #define BATTRY_SOUND_50 "C:/Battery50.mp3" #define BATTRY_SOUND_25 "C:/Battery25.mp3" #define BATTRY_SOUND_LOW "C:/BatteryLow.mp3" #define CHARGE_SOUND_BEGIN "C:/ChargeBegin.mp3" #define CHARGE_SOUND_END "C:/ChargeEnd.mp3" #elif defined(FEATURE_SUBSYS_TTS_ENABLE) #define WELCOME_SOUND "欢迎使用移芯收款播报设备" #define POWER_SOUND_OFF "正在关机" #define SIM_SOUND_UNREADY "无SIM卡" #define NW_SOUND_READY "网络连接成功" #define NW_SOUND_UNREADY "网络连接失败" #define SERVER_SOUND_READY "服务器连接成功" #define SERVER_SOUND_UNREADY "服务器连接失败" #define VOLUME_SOUND_MIN "音量最小" #define VOLUME_SOUND_MAX "音量最大" #define VOLUME_SOUND_MINUS "音量减小" #define VOLUME_SOUND_PLUS "音量加大" #define BATTRY_SOUND_100 "电量百分之一百" #define BATTRY_SOUND_75 "电量百分之七十五" #define BATTRY_SOUND_50 "电量百分之五十" #define BATTRY_SOUND_25 "电量百分之二十五" #define BATTRY_SOUND_LOW "电量过低" #define CHARGE_SOUND_BEGIN "充电开始" #define CHARGE_SOUND_END "充电结束" #elif defined(FEATURE_SUBSYS_WAV_ENABLE) #define WELCOME_SOUND "C:/Welcome.wav" #define POWER_SOUND_OFF "C:/PowerOff.wav" #define SIM_SOUND_UNREADY "C:/SimUnready.wav" #define NW_SOUND_READY "C:/NwReady.wav" #define NW_SOUND_UNREADY "C:/NwUnready.wav" #define SERVER_SOUND_READY "C:/ServerReady.wav" #define SERVER_SOUND_UNREADY "C:/ServerUnready.wav" #define VOLUME_SOUND_MIN "C:/VolumeMin.wav" #define VOLUME_SOUND_MAX "C:/VolumeMax.wav" #define VOLUME_SOUND_MINUS "C:/VolumeMinus.wav" #define VOLUME_SOUND_PLUS "C:/VolumePlus.wav" #define BATTRY_SOUND_100 "C:/Battery100.wav" #define BATTRY_SOUND_75 "C:/Battery75.wav" #define BATTRY_SOUND_50 "C:/Battery50.wav" #define BATTRY_SOUND_25 "C:/Battery25.wav" #define BATTRY_SOUND_LOW "C:/BatteryLow.wav" #define CHARGE_SOUND_BEGIN "C:/ChargeBegin.wav" #define CHARGE_SOUND_END "C:/ChargeEnd.wav" #else #error "No defined audio types, such as MP3, TTS and WAV." #endif #endif #ifdef FEATURE_SUBSYS_PCM_RECORD_ENABLE #define RECORD_SOUND "D:/Record.wav" #endif #define VOLUME_PLUS_VPRESS_SHORT "+" #define VOLUME_PLUS_VPRESS_LONG "++" #define VOLUME_MINUS_VPRESS_SHORT "-" #define VOLUME_MINUS_VPRESS_LONG "--" #define BOOT_TIME_PA_LTK5313 180 #define BOOT_TIME_PA BOOT_TIME_PA_LTK5313 #define BOOT_TIME_CODEC_ES7148_ES7149_ES8311 70 #define BOOT_TIME_CODEC BOOT_TIME_CODEC_ES7148_ES7149_ES8311 #if defined(CODEC_ES8374_ENABLE) #define CODEC_VOLUME_PLAY_DEFAULT 100 #define CODEC_VOLUME_MIC_DEFAULT 100 #elif defined(CODEC_ES8311_ENABLE) #define CODEC_VOLUME_PLAY_DEFAULT (HAL_CODEC_VOL_SPEAKER_DEFAULT + 10) #define CODEC_VOLUME_MIC_DEFAULT HAL_CODEC_VOL_MIC_DEFAULT #elif defined(CODEC_TM8211_ENABLE) #define CODEC_VOLUME_PLAY_DEFAULT 100 #elif defined(CODEC_ES7111_ENABLE) #define CODEC_VOLUME_PLAY_DEFAULT 100 #elif defined(CODEC_ES7149_ENABLE) #define CODEC_VOLUME_PLAY_DEFAULT 100 #elif (defined(PWM_CODEC_ENABLE) || defined(SPI_CODEC_ENABLE)) #define CODEC_VOLUME_PLAY_DEFAULT 100 #endif typedef void (*AudioCallbackT)(void); typedef struct { bool increase; bool dual; uint32_t rate; uint32_t length; char *buffer; AudioCallbackT callback; } PlayParamT; typedef struct { } RecordVolteParamT; typedef struct { uint8_t audioType; PlayParamT playParam; #ifdef FEATURE_SUBSYS_RECORD_ENABLE RecordParamT recordParam; #endif RecordVolteParamT recordVolteParam; } QueueAudioT; typedef enum { AUDIO_PLAY = 0x00, #ifdef FEATURE_SUBSYS_RECORD_ENABLE AUDIO_RECORD = 0x10, AUDIO_RECORD_VOLTE = 0x20 #endif } AudioT; typedef enum { AUDIO_PLAY_MP3 = AUDIO_PLAY, AUDIO_PLAY_TTS, AUDIO_PLAY_AMR, AUDIO_PLAY_WAV, AUDIO_PLAY_PCM, AUDIO_PLAY_VOLUME } AudioPlayT; #ifdef FEATURE_SUBSYS_RECORD_ENABLE typedef enum { AUDIO_RECORD_G726 = AUDIO_RECORD, AUDIO_RECORD_ADPCM, AUDIO_RECORD_PCM, AUDIO_RECORD_PCM_3A, AUDIO_RECORD_AMR } AudioRecordT; typedef enum { AUDIO_RECORD_VOLTE_AMR = AUDIO_RECORD_VOLTE, AUDIO_RECORD_VOLTE_PCM, AUDIO_RECORD_VOLTE_PCM_3A } AudioRecordVolteT; #endif typedef enum { ACTION_VOLUME_PLUS_SHORT = 0, ACTION_VOLUME_PLUS_LONG = 1, ACTION_VOLUME_MINUS_SHORT = 2, ACTION_VOLUME_MINUS_LONG = 3, ACTION_MENU_SHORT = 4, ACTION_MENU_LONG = 5, ACTION_INVALID } ActionT; typedef struct _audioParamT { BOOL toneFlag; UINT8 aud_volume; UINT8 rate; UINT8 BitWidth; I2sChannelSel_e channel; bool increase; bool dual; }audioParamT; typedef enum { AUDIO_PLAY_IDLE, AUDIO_PLAY_FILE = 1, AUDIO_PLAY_STRING, AUDIO_PLAY_STREAM, } AudioSrcTypeT; typedef enum { AUDIO_PLAY_CODEC_TYPE_IDLE, AUDIO_PLAY_CODEC_TYPE_PCM = 1, AUDIO_PLAY_CODEC_TYPE_MP3, AUDIO_PLAY_CODEC_TYPE_AMR, AUDIO_PLAY_CODEC_TYPE_WAV, AUDIO_PLAY_CODEC_TYPE_AAC, AUDIO_PLAY_CODEC_TYPE_TTS, AUDIO_PLAY_CODEC_TYPE_EOF = 0xff, }AudioCodecTypeT; extern openPlayer gOpenPlayer; void audioInit(void); void audioPlayMp3(char *path, AudioCallbackT callback, bool increase, bool dual); void audioPlayTts(char *text, AudioCallbackT callback); void audioPlayAmr(char *path, AudioCallbackT callback); void audioPlayAmrData(uint8_t *data, uint32_t length, AudioCallbackT callback); void audioPlayWav(char *path, AudioCallbackT callback); void audioPlayPcm(uint8_t *pcm, uint32_t length, uint32_t rate); #ifdef FEATURE_SUBSYS_PCM_RECORD_ENABLE void audioRecordG726(char *path); void audioRecordAdpcm(char *path); #endif #ifdef FEATURE_SUBSYS_AMR_RECORD_ENABLE int32_t audioRecordAmr(RecordParamT *recordParam); #endif void audioAdjustVolume(uint8_t action); bool audioIsReady(void); bool audioIsBusy(void); uint16_t audioGetVolume(void); uint16_t audioGetCodecVolume(void); bool audioPlayIsStop(void); void audioPlayStop(void); void audioPlayMp3Data(uint8_t *data, uint32_t length); uint32_t audioPlayTimeGet(void); int32_t EC_audioStopPlaying(uint8_t audType,bool pauseFlag); int32_t EC_audioStartPlayFile(char *file_name, uint8_t audType, audioParamT audParam, AudioCallbackT play_cb_func); int32_t EC_audioStartPlayString(uint8_t *String, uint32_t strLen, uint8_t audType, audioParamT audParam, AudioCallbackT play_cb_func); int32_t EC_audioStartPlayStream(uint8_t *url, uint32_t strLen, uint8_t audType, audioParamT audParam, AudioCallbackT play_cb_func); #endif