f1 recording working
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
#include "xc_ptr.h"
|
#include "xc_ptr.h"
|
||||||
|
|
||||||
#include "xua_conf.h"
|
#include "xua_conf.h"
|
||||||
|
#include "share_buffer.h"
|
||||||
|
|
||||||
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
|
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
|
||||||
/* 改动原因:3 streaming chan + 1 普通 chan 传 us 192kHz(跨 tile 静态内存不共享) */
|
/* 改动原因: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);
|
void dnr_exchange_buffer(int32_t *data);
|
||||||
|
|
||||||
/* 改动原因:dsp.c 的 UserBufferManagement 已将播放路径 EQ 内化到 tile[1],
|
// sample_freq 作为首字发送给 tile[0] 的 dsp_main,用于采样率变化检测和 EQ 初始化
|
||||||
* buffer_exchange 现只交换 mic 数据(sampsFromAudioToUsb)和 sample_freq,
|
void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[], unsigned 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_word(c_data, sample_freq);
|
||||||
chan_out_buf_word(c_data, sampsFromAudioToUsb, 2); /* tile[1]→tile[0]: 原始 mic 数据 */
|
// chan_out_buf_word (c_data, sampsFromUsbToAudio, 2);
|
||||||
chan_in_buf_word (c_data, sampsFromAudioToUsb, 2); /* tile[0]→tile[1]: 经 SSRC/DNR 处理后的 mic */
|
// 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) {
|
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_input[I2S_CHANS_ADC];
|
||||||
int mic_output[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;
|
unsigned current_sample_freq = 0;
|
||||||
|
#else
|
||||||
|
unsigned current_sample_freq = 48000;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
|
#if F1_MUSIC_UAC2 == 1 && DNR_ENABLE == 1
|
||||||
static int mic_48k[2] = {0, 0};
|
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[1] 先发 sample_freq,再发 mic_input[2];
|
||||||
* tile[0] 接收处理后发回 mic_output[2] */
|
* tile[0] 接收处理后发回 mic_output[2] */
|
||||||
unsigned sample_freq = (unsigned)chan_in_word(c_data);
|
unsigned sample_freq = (unsigned)chan_in_word(c_data);
|
||||||
|
// chan_in_buf_word (c_data , play_input, 2);
|
||||||
|
|
||||||
/* 采样率变化:复位 SSRC 状态 */
|
/* 采样率变化:复位 SSRC 状态 */
|
||||||
if (sample_freq != current_sample_freq && sample_freq != 0) {
|
if (sample_freq != current_sample_freq && sample_freq != 0) {
|
||||||
@@ -69,6 +77,7 @@ void dsp_main (chanend_t c_data) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// chan_out_buf_word (c_data , play_output, I2S_CHANS_DAC);
|
||||||
chan_in_buf_word(c_data, mic_input, 2); /* 接收 tile[1] 发来的原始 mic */
|
chan_in_buf_word(c_data, mic_input, 2); /* 接收 tile[1] 发来的原始 mic */
|
||||||
|
|
||||||
#if DNR_ENABLE == 1
|
#if DNR_ENABLE == 1
|
||||||
|
|||||||
@@ -33,18 +33,8 @@ extern unsigned char load_value(unsigned char *path);
|
|||||||
#if EQ_EN
|
#if EQ_EN
|
||||||
|
|
||||||
#include "eq_flash_storage.h"
|
#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_request_eq_mode, g_new_eq_mode;
|
||||||
extern unsigned g_force_request_eq_mode_change, g_force_eq_mode_change;
|
extern unsigned g_force_request_eq_mode_change, g_force_eq_mode_change;
|
||||||
#define LEN_FADE_UBM (2024)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void device_reboot(void);
|
extern void device_reboot(void);
|
||||||
@@ -171,11 +161,6 @@ void key_sender(chanend_t c)
|
|||||||
void UserBufferManagementInit(unsigned sampFreq)
|
void UserBufferManagementInit(unsigned sampFreq)
|
||||||
{
|
{
|
||||||
ubm_sample_freq = 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
|
#if USE_EX3D == 1
|
||||||
memset(ubm_ingress, 0, sizeof(ubm_ingress));
|
memset(ubm_ingress, 0, sizeof(ubm_ingress));
|
||||||
memset(ubm_egress, 0, sizeof(ubm_egress));
|
memset(ubm_egress, 0, sizeof(ubm_egress));
|
||||||
@@ -208,9 +193,7 @@ void UserBufferManagementInit(unsigned sampFreq)
|
|||||||
}
|
}
|
||||||
float fLevel[NUM_USB_CHAN_OUT] = {0,};
|
float fLevel[NUM_USB_CHAN_OUT] = {0,};
|
||||||
enum {UBM_A3D_OFF=0, UBM_A3D_VON=1, UBM_A3D_ON=2};
|
enum {UBM_A3D_OFF=0, UBM_A3D_VON=1, UBM_A3D_ON=2};
|
||||||
/* 改动原因:buffer_exchange 改为只传 mic 数据(sampsFromAudioToUsb),
|
extern void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[], unsigned sample_freq);
|
||||||
* 播放路径 EQ 直接在 tile[1] UserBufferManagement 内处理,消除跨 tile 往返 */
|
|
||||||
extern void buffer_exchange(chanend_t c_data, unsigned sampsFromAudioToUsb[], unsigned sample_freq);
|
|
||||||
extern unsigned int is_eq_disabled(void);
|
extern unsigned int is_eq_disabled(void);
|
||||||
extern unsigned int g_eq_enable;
|
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);
|
chan_in_buf_word(uc_ex3d_to_ubm, (uint32_t *)ubm_ingress, EX3D_TO_UBM_CHANS * DSP_BLOCK_LENGTH);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
#if 0// EQ_EN == 1 && USE_EX3D == 0
|
#if EQ_EN == 1 && USE_EX3D == 0
|
||||||
/* 改动原因:播放路径 EQ 直接在 tile[1] 处理,不再绕道 tile[0] dsp_main。
|
buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq);
|
||||||
* 原 dsp_core0.xc 通过 ring_buffer 管道做 EQ,每 192kHz 拍都要跨 tile 通信,
|
#elif DNR_ENABLE == 1
|
||||||
* 引入不确定延迟导致播放噪音。现改为在当前拍内直接调用 handler_eq_filter,
|
buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq);
|
||||||
* 并复制原 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);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GET_SHARED_GLOBAL(is_monitor, g_monitor_switch_t1);
|
GET_SHARED_GLOBAL(is_monitor, g_monitor_switch_t1);
|
||||||
|
|||||||
Reference in New Issue
Block a user