f1 recording working
This commit is contained in:
@@ -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)
|
||||
{
|
||||
// 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, sampsFromAudioToUsb, 2); /* tile[1]→tile[0]: 原始 mic 数据 */
|
||||
chan_in_buf_word (c_data, sampsFromAudioToUsb, 2); /* tile[0]→tile[1]: 经 SSRC/DNR 处理后的 mic */
|
||||
// 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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user