2025-04-11 09:40:32 +08:00

220 lines
6.9 KiB
C

/****************************************************************************
*
* Copy right: 2017-, Copyrigths of EigenComm Ltd.
* File name: audio.h
* Description: EC718 audio play header file
* History: Rev1.0 2018-07-12
*
****************************************************************************/
#ifndef __AUDIO_H__
#define __AUDIO_H__
#include <stdint.h>
#include <stdbool.h>
#include "hal_i2s.h"
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;
#define AUDIO_TX_TRANSFER_SIZE 2304//7000
#define AUDIO_RX_TRANSFER_SIZE 8000
#define ALARM_SOUND_CODEC AUDIO_PLAY_CODEC_TYPE_MP3
#define ALARM_SOUND "D:/in.mp3"
#ifndef SPEAKER_APP
#define WELCOME_SOUND "D:/in.mp3"
#else
#define WELCOME_SOUND "D:/Welcome.mp3"
#endif
#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"
#define VOLUME_PLUS_VPRESS_SHORT "+"
#define VOLUME_PLUS_VPRESS_LONG "++"
#define VOLUME_MINUS_VPRESS_SHORT "-"
#define VOLUME_MINUS_VPRESS_LONG "--"
typedef void (*AudioCallbackT)(int32_t result);
typedef void (*ReadFileCallbackT)(void);
typedef struct
{
char *path;
ReadFileCallbackT callback;
} QueueReadFileT;
typedef struct
{
uint8_t *string;
int length;
ReadFileCallbackT callback;
} QueueReadStringT;
typedef struct _audioParamT
{
BOOL toneFlag;
UINT8 aud_volume;
UINT8 rate;
UINT8 BitWidth;
I2sChannelSel_e channel;
bool increase;
bool dual;
}audioParamT;
#define AUDIO_PLAY_PCM (AUDIO_PLAY_FILE << 4 | AUDIO_PLAY_CODEC_TYPE_PCM)
#define AUDIO_PLAY_MP3 (AUDIO_PLAY_FILE << 4 | AUDIO_PLAY_CODEC_TYPE_MP3)
#define AUDIO_PLAY_AMR (AUDIO_PLAY_FILE << 4 | AUDIO_PLAY_CODEC_TYPE_AMR)
#define AUDIO_PLAY_WAV (AUDIO_PLAY_FILE << 4 | AUDIO_PLAY_CODEC_TYPE_WAV)
#define AUDIO_PLAY_AAC (AUDIO_PLAY_FILE << 4 | AUDIO_PLAY_CODEC_TYPE_AAC)
#define AUDIO_PLAY_STRING_PCM (AUDIO_PLAY_STRING << 4 | AUDIO_PLAY_CODEC_TYPE_PCM)
#define AUDIO_PLAY_STRING_MP3 (AUDIO_PLAY_STRING << 4 | AUDIO_PLAY_CODEC_TYPE_MP3)
#define AUDIO_PLAY_STRING_AMR (AUDIO_PLAY_STRING << 4 | AUDIO_PLAY_CODEC_TYPE_AMR)
#define AUDIO_PLAY_STRING_WAV (AUDIO_PLAY_STRING << 4 | AUDIO_PLAY_CODEC_TYPE_WAV)
#define AUDIO_PLAY_STRING_AAC (AUDIO_PLAY_STRING << 4 | AUDIO_PLAY_CODEC_TYPE_AAC)
#define AUDIO_PLAY_STREAM_PCM (AUDIO_PLAY_STREAM << 4 | AUDIO_PLAY_CODEC_TYPE_PCM)
#define AUDIO_PLAY_STREAM_MP3 (AUDIO_PLAY_STREAM << 4 | AUDIO_PLAY_CODEC_TYPE_MP3)
#define AUDIO_PLAY_STREAM_AMR (AUDIO_PLAY_STREAM << 4 | AUDIO_PLAY_CODEC_TYPE_AMR)
#define AUDIO_PLAY_STREAM_WAV (AUDIO_PLAY_STREAM << 4 | AUDIO_PLAY_CODEC_TYPE_WAV)
#define AUDIO_PLAY_STREAM_AAC (AUDIO_PLAY_STREAM << 4 | AUDIO_PLAY_CODEC_TYPE_AAC)
#define AUDIO_PLAY_TTS (AUDIO_PLAY_STRING << 4 | AUDIO_PLAY_CODEC_TYPE_TTS)
typedef struct
{
bool endFlag;
} QueueTonePlayT;
typedef enum
{
EC_RET_OK,
EC_RET_ERR_NOMAL = -1,///< Unspecified RTOS error: run-time error but no other error message fits.
EC_RET_ERR_TIMEOUT = -2,///< Operation not completed within the timeout period.
EC_RET_ERR_RESOURCE = -3,///< Resource not available.
EC_RET_ERR_PARAM = -4,///< Parameter error.
EC_RET_ERR_PARAM_NOMEM = -5,///< System is out of memory: it was impossible to allocate or reserve memory for the operation.
EC_RET_ERR_ISR = -6,///< Not allowed in ISR context: the function cannot be called from interrupt service routines.
}errCodeT;
typedef enum _avPlayResp{
AV_RET_PLAY_ERROR = -1,
AV_RET_PLAY_START = 0 ,
AV_RET_PLAY_STOP,
AV_RET_PLAY_EOF
}avPlayResp_E;
typedef struct
{
UINT8 audType;
UINT8 toneFlag;
audioParamT audioParam;
uint32_t length;
char *buffer;
UINT8 *audString;
AudioCallbackT callback;
} QueueAudioT;
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 _audioPlayStatusInfo{
char *path;
uint32_t resumeIndex;
uint32_t fileSize;
uint32_t decodeSize;
}audioPlayStatusInfo;
typedef struct _medSrcT {
uint32_t srcLen;
uint8_t src[0];
}medSrcT;
medSrcT *medFileToString(char *path);
uint32_t sampleRateConvert(uint32_t rate, bool toEnum);
INT32 EC_audioStartPlayFile(char *path,uint8_t audType,audioParamT audParam,
AudioCallbackT play_cb_func);
INT32 EC_audioStartPlayStream(UINT8 *url,UINT32 strLen,uint8_t audType,audioParamT audParam,
AudioCallbackT play_cb_func);
INT32 EC_audioStartPlayString(UINT8 *String,UINT32 strLen,uint8_t type,
audioParamT audParam, AudioCallbackT play_cb_func);
INT32 EC_audioStopPlaying(uint8_t audType,bool pauseFlag);
bool EC_audioIsBusy(void);
UINT16 EC_audioGetVolume(void);
void audioToneSrcSet(const char *src);
char * audioToneSrcGet(void);
void audioToneVolumeSet(uint16_t value);
uint16_t audioToneVolumeGet(void);
void audioPlayMp3(char *src, AudioCallbackT callback, bool increase, bool dual);
void audioPlayAmr(char *src, AudioCallbackT callback);
void audioStopPlay(void);
uint32_t audioPlayTimeGet(void);
int32_t audioInit(void);
#ifdef FEATURE_SUBSYS_TTS_ENABLE
void audioPlayTts(char *text, AudioCallbackT callback);
#endif
#ifdef SPEAKER_APP
void audioAdjustVolume(uint8_t action);
#endif
#endif