update f2 f3 to 16bit

This commit is contained in:
Steven Dan
2026-03-31 10:19:11 +08:00
parent 8246d6fbda
commit cb4a7bad5b
4 changed files with 42 additions and 16 deletions

View File

@@ -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

View File

@@ -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);
}
}
}

View File

@@ -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
}

View File

@@ -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);