diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/CMakeLists.txt b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/CMakeLists.txt index e2abcb1..ca9fa1c 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/CMakeLists.txt +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/CMakeLists.txt @@ -54,8 +54,7 @@ set(SW_USB_AUDIO_FLAGS ${EXTRA_BUILD_FLAGS} -Os -DBCD_DEVICE_M=${FW_VER_M} -DBCD_DEVICE_N=${FW_VER_N} -D${CODEC_IC} - -DWINDOWS_OS_DESCRIPTOR_SUPPORT - -DDEBUG_PRINT_ENABLE=0) + -DWINDOWS_OS_DESCRIPTOR_SUPPORT) set(SW_USB_FACT_FLAGS ${EXTRA_BUILD_FLAGS} -Os -report @@ -70,8 +69,7 @@ set(SW_USB_FACT_FLAGS ${EXTRA_BUILD_FLAGS} -Os -DBCD_DEVICE_M=5 -DBCD_DEVICE_N=6 -D${CODEC_IC} - -DWINDOWS_OS_DESCRIPTOR_SUPPORT - -DDEBUG_PRINT_ENABLE=0) + -DWINDOWS_OS_DESCRIPTOR_SUPPORT) @@ -182,6 +180,10 @@ set(APP_COMPILER_FLAGS_f3_f4_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2 -llib_ex3d_all -DEQ_EN=1 -DDNR_ENABLE=1 + -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16 + -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16 + -DINPUT_FORMAT_COUNT=1 + -DOUTPUT_FORMAT_COUNT=1 -DEX3D_SF_NUM=3 -DNUM_USB_CHAN_OUT=8 -DNUM_USB_CHAN_IN=2 diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/br_wrapper.c b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/br_wrapper.c index 1011bf6..e7dd5e8 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/br_wrapper.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/br_wrapper.c @@ -15,8 +15,13 @@ #include "share_buffer.h" -void dnr_exchange_buffer(int32_t *data); -void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]) { +extern uint32_t init_eq_data(unsigned sample_freq); + +void dnr_exchange_buffer(int32_t *data); + +// sample_freq 作为首字发送给 tile[0] 的 dsp_main,用于采样率变化检测和 EQ 初始化 +void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[], unsigned sample_freq) { + chan_out_word(c_data, sample_freq); chan_out_buf_word (c_data, sampsFromUsbToAudio, 2); chan_in_buf_word (c_data , sampsFromUsbToAudio, 2); #if DNR_ENABLE == 1 @@ -29,12 +34,27 @@ void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned void dsp_main (chanend_t c_data) { int play_input[NUM_USB_CHAN_OUT]; int play_output[I2S_CHANS_DAC]; - int mic_input[NUM_USB_CHAN_IN]; + int mic_input[I2S_CHANS_ADC]; int mic_output[I2S_CHANS_ADC]; int count = 0; unsigned ch[1] = {2}; + unsigned current_sample_freq = 0; while (1) { - chan_in_buf_word (c_data , play_input, 2) ; + unsigned sample_freq = (unsigned)chan_in_word(c_data); + chan_in_buf_word (c_data , play_input, 2); + + // 采样率变化:重新初始化 EQ 系数并清空 ring buffer,避免残留状态污染 + if (sample_freq != current_sample_freq && sample_freq != 0) { + current_sample_freq = sample_freq; + init_eq_data(sample_freq); + clear_ring_buffer(0); + clear_ring_buffer(1); + clear_ring_buffer(2); + clear_ring_buffer(3); + play_output[0] = 0; + play_output[1] = 0; + } + chan_out_buf_word (c_data , play_output, I2S_CHANS_DAC); #if DNR_ENABLE == 1 chan_in_buf_word (c_data , mic_input, 2) ; @@ -49,6 +69,5 @@ void dsp_main (chanend_t c_data) { mic_output[0] = mic_input[0]; mic_output[1] = mic_input[1]; #endif - // dnr_exchange_buffer((int32_t *)mic_input, (int32_t *)mic_output); } -} \ No newline at end of file +} diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c index 86dad77..db9e6bc 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c @@ -39,6 +39,7 @@ int32_t sys_vol = 0; unsigned g_mic_vol_cmd_pending = 0; chanend_t uc_ex3d_to_ubm, uc_eq_data; +static unsigned ubm_sample_freq = 0; #if (STEREO_8K == 1) || (STEREO_2K == 1) #define UBM_TO_EX3D_CHANS (2) @@ -113,7 +114,7 @@ void key_sender(chanend_t c) void UserBufferManagementInit(unsigned sampFreq) { - (void)sampFreq; + ubm_sample_freq = sampFreq; #if USE_EX3D == 1 memset(ubm_ingress, 0, sizeof(ubm_ingress)); memset(ubm_egress, 0, sizeof(ubm_egress)); @@ -131,7 +132,7 @@ void UserBufferManagementInit(unsigned sampFreq) } float fLevel[NUM_USB_CHAN_OUT] = {0,}; enum {UBM_A3D_OFF=0, UBM_A3D_VON=1, UBM_A3D_ON=2}; -extern void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]); +extern void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[], unsigned sample_freq); extern unsigned int is_eq_disabled(void); extern unsigned int g_eq_enable; void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]) @@ -237,8 +238,10 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi chan_in_buf_word(uc_ex3d_to_ubm, (uint32_t *)ubm_ingress, EX3D_TO_UBM_CHANS * DSP_BLOCK_LENGTH); }; #endif -#if DNR_ENABLE == 1 - buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb); +#if EQ_EN == 1 && USE_EX3D == 0 + buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq); +#elif DNR_ENABLE == 1 + buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq); #endif } diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp_core0.xc b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp_core0.xc index 28425fc..c0674e6 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp_core0.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp_core0.xc @@ -34,6 +34,7 @@ extern unsigned int g_saved_eq_mode; // 改动原因:添加保存模式外部 extern void debug_print_eq_params(unsigned sample_freq); extern uint32_t get_reference_time(void); extern void update_eq_post_gain(void); +extern unsigned int g_eq_sample_rate; extern unsigned g_windows_detect_done; #pragma unsafe arrays @@ -45,7 +46,7 @@ void dsp_core0(void) static unsigned int usb_to_dsp_ratio = 1; static int buffer_in_active = 0; static int buffer_out_active = 0; - static unsigned int sample_freq = 48000; + static unsigned int sample_freq = 48000 ; unsigned b_fade_in = 0; unsigned u_in_step; unsigned b_fade_out = 0; @@ -138,7 +139,8 @@ void dsp_core0(void) } else { - sample_freq = 48000; + GET_SHARED_GLOBAL(sample_freq, g_eq_sample_rate); + if (sample_freq == 0) sample_freq = 48000; audio_in_samples[0] = read_from_ring_buffer(0); audio_in_samples[1] = read_from_ring_buffer(1);