[关闭]
@leaveye 2026-04-02T07:32:20.000000Z 字数 17687 阅读 75

SS528/AIC3104音频调优

音频 问题 ss528 aic3104 质量


CT800/CP800 初始化侧的区别段落

在设备进行输入接口切换时,具体逻辑会在日志中打印。有 AIC3104: xxx 字样。

程序启动时调用 aic3104_init()

  1. void aic3104_init(void) {
  2. static uint sample_rate = -1U;
  3. if (sample_rate == -1U) sample_rate = atoi(rx_loadenv(AUDIO_IO_SRATE));
  4. // ... 一些未执行的过期代码 ...
  5. aic3104_regfieldset(1, 0b10000000, 1); // Reset
  6. /*
  7. with PLL: $f_\tt{S} = \frac{R \times \underline{J.D} \times f_{\tt{PLLCLK}}}{2048 \times P}$
  8. limits: $\begin{array}{cl}\\
  9. \beta & = & f_{\tt{PLLCLK}} / P \text{ where } \left\{ \begin{array}{cl}
  10. \beta & \in [10\text{M},20\text{M}]\\
  11. \beta \times \underline{J.D} \times R & \in [80\text{M},110\text{M}] \\
  12. \end{array} \right.\\
  13. J & \in & [4,11] \\
  14. R & = & 1 \\
  15. \end{array}$
  16. see: https://latexeditor.lagrida.com/
  17. */
  18. switch (sample_rate) {
  19. #define CASE_PLL(RATE,PLLVALS) \
  20. case RATE: aic3104_memset(3, PLLVALS); break
  21. default: aic3104_memset(3, "\x81\x20\x00\x00");
  22. break;
  23. CASE_PLL(96000, "\x80\x64\x00\x00"); // 10000000 01100100 00000000 00000000
  24. CASE_PLL(48000, "\x91\x20\x1E\x00"); // 10000001 00100000 00011110 00000000
  25. CASE_PLL(44100, "\x81\x40\x00\x00"); // 10000001 01000000 00000000 00000000
  26. // PLL Enabled ^QQQQPPP JJJJJJ00 DDDDDDDD DDDDDD00
  27. #undef CASE_PLL
  28. }
  29. aic3104_regfieldset(19, 0b00000100, 1); // L-ADC on
  30. aic3104_regfieldset(22, 0b00000100, 1); // R-ADC on
  31. aic3104_regfieldset(7, 0b00011110, 0b0101); // L/R Chan -> DAC
  32. aic3104_regfieldset(37, 0b11000000, 0b11); // L/R-DAC on
  33. }

音频输入流水线初始化时

  1. {
  2. constexpr auto zero_point = 80; // aic3104 0dB split point
  3. aic3104_tune(AWGT_TUNE_IN_GAIN, zero_point);
  4. aic3104_tune(AWGT_TUNE_IN_1, zero_point);
  5. aic3104_tune(AWGT_TUNE_IN_2, zero_point);
  6. const auto &debug_gain = gain_multiplier;
  7. RX_INFO("AI Gain: %.4fdB x%.1lf", again_get_db(debug_gain), again_get_mul(debug_gain));
  8. }

不同板卡 MIC-in 的配置代码

  1. void aic3104_tune(const Aic3104Widget widget, const int value) {
  2. const struct aic3104_settings *settings = aic3104_get_settings();
  3. switch (widget) {
  4. case AWGT_TUNE_IN_GAIN: {
  5. // value >20 may give more noise on board
  6. Aic3104StateUint *uv = &aic3104_get_state(AWGT_TUNE_IN_GAIN)->as_uvalue;
  7. uv->gain = lerp_i32(value, URANGE_IVOLUME_HIPART, settings->PGA_gain);
  8. AIC_INFO("set PGA gain %.1f dB", index2db(uv->gain, PGA_gain));
  9. aic3104_regfieldset(15, 0b01111111, uv->gain);
  10. aic3104_regfieldset(16, 0b01111111, uv->gain);
  11. } return;
  12. // CT800:LINE1 / CP800:MIC
  13. case AWGT_TUNE_IN_MIC: {
  14. const bool enable = aic3104_get_state(AWGT_SWITCH_IN_MIC)->as_bool;
  15. Aic3104StateUint *uv = &aic3104_get_state(AWGT_TUNE_IN_MIC)->as_uvalue;
  16. uv->level = lerp_i32(value, URANGE_IVOLUME_LOPART, settings->Line1L_level);
  17. const uint in_level = !enable || uv->level > 8 ? 0xF : uv->level;
  18. #if BOARD_IS_BASELINE(USING_BOARD) // 包含 CT800V30 等早期主线硬件型号
  19. if (!enable) AIC_INFO("mute Line1L-ADC");
  20. else AIC_INFO("set Line1L-ADC gain %.1f dB", index2db(uv->level, ADC_level));
  21. aic3104_regfieldset(19, 0b01111000, in_level);
  22. aic3104_regfieldset(24, 0b01111000, in_level);
  23. #elif USING_BOARD == CP800_SS528 // 仅 CP800 时
  24. if (!enable) AIC_INFO("mute Line1L-ADC");
  25. else AIC_INFO("set Line1-ADC gain %.1f dB", index2db(uv->level, ADC_level));
  26. aic3104_regfieldset(19, 0b01111000, in_level);
  27. aic3104_regfieldset(22, 0b01111000, in_level);
  28. #endif
  29. } return;
  30. // CT800:LINE2 / CP800:LINE
  31. case AWGT_TUNE_IN_LINE: {
  32. const bool enable = aic3104_get_state(AWGT_SWITCH_IN_LINE)->as_bool;
  33. Aic3104StateUint *uv = &aic3104_get_state(AWGT_TUNE_IN_LINE)->as_uvalue;
  34. uv->level = lerp_i32(value, URANGE_IVOLUME_LOPART, settings->Line2_level);
  35. const uint in_level = !enable || uv->level > 8 ? 0xF : uv->level;
  36. if (!enable) AIC_INFO("mute Line2-ADC");
  37. else AIC_INFO("set Line2-ADC gain %.1f dB", index2db(uv->level, ADC_level));
  38. aic3104_regfieldset(17, 0b11110000, in_level);
  39. aic3104_regfieldset(18, 0b00001111, in_level);
  40. } return;
  41. ...
  42. }

通道切换时(初始化为都不开,第一次读到配置后进行初始化/第一次切换)

  1. auto &use = mpp_aio_context()->ai_input;
  2. const auto want = getValue();
  3. if (use != want) {
  4. RX_NOTICE("adjust AI:PORT: %s --> %s", uintf_name(use), uintf_name(want));
  5. use = want;
  6. switch (want) {
  7. default:
  8. break;
  9. case UINTF_AIN_MIC:
  10. aic3104_switch(AWGT_SWITCH_IN_1, true);
  11. aic3104_switch(AWGT_SWITCH_IN_2, false);
  12. break;
  13. case UINTF_AIN_LINE:
  14. aic3104_switch(AWGT_SWITCH_IN_1, false);
  15. aic3104_switch(AWGT_SWITCH_IN_2, true);
  16. break;
  17. }
  18. }
  1. void aic3104_switch(const Aic3104Widget widget, bool state) {
  2. switch (widget) {
  3. case AWGT_SWITCH_IN_PGA: {
  4. bool *enable = &aic3104_get_state(widget)->as_bool;
  5. *enable = !!state;
  6. AIC_INFO("%s PGA", state ? "unmute" : "mute");
  7. aic3104_regfieldset(15, 0b10000000, !*enable);
  8. aic3104_regfieldset(16, 0b10000000, !*enable);
  9. } return;
  10. case AWGT_SWITCH_IN_ADC: {
  11. bool *enable = &aic3104_get_state(widget)->as_bool;
  12. *enable = !!state;
  13. AIC_INFO("%s ADC", state ? "unmute" : "mute");
  14. aic3104_regfieldset(19, 0b00000100, *enable);
  15. aic3104_regfieldset(22, 0b00000100, *enable);
  16. } return;
  17. case AWGT_SWITCH_OUT_DAC: {
  18. bool *enable = &aic3104_get_state(widget)->as_bool;
  19. *enable = !!state;
  20. AIC_INFO("%s DAC", state ? "unmute" : "mute");
  21. aic3104_regfieldset(43, 0b10000000, !*enable);
  22. aic3104_regfieldset(44, 0b10000000, !*enable);
  23. } return;
  24. // =AWGT_SWITCH_IN_1
  25. case AWGT_SWITCH_IN_MIC: {
  26. bool *enable = &aic3104_get_state(widget)->as_bool;
  27. const Aic3104StateUint *uv = &aic3104_get_state(AWGT_TUNE_IN_MIC)->as_uvalue;
  28. *enable = !!state;
  29. const uint in_level = !state || uv->level > 8 ? 0xF : uv->level;
  30. aic3104_switch(AWGT_SWITCH_IN_PGA, false);
  31. aic3104_switch(AWGT_SWITCH_IN_ADC, false);
  32. #if BOARD_IS_BASELINE(USING_BOARD)
  33. AIC_INFO("set MICBIAS=AVDD");
  34. aic3104_regfieldset(25, 0xFF, 0xC0); // MICBIAS=AVDD
  35. AIC_INFO("set LineL1P to diff-mode");
  36. aic3104_regfieldset(19, 0b10000000, 1); // Line1L P/M diff-mode
  37. aic3104_regfieldset(24, 0b10000000, 1); // Line1L P/M diff-mode
  38. AIC_INFO("%s LineL1P to PGA-L/R", state ? "route" : "cut");
  39. aic3104_regfieldset(19, 0b01111000, in_level); // Line1L --> L-PGA
  40. aic3104_regfieldset(24, 0b01111000, in_level); // Line1L --> R-PGA
  41. #elif USING_BOARD == CP800_SS528
  42. AIC_INFO("set MICBIAS=AVDD");
  43. aic3104_regfieldset(25, 0xFF, 0xC0); // MICBIAS=AVDD
  44. AIC_INFO("set LineL1 to single-ended-mode");
  45. aic3104_regfieldset(19, 0b10000000, 0); // Line1L P single-ended-mode
  46. aic3104_regfieldset(22, 0b10000000, 0); // Line1R P single-ended-mode
  47. AIC_INFO("%s LineL1-L/R to PGA-L/R", state ? "route" : "cut");
  48. aic3104_regfieldset(19, 0b01111000, in_level); // Line1L --> L-PGA
  49. aic3104_regfieldset(22, 0b01111000, in_level); // Line1R --> R-PGA
  50. #endif
  51. aic3104_switch(AWGT_SWITCH_IN_ADC, true);
  52. aic3104_switch(AWGT_SWITCH_IN_PGA, true);
  53. } return;
  54. // =AWGT_SWITCH_IN_2
  55. case AWGT_SWITCH_IN_LINE: {
  56. bool *enable = &aic3104_get_state(widget)->as_bool;
  57. const Aic3104StateUint *uv = &aic3104_get_state(AWGT_TUNE_IN_LINE)->as_uvalue;
  58. *enable = !!state;
  59. const uint in_level = !state || uv->level > 8 ? 0xF : uv->level;
  60. aic3104_switch(AWGT_SWITCH_IN_PGA, false);
  61. aic3104_switch(AWGT_SWITCH_IN_ADC, false);
  62. AIC_INFO("%s Line2-L/R to PGA-L/R", state ? "route" : "cut");
  63. aic3104_regfieldset(17, 0b00001111, 0xF); // Line2R --x-> L-PGA
  64. aic3104_regfieldset(18, 0b11110000, 0xF); // Line2L --x-> R-PGA
  65. aic3104_regfieldset(17, 0b11110000, in_level); // Line2L ----> L-PGA
  66. aic3104_regfieldset(18, 0b00001111, in_level); // Line2R ----> R-PGA
  67. aic3104_switch(AWGT_SWITCH_IN_ADC, true);
  68. aic3104_switch(AWGT_SWITCH_IN_PGA, true);
  69. } return;
  70. ...
  71. }

全局配置表,对不同设备没有任何不同。某两项由环境变量读取。

  1. struct aic3104_settings {
  2. struct int_region PGA_gain; //!< [0,119] means 0dB~59.5dB +.5dB
  3. struct int_region Line1L_level; //!< our Mic-In. [8,0] means -12dB~0dB +1.5dB, 15=not-connected
  4. struct int_region Line2_level; //!< our Line-In. [8,0] means -12dB~0dB +1.5dB, 15=not-connected
  5. struct int_region DAC_dvolume; //!< [127,0] means -63.5dB~0dB +.5dB
  6. struct int_region DAC_LLOP_avolume; //!< our Line1-Out. [117,0] means -78.3dB~0dB, 118=mute
  7. struct int_region LLOP_level; //!< our Line1-Out. [0,9] means 0dB~9dB, 10=mute
  8. struct int_region DAC_HPOUT_avolume; //!< our Line2-Out. [117,0] means -78.3dB~0dB, 118=mute
  9. struct int_region HPOUT_level; //!< our Line2-Out. [0,9] means 0dB~9dB, 10=mute
  10. float end_of_table;
  11. const float *PGA_gain_table;
  12. const float *ADC_level_table;
  13. const float *DAC_volume_table;
  14. const float *Out_volume_table;
  15. } *aic3104_get_settings() {
  16. static struct aic3104_settings settings = {};
  17. static bool inited = false;
  18. #define DEBUG_AIC3104_0DB "true"
  19. //! P0, R15/R16 ADC-PGA 增益最大值。过高可能引入更多底噪。曾经为 20
  20. #define MAX_ADC_PGA_GAIN "32"
  21. if (!inited) {
  22. if (strcasecmp("true", rx_loadenv(DEBUG_AIC3104_0DB)) == 0) {
  23. settings.PGA_gain.min = 0;
  24. settings.PGA_gain.max = clamp_i32(atoi(rx_loadenv(MAX_ADC_PGA_GAIN)), 20, 127);
  25. settings.Line1L_level.min = 8;
  26. settings.Line1L_level.max = 0; // noisy if <6
  27. settings.Line2_level.min = 8;
  28. settings.Line2_level.max = 0; // noisy if <4, was 2
  29. settings.DAC_dvolume.min = 127;
  30. settings.DAC_dvolume.max = 0; // noisy if >5
  31. settings.DAC_LLOP_avolume.min = 118;
  32. settings.DAC_LLOP_avolume.max = 0; // noisy if >1
  33. settings.LLOP_level.min = 0;
  34. settings.LLOP_level.max = 9;
  35. settings.DAC_HPOUT_avolume.min = 118;
  36. settings.DAC_HPOUT_avolume.max = 0; // noisy if >12
  37. settings.HPOUT_level.min = 0;
  38. settings.HPOUT_level.max = 9; // noisy if <4
  39. } else {
  40. // 未启用分支
  41. // ...
  42. }
  43. settings.end_of_table = END_OF_TABLE;
  44. settings.PGA_gain_table = aic3104__PGA_gain_table;
  45. settings.ADC_level_table = aic3104__ADC_level_table;
  46. settings.DAC_volume_table = aic3104__DAC_volume_table;
  47. settings.Out_volume_table = aic3104__Out_volume_table;
  48. }
  49. return &settings;
  50. }

附录

MIC 日志对比

调整之前(mic>line 导致可能削峰)

  1. 1970-01-02 03:46:06.849098 NOTICE - update AENC_INPUT: mic (was line) <<ALGO#rxlib.cc:295
  2. 1970-01-02 03:46:06.860278 NOTICE - adjust AI:PORT: AIN-LINE --> AIN-MIC <<ALGO#aiencsend.cc:978
  3. 1970-01-02 03:46:06.860332 INFO - AIC3104: mute PGA <<ALGO#tlv320aic31.c:729
  4. 1970-01-02 03:46:06.861258 INFO - AIC3104: R15, 00h --> 80h <<ALGO#tlv320aic31.c:41
  5. 1970-01-02 03:46:06.862141 INFO - AIC3104: R16, 00h --> 80h <<ALGO#tlv320aic31.c:41
  6. 1970-01-02 03:46:06.862158 INFO - AIC3104: mute ADC <<ALGO#tlv320aic31.c:737
  7. 1970-01-02 03:46:06.863031 INFO - AIC3104: R19, 7Ch --> 78h <<ALGO#tlv320aic31.c:41
  8. 1970-01-02 03:46:06.863906 INFO - AIC3104: R22, 7Ch --> 78h <<ALGO#tlv320aic31.c:41
  9. 1970-01-02 03:46:06.863921 INFO - AIC3104: set MICBIAS=AVDD <<ALGO#tlv320aic31.c:777
  10. 1970-01-02 03:46:06.864794 INFO - AIC3104: R25, C6h --> C0h <<ALGO#tlv320aic31.c:41
  11. 1970-01-02 03:46:06.864809 INFO - AIC3104: set LineL1 to single-ended-mode <<ALGO#tlv320aic31.c:779
  12. 1970-01-02 03:46:06.865305 INFO - AIC3104: R19, 78h (unchanged) <<ALGO#tlv320aic31.c:37
  13. 1970-01-02 03:46:06.865803 INFO - AIC3104: R22, 78h (unchanged) <<ALGO#tlv320aic31.c:37
  14. 1970-01-02 03:46:06.865817 INFO - AIC3104: route LineL1-L/R to PGA-L/R <<ALGO#tlv320aic31.c:782
  15. 1970-01-02 03:46:06.866689 INFO - AIC3104: R19, 78h --> 00h <<ALGO#tlv320aic31.c:41
  16. 1970-01-02 03:46:06.867562 INFO - AIC3104: R22, 78h --> 00h <<ALGO#tlv320aic31.c:41
  17. 1970-01-02 03:46:06.867576 INFO - AIC3104: unmute ADC <<ALGO#tlv320aic31.c:737
  18. 1970-01-02 03:46:06.868448 INFO - AIC3104: R19, 00h --> 04h <<ALGO#tlv320aic31.c:41
  19. 1970-01-02 03:46:06.869323 INFO - AIC3104: R22, 00h --> 04h <<ALGO#tlv320aic31.c:41
  20. 1970-01-02 03:46:06.869338 INFO - AIC3104: unmute PGA <<ALGO#tlv320aic31.c:729
  21. 1970-01-02 03:46:06.870230 INFO - AIC3104: R15, 80h --> 00h <<ALGO#tlv320aic31.c:41
  22. 1970-01-02 03:46:06.871111 INFO - AIC3104: R16, 80h --> 00h <<ALGO#tlv320aic31.c:41
  23. 1970-01-02 03:46:06.871127 INFO - AIC3104: mute PGA <<ALGO#tlv320aic31.c:729
  24. 1970-01-02 03:46:06.872000 INFO - AIC3104: R15, 00h --> 80h <<ALGO#tlv320aic31.c:41
  25. 1970-01-02 03:46:06.872874 INFO - AIC3104: R16, 00h --> 80h <<ALGO#tlv320aic31.c:41
  26. 1970-01-02 03:46:06.872889 INFO - AIC3104: mute ADC <<ALGO#tlv320aic31.c:737
  27. 1970-01-02 03:46:06.873772 INFO - AIC3104: R19, 04h --> 00h <<ALGO#tlv320aic31.c:41
  28. 1970-01-02 03:46:06.874647 INFO - AIC3104: R22, 04h --> 00h <<ALGO#tlv320aic31.c:41
  29. 1970-01-02 03:46:06.874661 INFO - AIC3104: cut Line2-L/R to PGA-L/R <<ALGO#tlv320aic31.c:797
  30. 1970-01-02 03:46:06.875158 INFO - AIC3104: R17, 0Fh (unchanged) <<ALGO#tlv320aic31.c:37
  31. 1970-01-02 03:46:06.875657 INFO - AIC3104: R18, F0h (unchanged) <<ALGO#tlv320aic31.c:37
  32. 1970-01-02 03:46:06.876530 INFO - AIC3104: R17, 0Fh --> FFh <<ALGO#tlv320aic31.c:41
  33. 1970-01-02 03:46:06.877403 INFO - AIC3104: R18, F0h --> FFh <<ALGO#tlv320aic31.c:41
  34. 1970-01-02 03:46:06.877418 INFO - AIC3104: unmute ADC <<ALGO#tlv320aic31.c:737
  35. 1970-01-02 03:46:06.878289 INFO - AIC3104: R19, 00h --> 04h <<ALGO#tlv320aic31.c:41
  36. 1970-01-02 03:46:06.879172 INFO - AIC3104: R22, 00h --> 04h <<ALGO#tlv320aic31.c:41
  37. 1970-01-02 03:46:06.879187 INFO - AIC3104: unmute PGA <<ALGO#tlv320aic31.c:729
  38. 1970-01-02 03:46:06.880076 INFO - AIC3104: R15, 80h --> 00h <<ALGO#tlv320aic31.c:41
  39. 1970-01-02 03:46:06.880956 INFO - AIC3104: R16, 80h --> 00h <<ALGO#tlv320aic31.c:41

调整之后

  1. 1970-01-02 03:27:22.820489 NOTICE - adjust AI:PORT: AIN-LINE --> AIN-MIC <<ALGO#aiencsend.cc:978
  2. 1970-01-02 03:27:22.820546 INFO - AIC3104: mute PGA <<ALGO#tlv320aic31.c:767
  3. 1970-01-02 03:27:22.821534 INFO - AIC3104: R15, 00h --> 80h <<ALGO#tlv320aic31.c:41
  4. 1970-01-02 03:27:22.822428 INFO - AIC3104: R16, 00h --> 80h <<ALGO#tlv320aic31.c:41
  5. 1970-01-02 03:27:22.822449 INFO - AIC3104: mute ADC <<ALGO#tlv320aic31.c:775
  6. 1970-01-02 03:27:22.823558 INFO - AIC3104: R19, 7Ch --> 78h <<ALGO#tlv320aic31.c:41
  7. 1970-01-02 03:27:22.824451 INFO - AIC3104: R22, 7Ch --> 78h <<ALGO#tlv320aic31.c:41
  8. 1970-01-02 03:27:22.824472 INFO - AIC3104: set MICBIAS=AVDD <<ALGO#tlv320aic31.c:805
  9. 1970-01-02 03:27:22.825352 INFO - AIC3104: R25, C6h --> C0h <<ALGO#tlv320aic31.c:41
  10. 1970-01-02 03:27:22.825371 INFO - AIC3104: set LineL1 to single-ended-mode <<ALGO#tlv320aic31.c:807
  11. 1970-01-02 03:27:22.825934 INFO - AIC3104: R19, 78h (unchanged) <<ALGO#tlv320aic31.c:37
  12. 1970-01-02 03:27:22.826444 INFO - AIC3104: R22, 78h (unchanged) <<ALGO#tlv320aic31.c:37
  13. 1970-01-02 03:27:22.826460 INFO - AIC3104: route LineL1-L/R to PGA-L/R <<ALGO#tlv320aic31.c:810
  14. 1970-01-02 03:27:22.827424 INFO - AIC3104: R19, 78h --> 20h <<ALGO#tlv320aic31.c:41
  15. 1970-01-02 03:27:22.828307 INFO - AIC3104: R22, 78h --> 20h <<ALGO#tlv320aic31.c:41
  16. 1970-01-02 03:27:22.828327 INFO - AIC3104: unmute ADC <<ALGO#tlv320aic31.c:775
  17. 1970-01-02 03:27:22.829205 INFO - AIC3104: R19, 20h --> 24h <<ALGO#tlv320aic31.c:41
  18. 1970-01-02 03:27:22.830115 INFO - AIC3104: R22, 20h --> 24h <<ALGO#tlv320aic31.c:41
  19. 1970-01-02 03:27:22.830139 INFO - AIC3104: unmute PGA <<ALGO#tlv320aic31.c:767
  20. 1970-01-02 03:27:22.831020 INFO - AIC3104: R15, 80h --> 00h <<ALGO#tlv320aic31.c:41
  21. 1970-01-02 03:27:22.831902 INFO - AIC3104: R16, 80h --> 00h <<ALGO#tlv320aic31.c:41
  22. 1970-01-02 03:27:22.831922 INFO - AIC3104: mute PGA <<ALGO#tlv320aic31.c:767
  23. 1970-01-02 03:27:22.832800 INFO - AIC3104: R15, 00h --> 80h <<ALGO#tlv320aic31.c:41
  24. 1970-01-02 03:27:22.833912 INFO - AIC3104: R16, 00h --> 80h <<ALGO#tlv320aic31.c:41
  25. 1970-01-02 03:27:22.833943 INFO - AIC3104: mute ADC <<ALGO#tlv320aic31.c:775
  26. 1970-01-02 03:27:22.834826 INFO - AIC3104: R19, 24h --> 20h <<ALGO#tlv320aic31.c:41
  27. 1970-01-02 03:27:22.835707 INFO - AIC3104: R22, 24h --> 20h <<ALGO#tlv320aic31.c:41
  28. 1970-01-02 03:27:22.835726 INFO - AIC3104: cut Line2-L/R to PGA-L/R <<ALGO#tlv320aic31.c:825
  29. 1970-01-02 03:27:22.836243 INFO - AIC3104: R17, 0Fh (unchanged) <<ALGO#tlv320aic31.c:37
  30. 1970-01-02 03:27:22.836751 INFO - AIC3104: R18, F0h (unchanged) <<ALGO#tlv320aic31.c:37
  31. 1970-01-02 03:27:22.837629 INFO - AIC3104: R17, 0Fh --> FFh <<ALGO#tlv320aic31.c:41
  32. 1970-01-02 03:27:22.838511 INFO - AIC3104: R18, F0h --> FFh <<ALGO#tlv320aic31.c:41
  33. 1970-01-02 03:27:22.838532 INFO - AIC3104: unmute ADC <<ALGO#tlv320aic31.c:775
  34. 1970-01-02 03:27:22.839411 INFO - AIC3104: R19, 20h --> 24h <<ALGO#tlv320aic31.c:41
  35. 1970-01-02 03:27:22.840324 INFO - AIC3104: R22, 20h --> 24h <<ALGO#tlv320aic31.c:41
  36. 1970-01-02 03:27:22.840351 INFO - AIC3104: unmute PGA <<ALGO#tlv320aic31.c:767
  37. 1970-01-02 03:27:22.841476 INFO - AIC3104: R15, 80h --> 00h <<ALGO#tlv320aic31.c:41
  38. 1970-01-02 03:27:22.842381 INFO - AIC3104: R16, 80h --> 00h <<ALGO#tlv320aic31.c:41

此时 line-in 不变

  1. 1970-01-02 03:46:00.821047 NOTICE - adjust AI:PORT: (undefined:0) --> AIN-LINE <<ALGO#aiencsend.cc:978
  2. 1970-01-02 03:46:00.821077 INFO - AIC3104: mute PGA <<ALGO#tlv320aic31.c:729
  3. 1970-01-02 03:46:00.821618 INFO - AIC3104: R15, 80h (unchanged) <<ALGO#tlv320aic31.c:37
  4. 1970-01-02 03:46:00.822155 INFO - AIC3104: R16, 80h (unchanged) <<ALGO#tlv320aic31.c:37
  5. 1970-01-02 03:46:00.822183 INFO - AIC3104: mute ADC <<ALGO#tlv320aic31.c:737
  6. 1970-01-02 03:46:00.823101 INFO - AIC3104: R19, 7Ch --> 78h <<ALGO#tlv320aic31.c:41
  7. 1970-01-02 03:46:00.824021 INFO - AIC3104: R22, 7Ch --> 78h <<ALGO#tlv320aic31.c:41
  8. 1970-01-02 03:46:00.824054 INFO - AIC3104: set MICBIAS=AVDD <<ALGO#tlv320aic31.c:777
  9. 1970-01-02 03:46:00.824965 INFO - AIC3104: R25, 06h --> C0h <<ALGO#tlv320aic31.c:41
  10. 1970-01-02 03:46:00.825006 INFO - AIC3104: set LineL1 to single-ended-mode <<ALGO#tlv320aic31.c:779
  11. 1970-01-02 03:46:00.825481 INFO - open link(IXS:Option{ UL A:MP2 #0 WO }) ... ok(0x7fa800eb50) <<ALGO#rxlib.cc:132
  12. 1970-01-02 03:46:00.825525 INFO - AIC3104: R19, 78h (unchanged) <<ALGO#tlv320aic31.c:37
  13. 1970-01-02 03:46:00.826037 INFO - AIC3104: R22, 78h (unchanged) <<ALGO#tlv320aic31.c:37
  14. 1970-01-02 03:46:00.826063 INFO - AIC3104: cut LineL1-L/R to PGA-L/R <<ALGO#tlv320aic31.c:782
  15. 1970-01-02 03:46:00.826490 DEBUG - AINPUT#0: init done <<ALGO#aiencsend.cc:471
  16. 1970-01-02 03:46:00.826577 INFO - AIC3104: R19, 78h (unchanged) <<ALGO#tlv320aic31.c:37
  17. 1970-01-02 03:46:00.827091 INFO - AIC3104: R22, 78h (unchanged) <<ALGO#tlv320aic31.c:37
  18. 1970-01-02 03:46:00.827107 INFO - AIC3104: unmute ADC <<ALGO#tlv320aic31.c:737
  19. 1970-01-02 03:46:00.827981 INFO - AIC3104: R19, 78h --> 7Ch <<ALGO#tlv320aic31.c:41
  20. 1970-01-02 03:46:00.828856 INFO - AIC3104: R22, 78h --> 7Ch <<ALGO#tlv320aic31.c:41
  21. 1970-01-02 03:46:00.828871 INFO - AIC3104: unmute PGA <<ALGO#tlv320aic31.c:729
  22. 1970-01-02 03:46:00.829743 INFO - AIC3104: R15, 80h --> 00h <<ALGO#tlv320aic31.c:41
  23. 1970-01-02 03:46:00.830878 INFO - AIC3104: R16, 80h --> 00h <<ALGO#tlv320aic31.c:41
  24. 1970-01-02 03:46:00.830897 INFO - AIC3104: mute PGA <<ALGO#tlv320aic31.c:729
  25. 1970-01-02 03:46:00.831769 INFO - AIC3104: R15, 00h --> 80h <<ALGO#tlv320aic31.c:41
  26. 1970-01-02 03:46:00.832643 INFO - AIC3104: R16, 00h --> 80h <<ALGO#tlv320aic31.c:41
  27. 1970-01-02 03:46:00.832661 INFO - AIC3104: mute ADC <<ALGO#tlv320aic31.c:737
  28. 1970-01-02 03:46:00.833535 INFO - AIC3104: R19, 7Ch --> 78h <<ALGO#tlv320aic31.c:41
  29. 1970-01-02 03:46:00.834408 INFO - AIC3104: R22, 7Ch --> 78h <<ALGO#tlv320aic31.c:41
  30. 1970-01-02 03:46:00.834424 INFO - AIC3104: route Line2-L/R to PGA-L/R <<ALGO#tlv320aic31.c:797
  31. 1970-01-02 03:46:00.834923 INFO - AIC3104: R17, FFh (unchanged) <<ALGO#tlv320aic31.c:37
  32. 1970-01-02 03:46:00.835421 INFO - AIC3104: R18, FFh (unchanged) <<ALGO#tlv320aic31.c:37
  33. 1970-01-02 03:46:00.836294 INFO - AIC3104: R17, FFh --> 0Fh <<ALGO#tlv320aic31.c:41
  34. 1970-01-02 03:46:00.837168 INFO - AIC3104: R18, FFh --> F0h <<ALGO#tlv320aic31.c:41
  35. 1970-01-02 03:46:00.837182 INFO - AIC3104: unmute ADC <<ALGO#tlv320aic31.c:737
  36. 1970-01-02 03:46:00.838053 INFO - AIC3104: R19, 78h --> 7Ch <<ALGO#tlv320aic31.c:41
  37. 1970-01-02 03:46:00.838926 INFO - AIC3104: R22, 78h --> 7Ch <<ALGO#tlv320aic31.c:41
  38. 1970-01-02 03:46:00.838941 INFO - AIC3104: unmute PGA <<ALGO#tlv320aic31.c:729
  39. 1970-01-02 03:46:00.839812 INFO - AIC3104: R15, 80h --> 00h <<ALGO#tlv320aic31.c:41
  40. 1970-01-02 03:46:00.840941 INFO - AIC3104: R16, 80h --> 00h <<ALGO#tlv320aic31.c:41

保存数据文件的对应阶段

flowchart TD GAIN["S/W Gain"] 3104 --> sv_raw[/"`save: ai_raw_s16stereo.pcm `"/] --> MIX MIX --> sv_mix[/"`save: ai_mix_s16mono.pcm `"/] --> RESAMPLE1[Resample for Gain] subgraph "Gain-Control (closed)": RESAMPLE1 --> sv_agc0[/"`save: ai_agc0_s16mono.pcm `"/] --> GAIN["`S/W Gain`"] GAIN --> sv_agc[/"`save: ai_agc_s16mono.pcm`"/] end sv_agc --> RESAMPLE2[Resample for ENC] RESAMPLE2 --> ENC["`ENC
SEND
...`"]
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注