1 #ifndef __AUDIO_PROMPT_SBC_H__ 2 #define __AUDIO_PROMPT_SBC_H__ 3 #include "stdint.h" 4 #include "cqueue.h" 5 #include "codec_sbc.h" 6 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 11 #define MIX_WITH_A2DP_STREAMING 0 12 #define MIX_WITH_SCO_STREAMING 1 13 14 #define PENDING_TO_STOP_A2DP_STREAMING 0 15 #define PENDING_TO_STOP_SCO_STREAMING 1 16 #define PENDING_TO_STOP_STREAM_INVALID (0xFF) 17 18 typedef struct 19 { 20 uint8_t channelCnt; 21 uint8_t channelMode; 22 uint8_t bitPool; 23 uint8_t sizePerSample; 24 uint8_t sampleRate; 25 uint8_t numBlocks; 26 uint8_t numSubBands; 27 uint8_t mSbcFlag; 28 uint8_t allocMethod; 29 } AUDIO_PROMPT_SBC_CONFIG_T; 30 31 #ifdef TWS_PROMPT_SYNC 32 typedef struct { 33 uint16_t promptId; 34 uint32_t sampleRate; 35 uint32_t trigger_time; 36 }APP_TWS_CMD_MIX_PROMPT_SYNC_T; 37 38 #endif 39 40 typedef struct 41 { 42 uint8_t dev_id; 43 uint16_t voicePrompt; 44 } app_tws_voice_prompt_to_play_t; 45 46 #define IS_IGNORME_SBC_FRAME_HEADER (1) 47 #define AUDIO_PROMPT_SBC_FRAME_HEADER_LEN (4) 48 49 #define AUDIO_PROMPT_SBC_CHANNEL_COUNT (1) 50 #define AUDIO_PROMPT_SBC_CHANNEL_MODE (BTIF_SBC_CHNL_MODE_MONO) 51 52 #define AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE (512) 53 #define AUDIO_PROMPT_TARGET_PCM_BUFFER_SIZE (AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE*2) 54 #define AUDIO_PROMPT_PCM_BUFFER_SIZE (AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE*4) 55 56 #define AUDIO_PROMPT_SBC_BLOCK_SIZE 40 57 #define AUDIO_PROMPT_SBC_SIZE_PER_SAMPLE (2)// 16 bits, 1 channel 58 59 60 #define AUDIO_PROMPT_SBC_SAMPLE_RATE_VALUE 16000 61 62 #define AUDIO_PROMPT_SBC_FRAME_PERIOD_IN_MS (24) 63 64 #define AUDIO_PROMPT_SBC_PCM_DATA_SIZE_PER_FRAME 256 65 66 #define AUDIO_PROMPT_PCM_FILL_UNIT_SIZE (AUDIO_PROMPT_SBC_PCM_DATA_SIZE_PER_FRAME*2) 67 68 #define AUDIO_PROMPT_SBC_ENCODED_DATA_SIZE_PER_FRAME (AUDIO_PROMPT_SBC_BLOCK_SIZE*4) 69 70 #define AUDIO_PROMPT_BUF_SIZE_FOR_RESAMPLER 800 71 72 uint32_t audio_prompt_sbc_get_frame_len(void); 73 void audio_prompt_init_handler(void); 74 bool audio_prompt_is_playing_ongoing(void); 75 void audio_prompt_buffer_config(uint8_t mixType, uint8_t channel_cnt, 76 uint8_t bitNumPerSample, uint8_t* tmpSourcePcmDataBuf, uint8_t* tmpTargetPcmDataBuf, 77 uint8_t* pcmDataBuf, uint32_t pcmBufLen, uint8_t* bufForResampler); 78 79 bool audio_prompt_start_playing(uint16_t promptId, uint32_t targetSampleRate); 80 81 void audio_prompt_stop_playing(void); 82 void audio_prompt_processing_handler(uint32_t acquiredPcmDataLen, 83 uint8_t* pcmDataToMerge); 84 bool audio_prompt_check_on_stopping_stream(uint8_t pendingStopOp, uint8_t deviceId); 85 86 void audio_prompt_forcefully_stop(void); 87 88 bool audio_prompt_is_allow_update_volume(void); 89 90 uint16_t audio_prompt_get_prompt_id(void); 91 uint32_t audio_prompt_get_sample_rate(void); 92 93 #ifdef TWS_PROMPT_SYNC 94 void app_tws_cmd_sync_mix_prompt_req_handler(uint8_t* ptrParam, uint16_t paramLen); 95 #endif 96 void app_tws_cmd_prompt_play_req_handler(uint8_t *ptrParam, uint32_t paramLen); 97 98 void app_tws_let_peer_device_play_audio_prompt(uint16_t promptId, 99 uint8_t dev_id); 100 101 bool audio_prompt_clear_pending_stream(uint8_t op); 102 103 #ifdef __cplusplus 104 } 105 #endif 106 107 #endif // __AUDIO_PROMPT_SBC_H__ 108 109