#ifndef __AUDIO_PROMPT_SBC_H__ #define __AUDIO_PROMPT_SBC_H__ #include "stdint.h" #include "cqueue.h" #include "codec_sbc.h" #ifdef __cplusplus extern "C" { #endif #define MIX_WITH_A2DP_STREAMING 0 #define MIX_WITH_SCO_STREAMING 1 #define PENDING_TO_STOP_A2DP_STREAMING 0 #define PENDING_TO_STOP_SCO_STREAMING 1 #define PENDING_TO_STOP_STREAM_INVALID (0xFF) typedef struct { uint8_t channelCnt; uint8_t channelMode; uint8_t bitPool; uint8_t sizePerSample; uint8_t sampleRate; uint8_t numBlocks; uint8_t numSubBands; uint8_t mSbcFlag; uint8_t allocMethod; } AUDIO_PROMPT_SBC_CONFIG_T; #ifdef TWS_PROMPT_SYNC typedef struct { uint16_t promptId; uint16_t promptPram; uint32_t sampleRate; uint32_t trigger_time; }APP_TWS_CMD_MIX_PROMPT_SYNC_T; #endif typedef struct { uint8_t dev_id; uint16_t voicePrompt; } app_tws_voice_prompt_to_play_t; #define IS_IGNORME_SBC_FRAME_HEADER (1) #define AUDIO_PROMPT_SBC_FRAME_HEADER_LEN (4) #define AUDIO_PROMPT_SBC_CHANNEL_COUNT (1) #define AUDIO_PROMPT_SBC_CHANNEL_MODE (BTIF_SBC_CHNL_MODE_MONO) #define AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE (512) #define AUDIO_PROMPT_TARGET_PCM_BUFFER_SIZE (AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE*3) #define AUDIO_PROMPT_PCM_BUFFER_SIZE (AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE*4) #define AUDIO_PROMPT_SBC_BLOCK_SIZE 40 #define AUDIO_PROMPT_SBC_SIZE_PER_SAMPLE (2)// 16 bits, 1 channel #define AUDIO_PROMPT_SBC_SAMPLE_RATE_VALUE 16000 #define AUDIO_PROMPT_SBC_FRAME_PERIOD_IN_MS (24) #define AUDIO_PROMPT_SBC_PCM_DATA_SIZE_PER_FRAME 256 #define AUDIO_PROMPT_PCM_FILL_UNIT_SIZE (AUDIO_PROMPT_SBC_PCM_DATA_SIZE_PER_FRAME*2) #define AUDIO_PROMPT_SBC_ENCODED_DATA_SIZE_PER_FRAME (AUDIO_PROMPT_SBC_BLOCK_SIZE*4) #define AUDIO_PROMPT_BUF_SIZE_FOR_RESAMPLER 800 uint32_t audio_prompt_sbc_get_frame_len(void); void audio_prompt_init_handler(void); bool audio_prompt_is_playing_ongoing(void); void audio_prompt_buffer_config(uint8_t mixType, uint8_t channel_cnt, uint8_t bitNumPerSample, uint8_t *tmpSourcePcmDataBuf, uint8_t *tmpTargetPcmDataBuf, uint8_t *pcmDataBuf, uint32_t pcmBufLen, uint8_t *bufForResampler, uint32_t resampleBufLen); bool audio_prompt_start_playing(uint16_t promptId, uint32_t targetSampleRate); void audio_prompt_stop_playing(void); void audio_prompt_processing_handler(uint32_t acquiredPcmDataLen, uint8_t *pcmDataToMerge); bool audio_prompt_check_on_stopping_stream(uint8_t pendingStopOp, uint8_t deviceId); void audio_prompt_forcefully_stop(void); bool audio_prompt_is_allow_update_volume(void); uint16_t audio_prompt_get_prompt_id(void); uint32_t audio_prompt_get_sample_rate(void); #ifdef TWS_PROMPT_SYNC void tws_playback_ticks_check_for_mix_prompt(void); void app_tws_cmd_sync_mix_prompt_req_handler(uint8_t *ptrParam, uint16_t paramLen); #endif bool audio_prompt_clear_pending_stream(uint8_t op); #ifdef __cplusplus } #endif #endif // __AUDIO_PROMPT_SBC_H__