1 #ifndef _MCU_AUDIO_H_ 2 #define _MCU_AUDIO_H_ 3 4 #include "aud_dump.h" 5 6 #ifdef __cplusplus 7 extern "C" { 8 #endif 9 10 #define NON_EXP_ALIGN(val, exp) (((val) + ((exp) - 1)) / (exp) * (exp)) 11 12 #define AF_DMA_LIST_CNT 4 13 14 #ifndef MIC_SAMPLERATE 15 #define MIC_SAMPLERATE 16000//AUD_SAMPRATE_16000 16 #endif 17 #ifndef MIC_PERIOD_MS 18 #define MIC_PERIOD_MS 64 19 #endif 20 #ifndef MIC_BITS 21 #define MIC_BITS 16 22 #endif 23 24 #ifndef CHAN_NUM_CAPTURE 25 #define CHAN_NUM_CAPTURE 3//2 26 #define CHAN_CAPTURE_MIC1 1 27 #define CHAN_CAPTURE_MIC2 2 28 #define CHAN_CAPTURE_REF1 0 29 #define CHAN_CAPTURE_NULL -1 30 #endif 31 32 #define CHAN_SEP_BUF_CAPTURE false//true 33 34 #define STREAM_DEVICE AUD_STREAM_USE_INT_CODEC 35 36 #define TX_BUFF_ALIGN (4 * AF_DMA_LIST_CNT) 37 #define RX_BURST_NUM 4 38 #define RX_ALL_CH_DMA_BURST_SIZE (RX_BURST_NUM * 2 * CHAN_NUM_CAPTURE) 39 #define RX_BUFF_ALIGN (RX_ALL_CH_DMA_BURST_SIZE * AF_DMA_LIST_CNT) 40 41 #define PLAYBACK_FRAME_SIZE ((MIC_SAMPLERATE/1000) * 2 * 1) //16bit, 1ch per ms 42 #define CAPTURE_FRAME_SIZE ((MIC_SAMPLERATE/1000) * 2 * CHAN_NUM_CAPTURE) //16bit, CHAN_NUM_CAPTURE per ms 43 44 #define PLAYBACK_SIZE NON_EXP_ALIGN(PLAYBACK_FRAME_SIZE * MIC_PERIOD_MS, TX_BUFF_ALIGN) 45 #define _CAPTURE_SIZE NON_EXP_ALIGN(CAPTURE_FRAME_SIZE * MIC_PERIOD_MS, RX_BUFF_ALIGN) 46 47 #define KFIFO_CAPTURE_SIZE (128*1024) 48 49 50 #define _MULTI_RECORD_SUPPORT // external algorithm, so just keep recording 51 /* 1:before m33->a7, 2:a7 received */ 52 #ifdef RTOS 53 #define _MULTI_RECORD_DUMP_POINT 1 54 #endif 55 56 #if !defined(DSP_RAM_SHARE_SIZE) && !defined(DSP_SRAM_SOLO) 57 #define A7_ALLOC_TRANSQ_BUF 58 #endif 59 60 #ifdef __ARM_ARCH_ISA_ARM 61 #define A7_RECORD_DIRECT_CB // mic irq to cb directly 62 #endif 63 64 extern unsigned char *_a7_dsp_heap_alloc(char *func, int line, int size); 65 #define a7_dsp_heap_alloc(size) _a7_dsp_heap_alloc((char *)__FUNCTION__, __LINE__, size) 66 67 void aud_record_subscribe(aud_dump_cb_t cbf, void *param); 68 void aud_record_unsubscribe(aud_dump_cb_t cbf, void *param); 69 70 void mcu_cmd_send(A7_CMD_T *cmd); 71 72 typedef void (*mcu_audiodump_cb_t)(aud_dump_cb_t cbf, void *param); 73 void mcu_audiodump_register(char *pattern, mcu_audiodump_cb_t register_cb, mcu_audiodump_cb_t unregister_cb, int channels, int buf_KB, int timeout); 74 void mcu_audiodump_unregister(char *pattern); 75 76 void mcu_audio_task_init(void); 77 78 void mic_set_samplerate(int mic_samplerate); 79 int mic_get_samplerate(); 80 #define MIC_BITRATE mic_get_samplerate() 81 void mic_set_period(int mic_period_ms); 82 int mic_get_period(); 83 #define CAPTURE_PERIOD_MS mic_get_period() 84 #define CAPTURE_SIZE NON_EXP_ALIGN(((MIC_BITRATE/1000) * 2 * CHAN_NUM_CAPTURE) * CAPTURE_PERIOD_MS, RX_BUFF_ALIGN) 85 #define RECORD_CHAN_SIZE (CAPTURE_SIZE>>1) 86 87 void audio_dump_a7_cb_register(aud_dump_cb_t cbf, void *param); 88 void audio_dump_a7_cb_unregister(aud_dump_cb_t cbf, void *param); 89 90 typedef void (*mcu_record_pre_handler)(uint8_t *buf, uint32_t len); 91 void mcu_record_pre_handler_set(mcu_record_pre_handler handler); 92 void enable_a7_kws(int enable); 93 94 void a7_to_m33_aud_subscribe(aud_dump_cb_t cbf, void *param); 95 void a7_to_m33_aud_unsubscribe(aud_dump_cb_t cbf, void *param); 96 97 #ifdef __cplusplus 98 } 99 #endif 100 101 #endif /* _MCU_AUDIO_H_ */ 102