From 0e3d9ed7c5c9eb21a6ba34bb823612e749c3ddaa Mon Sep 17 00:00:00 2001 From: Steven Dan Date: Fri, 5 Jun 2026 16:31:17 +0800 Subject: [PATCH] f1 recording working --- .../src/extensions/br_wrapper.c | 31 +++++--- .../src/extensions/dsp.c | 74 ++----------------- 2 files changed, 25 insertions(+), 80 deletions(-) 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 d2c9ced..96d4c99 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 @@ -13,6 +13,7 @@ #include "xc_ptr.h" #include "xua_conf.h" +#include "share_buffer.h" #if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1 /* 改动原因:3 streaming chan + 1 普通 chan 传 us 192kHz(跨 tile 静态内存不共享) */ @@ -24,24 +25,30 @@ uint32_t uc_ssrc_us_out; /* tile[1]→tile[0] 192kHz 升采样结果(普通c void dnr_exchange_buffer(int32_t *data); -/* 改动原因:dsp.c 的 UserBufferManagement 已将播放路径 EQ 内化到 tile[1], - * buffer_exchange 现只交换 mic 数据(sampsFromAudioToUsb)和 sample_freq, - * 对应 dsp.c line 364: buffer_exchange(uc_eq_data, sampsFromAudioToUsb, ubm_sample_freq) - * 原 4 参数版本(含 sampsFromUsbToAudio)与实际调用不匹配,是播放/录音均有噪音的根因 */ -void buffer_exchange(chanend_t c_data, - unsigned sampsFromAudioToUsb[], - unsigned sample_freq) -{ - chan_out_word (c_data, sample_freq); - chan_out_buf_word(c_data, sampsFromAudioToUsb, 2); /* tile[1]→tile[0]: 原始 mic 数据 */ - chan_in_buf_word (c_data, sampsFromAudioToUsb, 2); /* tile[0]→tile[1]: 经 SSRC/DNR 处理后的 mic */ +// 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 + chan_out_buf_word (c_data, sampsFromAudioToUsb, 2); + chan_in_buf_word (c_data , sampsFromAudioToUsb, 2); +#endif } void dsp_main (chanend_t c_data) { + int play_input[NUM_USB_CHAN_OUT]; + int play_output[I2S_CHANS_DAC]; int mic_input[I2S_CHANS_ADC]; int mic_output[I2S_CHANS_ADC]; + int count = 0; + unsigned ch[1] = {2}; +#if F1_MUSIC_UAC2 == 1 unsigned current_sample_freq = 0; +#else + unsigned current_sample_freq = 48000; +#endif #if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1 static int mic_48k[2] = {0, 0}; @@ -57,6 +64,7 @@ void dsp_main (chanend_t c_data) { /* 协议:tile[1] 先发 sample_freq,再发 mic_input[2]; * tile[0] 接收处理后发回 mic_output[2] */ unsigned sample_freq = (unsigned)chan_in_word(c_data); + // chan_in_buf_word (c_data , play_input, 2); /* 采样率变化:复位 SSRC 状态 */ if (sample_freq != current_sample_freq && sample_freq != 0) { @@ -69,6 +77,7 @@ void dsp_main (chanend_t c_data) { #endif } + // chan_out_buf_word (c_data , play_output, I2S_CHANS_DAC); chan_in_buf_word(c_data, mic_input, 2); /* 接收 tile[1] 发来的原始 mic */ #if DNR_ENABLE == 1 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 1fb1f5e..896b882 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 @@ -33,18 +33,8 @@ extern unsigned char load_value(unsigned char *path); #if EQ_EN #include "eq_flash_storage.h" -#include "eq.h" -/* 改动原因:EQ 处理移至 tile[1] (UserBufferManagement) 直接处理, - * 不再绕行 tile[0] dsp_main,消除跨 tile 来回导致的音频延迟与噪音 */ -/* 改动原因:handler_eq_filter 已在 eq.h 正确声明为 int32_t 返回, - * 此处重复声明为 unsigned int 导致类型冲突编译错误,删除冗余 extern */ -extern uint32_t init_eq_data(unsigned sample_freq); -extern unsigned int is_mode_changed(void); -extern void change_eq_mode(unsigned sample_freq); -extern void clear_eq_status(unsigned sample_freq, unsigned ch_no); extern unsigned g_request_eq_mode, g_new_eq_mode; extern unsigned g_force_request_eq_mode_change, g_force_eq_mode_change; -#define LEN_FADE_UBM (2024) #endif extern void device_reboot(void); @@ -171,11 +161,6 @@ void key_sender(chanend_t c) void UserBufferManagementInit(unsigned sampFreq) { ubm_sample_freq = sampFreq; -#if EQ_EN - /* 改动原因:EQ 移至 tile[1],在采样率初始化时直接初始化 EQ 系数, - * 无需再经由 tile[0] dsp_main 的 init_eq_data 调用 */ - init_eq_data(sampFreq); -#endif #if USE_EX3D == 1 memset(ubm_ingress, 0, sizeof(ubm_ingress)); memset(ubm_egress, 0, sizeof(ubm_egress)); @@ -208,9 +193,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}; -/* 改动原因:buffer_exchange 改为只传 mic 数据(sampsFromAudioToUsb), - * 播放路径 EQ 直接在 tile[1] UserBufferManagement 内处理,消除跨 tile 往返 */ -extern void buffer_exchange(chanend_t c_data, unsigned sampsFromAudioToUsb[], unsigned sample_freq); +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; @@ -311,57 +294,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 0// EQ_EN == 1 && USE_EX3D == 0 - /* 改动原因:播放路径 EQ 直接在 tile[1] 处理,不再绕道 tile[0] dsp_main。 - * 原 dsp_core0.xc 通过 ring_buffer 管道做 EQ,每 192kHz 拍都要跨 tile 通信, - * 引入不确定延迟导致播放噪音。现改为在当前拍内直接调用 handler_eq_filter, - * 并复制原 dsp_core0.xc 的淡入/淡出换模式逻辑。 */ - { - static unsigned b_fade_in = 0, b_fade_out = 0; - static unsigned u_in_step = 0, u_out_step = 0; - - int audio_out_0 = handler_eq_filter(ubm_sample_freq, 0, (int)sampsFromUsbToAudio[0]); - int audio_out_1 = handler_eq_filter(ubm_sample_freq, 1, (int)sampsFromUsbToAudio[1]); - - if (is_mode_changed() && !b_fade_out && !b_fade_in) { - b_fade_out = 1; - u_out_step = 1; - } - - if (b_fade_out) { - audio_out_0 /= LEN_FADE_UBM; - audio_out_0 *= (int)(LEN_FADE_UBM - u_out_step); - audio_out_1 /= LEN_FADE_UBM; - audio_out_1 *= (int)(LEN_FADE_UBM - u_out_step); - if (++u_out_step == LEN_FADE_UBM) { - b_fade_out = 0; - change_eq_mode(ubm_sample_freq); - clear_eq_status(ubm_sample_freq, 0); - clear_eq_status(ubm_sample_freq, 1); - b_fade_in = 1; - u_in_step = 1; - } - } - - if (b_fade_in) { - audio_out_0 /= LEN_FADE_UBM; - audio_out_0 *= (int)u_in_step; - audio_out_1 /= LEN_FADE_UBM; - audio_out_1 *= (int)u_in_step; - if (++u_in_step >= LEN_FADE_UBM) { - b_fade_in = 0; - } - } - - sampsFromUsbToAudio[0] = (unsigned)audio_out_0; - sampsFromUsbToAudio[1] = (unsigned)audio_out_1; - } -#endif - - /* 改动原因:mic 路径(SSRC+DNR)仍走 dsp_main,但 buffer_exchange - * 已精简为只传 mic 数据,不再携带播放数据,降低每拍通信量 */ -#if DNR_ENABLE == 1 - buffer_exchange(uc_eq_data, sampsFromAudioToUsb, ubm_sample_freq); +#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 GET_SHARED_GLOBAL(is_monitor, g_monitor_switch_t1);