ESP32的ADF詳解:6. Audio Processing的API

一、Downmix

1. 核心功能

基礎音頻流新加入音頻流混合為單一輸出流,支持動態增益控制和狀態轉換。輸出聲道數與基礎音頻一致,新加入音頻自動轉換聲道匹配。

在這里插入圖片描述


2. 關鍵特性

  1. 聲道處理

    • 輸出聲道數 = 基礎音頻聲道數
    • 新加入音頻自動轉換聲道(如立體聲→單聲道取平均,單聲道→立體聲復制)
    • 采樣率必須一致,否則報錯
  2. 三態工作流程

    狀態行為增益變化
    Bypass Downmixing僅處理基礎音頻流基礎音頻增益恒定
    Switch on Downmixing1. 過渡期:兩路增益漸變到目標值
    2. 穩定期:共享相同目標增益
    基礎增益: 原值→目標值
    新加入增益: 0→目標值
    Switch off Downmixing1. 過渡期:增益回退到原始值
    2. 穩定期:恢復獨立增益后進入Bypass
    基礎增益: 目標值→原值
    新加入增益: 目標值→0
  3. 增益控制

    • 獨立控制兩路音頻增益
    • 過渡期支持線性/非線性漸變
    • 穩定期兩路共享相同增益值

3. 典型應用場景

  1. 智能音箱:語音提示混入背景音樂
  2. 車載系統:導航提示與娛樂音頻混合
  3. 直播系統:麥克風人聲與背景音混合
  4. 多語言播報:基礎音軌+實時語言疊加

關鍵約束:輸入音頻必須采樣率一致,否則API返回錯誤碼 ESP_ERR_INVALID_ARG

4. API

1. 核心配置與初始化

API/結構體功能描述關鍵參數/成員
downmix_init(downmix_cfg_t *)初始化Downmix音頻元素downmix_info(工作模式/輸出類型)、max_sample(每幀采樣數)、out_rb_size
downmix_cfg_t配置結構體- esp_downmix_info_t downmix_info
- 任務棧大小/核心/優先級
- 緩沖區大小
DEFAULT_DOWNMIX_CONFIG()生成默認配置宏預定義任務棧(4KB)、優先級(5)、核心(1)、緩沖區大小(2KB)

2. 輸入輸出控制

API功能描述關鍵參數
downmix_set_input_rb()設置輸入環形緩沖區rb(緩沖區句柄)、index(輸入流索引,0/1)
downmix_set_input_rb_timeout()設置輸入緩沖區超時時間ticks_to_wait(RTOS tick數)
downmix_set_output_type()設置輸出聲道類型output_type(僅支持MONODUAL)
downmix_set_out_ctx_info()傳遞輸出流的上下文信息out_ctx(如各聲道獨立控制標志)

3. 工作模式與狀態控制

API功能描述關鍵參數
downmix_set_work_mode()設置工作模式mode:
- BYPASS(直通)
- ON(開啟混音)
- OFF(關閉混音)
downmix_set_transit_time_info()設置狀態切換的過渡時間transit_time(毫秒)、index(輸入流索引)

4. 音頻流參數配置

API功能描述關鍵參數
downmix_set_source_stream_info()設置輸入流的采樣率和聲道數rate(必須一致)、ch(僅支持1/2聲道)、index(輸入流索引)
source_info_init()批量初始化多路輸入流信息source_info(結構體數組,含采樣率/聲道數/增益等)

5. 增益控制

API功能描述關鍵參數
downmix_set_gain_info()設置輸入流的增益值gain(數組[原增益, 目標增益],范圍[-100dB,100dB])

6. 數據結構與宏定義

類型/宏定義說明
esp_downmix_info_t工作模式(work_mode) + 輸出類型(output_type)
esp_downmix_input_info_t輸入流信息(采樣率/聲道數/增益/過渡時間)
DOWNMIX_TASK_STACK默認任務棧大小(4KB)
DM_BUF_SIZE內部緩沖區大小(默認1024樣本)
/*** @brief 下混配置結構體,用于配置下混處理的各種參數。*/
struct downmix_cfg_t {esp_downmix_info_t downmix_info; ///< 下混信息int max_sample; ///< 每次下混處理的樣本數int out_rb_size; ///< 環形緩沖區大小int task_stack; ///< 任務棧大小int task_core; ///< 任務運行的核心(0 或 1)int task_prio; ///< 任務優先級(基于 FreeRTOS 的優先級)bool stack_in_ext; ///< 是否嘗試在外部內存中分配棧
};

7. 關鍵約束與注意事項

  1. 采樣率一致性:所有輸入流必須相同,否則返回ESP_ERR_INVALID_ARG
  2. 聲道支持:僅支持單聲道(MONO)和雙聲道(DUAL),其他聲道數需預處理。
  3. 增益范圍-100dB100dB,超出范圍可能導致 clipping。
  4. 實時性:過渡時間(transit_time)影響狀態切換平滑度,需根據應用場景調整。

8. 典型調用流程

// 1. 初始化配置
downmix_cfg_t cfg = DEFAULT_DOWNMIX_CONFIG();
cfg.downmix_info.work_mode = ESP_DM_BYPASS;
cfg.downmix_info.output_type = ESP_DM_DUAL_OUTPUT;// 2. 創建句柄
audio_element_handle_t downmixer = downmix_init(&cfg);// 3. 設置輸入流參數
downmix_set_source_stream_info(downmixer, 44100, 2, 0); // 基礎流
downmix_set_source_stream_info(downmixer, 44100, 1, 1); // 新加入流(自動轉立體聲)// 4. 配置增益
float gains[2] = {0.0f, -6.0f}; // [基礎增益, 目標增益]
downmix_set_gain_info(downmixer, gains, 0);// 5. 啟動混音
downmix_set_work_mode(downmixer, ESP_DM_ON);
downmix_set_transit_time_info(downmixer, 500, 0); // 500ms過渡

二、Equalizer

1. 功能概述

  • Equalizer 是 ESP ADF 提供的一個強大的音頻均衡器模塊,支持 10 個頻段和多種采樣率,適用于音頻增強、音效定制等場景。通過 equalizer_cfgequalizer_set_gain_info() 函數,開發者可以靈活調整音頻信號的頻率響應,滿足不同的音頻處理需求。

  • Equalizer 支持:

    • 固定頻段數量:10 個頻段。
    • 支持的采樣率:11025 Hz、22050 Hz、44100 Hz 和 48000 Hz。
    • 默認增益:每個頻段的默認增益為 -13 dB。

2. 頻段中心頻率

Equalizer 的 10 個頻段的中心頻率如下表所示:

頻段索引0123456789
頻率31 Hz62 Hz125 Hz250 Hz500 Hz1 kHz2 kHz4 kHz8 kHz16 kHz

3. 使用場景

Equalizer 適用于需要調整音頻信號頻率響應的場景,例如:

  • 音頻增強:提升低頻或高頻部分的音量。
  • 音效定制:根據不同需求調整音頻特性,如增強低音或高音。
  • 噪聲消除:通過調整特定頻段的增益來減少噪聲。

4. 示例代碼

以下是一個簡單的示例,展示如何使用 Equalizer:

#include "esp_adf.h"
// 初始化 Equalizer
equalizer_cfg_t eq_cfg = {.bands = {{ .gain = -10 },  // 31 Hz 頻段增益為 -10 dB{ .gain = -5 },   // 62 Hz 頻段增益為 -5 dB// 其他頻段可以按需設置},.band_count = 10
};
// 創建 Equalizer 實例
equalizer_handle_t eq_handle = equalizer_create(&eq_cfg);
// 設置單個頻段的增益
equalizer_set_gain_info(eq_handle, 3, -8);  // 設置 250 Hz 頻段增益為 -8 dB
// 應用 Equalizer
audio_element_handle_t audio_src = ...;  // 音頻源
audio_element_handle_t audio_dest = ...; // 音頻目標
audio_element_link(audio_src, eq_handle);
audio_element_link(eq_handle, audio_dest);

5. API

1. 核心配置與初始化

API/結構體功能描述關鍵參數/成員
equalizer_init(equalizer_cfg_t *)初始化均衡器音頻元素samplerate(支持11025/22050/44100/48000Hz)、channel(單/雙聲道)、set_gain(增益數組)
equalizer_cfg_t配置結構體- task_stack(默認4KB)
- out_rb_size(輸出緩沖區大小)
- stack_in_ext(外部內存分配)
DEFAULT_EQUALIZER_CONFIG()生成默認配置宏預定義任務棧、優先級(5)、核心(1)、緩沖區大小(2KB)

2. 參數設置

API功能描述關鍵參數
equalizer_set_info()設置采樣率和聲道數rate(必須為特定值)、ch(1或2)
equalizer_set_gain_info()設置指定頻段的增益index(頻段索引)、value_gain(增益值)、is_channels_gain_equal(雙聲道同步)

3. 數據結構與宏定義

類型/宏定義說明
EQUALIZER_TASK_STACK默認任務棧大小(4KB)
EQUALIZER_RINGBUFFER_SIZE環形緩沖區大小(默認2KB)
equalizer_cfg_t包含采樣率、聲道數、增益數組等配置參數

4. 關鍵特性詳解

頻段分布(不同采樣率下)
采樣率支持的10個頻段中心頻率(Hz)
11025Hz31, 62, 125, 250, 500, 1000, 2000, 3000, 4000, 5500
22050Hz31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 11000
44100Hz31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 16000
48000Hz同44100Hz
增益控制規則
  • 單聲道(MONO)

    • 10個可調頻段(索引0~9)
    • 示例:equalizer_set_gain_info(self, 3, 5, true) → 設置第4個頻段(250Hz)增益為5dB
  • 雙聲道(DUAL)

    • 獨立控制is_channels_gain_equal=false):20個頻段(左聲道09,右聲道1019)
      // 設置左聲道第2頻段(62Hz)增益為3dB
      equalizer_set_gain_info(self, 1, 3, false);
      // 設置右聲道第5頻段(1kHz)增益為-2dB
      equalizer_set_gain_info(self, 14, -2, false);
      
    • 同步控制is_channels_gain_equal=true):10個頻段(左右聲道聯動)
      // 同時設置左右聲道的第7頻段(4kHz)增益為6dB
      equalizer_set_gain_info(self, 6, 6, true);
      

5. 典型調用流程

// 1. 初始化配置
equalizer_cfg_t cfg = DEFAULT_EQUALIZER_CONFIG();
cfg.samplerate = 44100;
cfg.channel = 2;  // 立體聲
int gains[20] = {0};  // 默認所有頻段增益為0dB
cfg.set_gain = gains;// 2. 創建均衡器實例
audio_element_handle_t eq = equalizer_init(&cfg);// 3. 設置個性化增益
// 提升低頻(左聲道125Hz +5dB)
equalizer_set_gain_info(eq, 2, 5, false); 
// 衰減高頻(右聲道8kHz -3dB)
equalizer_set_gain_info(eq, 17, -3, false);
// 同步調整中頻(左右聲道1kHz +2dB)
equalizer_set_gain_info(eq, 5, 2, true);

6. 約束與注意事項

  1. 采樣率限制:僅支持11025/22050/44100/48000Hz,其他值返回ESP_ERR_INVALID_ARG
  2. 頻段索引范圍
    • 單聲道:0~9
    • 雙聲道獨立控制:019(左09,右10~19)
  3. 增益范圍:未明確限制,但建議在[-12dB, +12dB]內避免失真。
  4. 實時性:修改增益會立即生效,可能導致音頻瞬態變化,建議在靜音時調整。

三、Resample Filter

  • 重采樣濾波器是一種音頻元素,旨在對輸入的數據流進行降采樣或升采樣,同時還可以在立體聲和單聲道之間轉換數據。

1. API

1. 核心配置與初始化

API/結構體功能描述關鍵參數/成員
rsp_filter_init(rsp_filter_cfg_t *)初始化重采樣音頻元素src_rate/dest_rate(Hz)、src_ch/dest_ch(1/2)、mode(編碼/解碼模式)
rsp_filter_cfg_t配置結構體- type(自動/上采樣/下采樣)
- complexity(1-5級精度)
- prefer_flag(CPU/RAM優化傾向)
DEFAULT_RESAMPLE_FILTER_CONFIG()生成默認配置宏預定義任務棧(4KB)、優先級(5)、核心(1)、緩沖區大小(2KB)

2. 參數動態設置

API功能描述關鍵參數
rsp_filter_set_src_info()設置輸入流的采樣率和聲道數src_rate(Hz)、src_ch(1/2)
rsp_filter_change_src_info()動態修改輸入流參數(含位寬)src_bit(支持8/16/24/32bit)

3. 工作模式與特性

重采樣模式(esp_resample_mode_t
模式行為特性
RESAMPLE_DECODE_MODE自動從audio_element_getinfo獲取輸入參數,輸出長度可變
RESAMPLE_ENCODE_MODE需手動配置輸入/輸出參數,輸出長度固定(需設置out_len_bytes
重采樣類型(esp_resample_type_t
類型說明
RESAMPLE_AUTO自動判斷上/下采樣
RESAMPLE_UP強制上采樣(如44.1kHz→48kHz)
RESAMPLE_DOWN強制下采樣(如48kHz→16kHz)
復雜度控制(complexity
等級性能表現適用場景
1最快速度,最低精度低功耗實時處理
3平衡速度與精度通用場景(默認)
5最慢速度,最高精度高保真音頻處理

4. 聲道處理規則

轉換場景處理方式
單聲道→立體聲復制單聲道數據到雙聲道(可設置down_ch_idx指定源聲道)
立體聲→單聲道默認混合左右聲道,或通過down_ch_idx選擇左/右聲道(0:左, 1:右)

5. 數據結構與宏定義

類型/宏定義說明
RSP_FILTER_TASK_STACK默認任務棧大小(4KB)
RSP_FILTER_RINGBUFFER_SIZE環形緩沖區大小(默認2KB)
esp_rsp_prefer_type_t資源偏好:
- ESP_RSP_PREFER_CPU
- ESP_RSP_PREFER_MEM
/*** @brief 重采樣濾波器配置結構體。*        此結構體用于配置重采樣濾波器的參數。*/
struct rsp_filter_cfg_t {int src_rate;                     /**< 源 PCM 文件的采樣率(單位:Hz) */int src_ch;                       /**< 源 PCM 文道的通道數(單聲道=1,立體聲=2) */int dest_rate;                    /**< 目標 PCM 文件的采樣率(單位:Hz) */int dest_bits;                    /**< 目標 PCM 數據樣本的位寬。當前支持:16 位。 */int dest_ch;                      /**< 目標 PCM 文件的通道數(單聲道=1,立體聲=2) */int src_bits;                     /**< 源 PCM 數據樣本的位寬。支持的位寬:8 位、16 位、24 位、32 位。 */esp_resample_mode_t mode;        /**< 重采樣模式(編碼或解碼)。解碼模式具有恒定的輸入 PCM 長度;編碼模式具有恒定的輸出 PCM 長度。 */int max_indata_bytes;             /**< 輸入 PCM 的最大緩沖區大小(單位:字節) */int out_len_bytes;                /**< 輸出流數據的緩沖區長度。此參數必須在編碼模式下配置。 */esp_resample_type_t type;        /**< 重采樣類型(自動、升采樣、降采樣) */int complexity;                   /**< 指示重采樣的復雜度。在使用 FIR 濾波器時有效。范圍:[1, 5];1 表示最低復雜度(最低精度,最快速度);5 表示最高復雜度(最高精度,最慢速度)。小于 1 的值會被設置為 1,大于 5 的值會被設置為 5。 */int down_ch_idx;                  /**< 指示所選的通道(右或左)。僅當復雜度設置為 0 且輸入文件的通道從立體聲變為單聲道時有效。 */esp_rsp_prefer_type_t prefer_flag;/**< 選擇標志,用于選擇較低的 CPU 使用率或較低的 INRAM 使用率。請參閱 esp_resample.h 獲取詳情。 */int out_rb_size;                  /**< 輸出環形緩沖區大小 */int task_stack;                   /**< 任務棧大小 */int task_core;                    /**< 任務運行的核心 */int task_prio;                    /**< 任務優先級 */bool stack_in_ext;                /**< 嘗試在外部內存中分配棧的標志 */
};

6. 典型調用流程

// 1. 初始化配置(48kHz立體聲→16kHz單聲道)
rsp_filter_cfg_t cfg = DEFAULT_RESAMPLE_FILTER_CONFIG();
cfg.src_rate = 48000;
cfg.src_ch = 2;
cfg.dest_rate = 16000;
cfg.dest_ch = 1;
cfg.mode = RESAMPLE_ENCODE_MODE;
cfg.complexity = 3;  // 平衡模式// 2. 創建重采樣實例
audio_element_handle_t resampler = rsp_filter_init(&cfg);// 3. 動態修改輸入參數(切換為24bit輸入)
rsp_filter_change_src_info(resampler, 44100, 1, 24);  // 44.1kHz單聲道24bit

7. 約束與注意事項

  1. 位寬支持
    • 輸入:8/16/24/32bit
    • 輸出:僅16bit
  2. 采樣率限制:輸入/輸出采樣率需在ESP-ADF支持的范圍內(通常8kHz-48kHz)
  3. 實時性要求:高復雜度(complexity=5)可能增加處理延遲,需測試實際性能
  4. 內存占用:選擇ESP_RSP_PREFER_MEM可減少INRAM使用,但會增加CPU負載

8. 應用場景示例

場景推薦配置
語音通話降采樣dest_rate=8kHzcomplexity=1prefer_flag=ESP_RSP_PREFER_CPU
高保真音樂格式轉換complexity=5prefer_flag=ESP_RSP_PREFER_MEM
實時音頻流處理mode=RESAMPLE_DECODE_MODEtype=RESAMPLE_AUTO

四、Sonic

1. Sonic組件核心功能

  1. 三維音頻處理

    • 變速不變調:調整播放速度(speed
    • 變調不變速:調整音高(pitch
    • 插值算法:平衡處理速度與音質
  2. 參數調節范圍

    參數類型示例值說明
    speedfloat0.5(半速)~2.0(倍速)1.0為原始速度
    pitchfloat0.5(低八度)~2.0(高八度)1.0為原始音高
    interpolationenumLINEAR/FIR線性插值(快) vs FIR插值(準)
  3. 典型應用場景

    • 音頻書籍變速播放
    • 音樂音高修正
    • 實時語音速度調整
  4. 特性對比

    插值類型處理速度音質精度適用場景
    線性(Linear)?? 快中等實時處理/低功耗設備
    FIR? 慢后期制作/高保真需求

2. 調用示例

// 初始化
sonic_cfg_t cfg = DEFAULT_SONIC_CONFIG();
audio_element_handle_t sonic_processor = sonic_init(&cfg);// 設置為2倍速播放(保持原音高)
sonic_set_pitch_and_speed_info(sonic_processor, 1.0, 2.0);// 啟用高精度FIR插值
sonic_set_interpolation_type(sonic_processor, SONIC_INTERPOLATION_FIR);

3. 注意事項

  1. 速度/音高參數建議范圍:0.5~2.0,極端值可能導致失真
  2. FIR插值會增加20-30%的CPU負載
  3. 處理立體聲音頻時兩個聲道會同步調整

4. API

1. 核心配置與初始化

API/結構體功能說明關鍵參數/成員
sonic_init(sonic_cfg_t *)初始化Sonic音頻處理器sonic_info(采樣率/聲道數)、out_rb_size(輸出緩沖區大小)
sonic_cfg_t配置結構體- task_stack(默認4KB)
- task_prio(優先級5)
- stack_in_ext(外部內存)
DEFAULT_SONIC_CONFIG()生成默認配置宏預定義環形緩沖區(2KB)、任務核心(1)、插值模式(線性)

2. 參數動態設置

API功能描述參數范圍/說明
sonic_set_info()設置輸入流采樣率和聲道數rate(Hz)、ch(1/2)
sonic_set_pitch_and_speed_info()設置音高和速度比例因子pitch[0.2,4.0]
speed[0.1,8.0]
(0=保持原值)

3. 處理模式控制

配置項選項性能影響
插值算法
(resample_linear_interpolate)
1:線性插值?? 處理速度快,適合實時場景
0:FIR插值🎵 音質更優,CPU負載增加約30%

4. 結構體

/*** @brief 結構體用于存儲音頻文件的信息和Sonic處理所需的配置參數。*/
struct sonic_info_t {int samplerate; /**< 音頻文件的采樣率(單位:Hz) */int channel; /**< 音頻文件的通道數(單聲道=1,立體聲=2) */int resample_linear_interpolate; /**< 是否使用簡單的線性插值。1表示使用,0表示不使用 */float pitch; /**< 音頻文件的音高縮放因子。例如,0.3表示降低音高,1.3表示提高30%的音高 */float speed; /**< 音頻文件的速度縮放因子。例如,0.3表示降低70%的速度,1.3表示提高30%的速度 */
};/*** @brief Sonic配置結構體,用于配置Sonic處理音頻的參數。*/
struct sonic_cfg_t {struct sonic_info_t sonic_info; /**< Sonic處理所需的音頻信息 */int out_rb_size; /**< 輸出環形緩沖區的大小 */int task_stack; /**< 任務棧大小 */int task_core; /**< 任務運行的核心 */int task_prio; /**< 任務優先級 */bool stack_in_ext; /**< 是否嘗試在外部內存中分配棧 */
};

5. 典型調用流程

// 1. 初始化配置(44.1kHz立體聲)
sonic_cfg_t cfg = DEFAULT_SONIC_CONFIG();
cfg.sonic_info.samplerate = 44100;
cfg.sonic_info.channel = 2;
cfg.sonic_info.resample_linear_interpolate = 0; // 啟用FIR插值// 2. 創建處理器實例
audio_element_handle_t sonic = sonic_init(&cfg);// 3. 設置為1.5倍速播放并升調20%
sonic_set_pitch_and_speed_info(sonic, 1.2f, 1.5f);// 4. 動態修改采樣率(切換至16kHz單聲道)
sonic_set_info(sonic, 16000, 1);

6. 實踐

  1. 參數安全范圍

    • 音高(pitch):建議0.5~2.0(超出可能失真)
    • 速度(speed):建議0.5~4.0(極端值影響流暢性)
  2. 資源消耗

    配置組合CPU占用適用場景
    線性插值 + 中等變速實時語音處理
    FIR插值 + 高精度變調音樂后期制作
  3. 內存管理

    • 啟用stack_in_ext可減少內部RAM占用
    • 輸出緩沖區(out_rb_size)建議≥4KB處理高碼率音頻

7. 應用場景示例

45%30%20%5%Sonic組件使用場景分布語音變速(如播客)音樂變調(K歌應用)實時語音特效其他

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90753.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90753.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90753.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt(基本組件和基本窗口類)

一、基本組件1. Designer設計師為什么要上來先將這個東西呢&#xff0c;這個是QT外置的設計界面的工具&#xff0c;沒啥用&#xff0c;所以了解一下。我們用的多的是QT內置的界面設計&#xff0c;只需要我們雙擊我們創建的項目的.ui文件就可以進入這個界面&#xff0c;你對界面…

docker與k8s的容器數據卷

Docker容器數據卷 特性 docker鏡像由多個只讀層疊加而成&#xff0c;啟動容器時&#xff0c;Docker會加載只讀鏡像層并在鏡像棧頂部添加一個讀寫層。如果運行中的容器修改了現有的一個已經存在的文件&#xff0c;那么該文件將會從讀寫層下面的只讀層復制到讀寫層&#xff0c;該…

自然語言處理技術應用領域深度解析:從理論到實踐的全面探索

1. 引言:自然語言處理的技術革命與應用前景 自然語言處理(Natural Language Processing,NLP)作為人工智能領域的核心分支,正在以前所未有的速度改變著我們的數字化生活。從最初的規則基礎系統到如今基于深度學習的大語言模型,NLP技術經歷了從理論探索到實際應用的深刻變…

OpenGLRender開發記錄(二): 陰影(shadowMap,PCF,PCSS)

目錄已實現功能陰影shadowMapPCFPCSS實現shadowMapPCFPCSS陰影GitHub主頁&#xff1a;https://github.com/sdpyy1 OpenGLRender:https://github.com/sdpyy1/CppLearn/tree/main/OpenGL 已實現功能 除了上次實現IBL之外&#xff0c;項目目前新增了imGUI的渲染&#xff0c;更方便…

Linux:日志亂碼

1、Linux日志亂碼可能是XShell客戶端編碼沒設置為UTF-8引起的&#xff0c;按照以下步驟&#xff0c;設置終端格式&#xff1a;中文版&#xff1a;打開Xshell會話屬性&#xff08;文件→屬性→終端→編碼&#xff09;&#xff0c;選擇與服務器一致的編碼格式&#xff08;如UTF-8…

Rouge:面向摘要自動評估的召回導向型指標——原理、演進與應用全景

“以n-gram重疊量化文本生成質量&#xff0c;為摘要評估提供可計算標尺” Rouge&#xff08;Recall-Oriented Understudy for Gisting Evaluation&#xff09; 是由 南加州大學信息科學研究所&#xff08;ISI&#xff09;的Chin-Yew Lin 于2004年提出的自動文本摘要評估指標&am…

[STM32][HAL]stm32wbxx 超聲波測距模塊實現(HY-SRF05)

前言 在電子技術應用中,距離測量是一個常見且重要的需求。超聲波模塊因其測量精度較高、成本較低、易于使用等優點,被廣泛應用于機器人避障、液位檢測、智能停車系統等領域。該文主要講解以stm32wb芯片為主控,用HAL庫來對HY-SRF05超聲波模塊進行代碼編寫,實現基本的驅動和測…

MySQL 性能調優實戰指南:從診斷到優化全解析

引言在日常的數據庫運維工作中&#xff0c;我們經常需要對 MySQL 數據庫進行診斷和性能分析。本文將介紹一套全面的 MySQL 診斷腳本&#xff0c;適用于 MySQL 8.0&#xff08;兼容 8.0.15 及以上版本&#xff09;&#xff0c;涵蓋事務鎖分析、性能瓶頸定位、配置檢查、連接狀態…

8. 狀態模式

目錄一、應用背景二、狀態模式2.1 解決的問題2.2 角色2.3 實現步驟三、通用設計類圖四、實現4.1 設計類圖4.2 狀態轉換圖4.3 代碼實現一、應用背景 某對象發生變化時&#xff0c;其所能做的操作也隨之變化。應用程序的可維護性和重用性差代碼的邏輯較復雜 二、狀態模式 2.1 …

php語法--foreach和in_array的使用

文章目錄foreach基礎語法&#xff1a;案例1&#xff1a;引用傳遞模式&#xff1a;嵌套數組處理&#xff1a;避免在循環中計算數組長度&#xff1a;使用引用減少內存拷貝&#xff1a;打印數組in_array基礎使用嚴格使用foreach 基礎語法&#xff1a; foreach ($iterable as $va…

ES6模塊詳解:核心語法與最佳實踐

以下是 EMAScript 6&#xff08;ES6&#xff09;模塊規范的核心要點及細節解析&#xff1a; &#x1f4e6; 一、核心語法導出&#xff08;export&#xff09; 命名導出&#xff1a;支持導出多個具名成員。export const a 1; export function b() { /* ... */ } // 或集中導出 …

Python day25

浙大疏錦行 Python day25. 內容&#xff1a; 異常處理&#xff0c;在日常的編碼工作過程中&#xff0c;為了避免由于各種bug導致的異常情況&#xff0c;我們需要引入異常處理機制&#xff0c;它的工作場景是當程序運行出現意外時&#xff0c;可以根據編碼規則處理響應的錯誤。…

mac llama_index agent算術式子計算示例

本文通過簡單數學計算&#xff0c;示例llama_index使用agent解決復雜任務過程。 假設mac本地llama_index環境已安裝&#xff0c;過程參考 mac測試ollama llamaindex-CSDN博客 測試mac筆記本內存8G&#xff0c;所以使用較小LLM完成示例。 ollama pull qwen3:1.7b qwen3:1.7b能…

uni-app小程序云效持續集成

創建項目 必須是 cli 命令行創建的 uni-app 小程序項目參考uni-app官方構建命令&#xff1a; npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project生成小程序代碼上傳密鑰 管理-開發設置-小程序代碼上傳生成的文件放在根目錄即可 安裝持續集成插件 pnpm install uni-mi…

uniapp+高德地圖實現打卡簽到、打卡日歷

一、注冊高德地圖。應用管理創建應用&#xff0c;分別添加Andriod平臺、Web服務、Web端、微信小程序四種類型的key。二、考勤規則打卡地點選擇位置代碼&#xff1a;<script setup lang"ts"> import { onMounted, onUnmounted, reactive, ref, watchEffect } fr…

CentOS 7.9 + GCC9 離線安裝 IWYU(Include What You Use)

本教程適用于 離線環境下在 CentOS 7.9 系統中使用 GCC 9 離線安裝 IWYU 的完整步驟&#xff0c;涵蓋 Clang 11.1.0 編譯、IWYU 構建以及頭文件自動優化流程。&#x1f4e5; 一、準備安裝包請提前下載以下源碼包&#xff08;可通過在線機器提前下載&#xff0c;再傳輸到離線環境…

基于Dapr Sidecar的微服務通信框架設計與性能優化實踐

基于Dapr Sidecar的微服務通信框架設計與性能優化實踐 一、技術背景與應用場景 隨著微服務架構的廣泛應用&#xff0c;分布式系統中服務間通信、可觀察性、可靠性等問題日益凸顯。Dapr&#xff08;Distributed Application Runtime&#xff09;作為一個開源的微服務運行時&…

Claude Code 超詳細完整指南(2025最新版)

&#x1f680; 終端AI編程助手 | 高頻使用點 生態工具 完整命令參考 最新MCP配置 &#x1f4cb; 目錄 &#x1f3af; 快速開始&#xff08;5分鐘上手&#xff09;&#x1f4e6; 詳細安裝指南 系統要求Windows安裝&#xff08;WSL方案&#xff09;macOS安裝Linux安裝安裝驗…

【lucene】SegmentReader初始化過程概述

readers[i] new SegmentReader(sis.info(i), sis.getIndexCreatedVersionMajor(), IOContext.READ); 這個方法已經把所有的文件都讀完了么&#xff1f;沒有“讀完”&#xff0c;但已經**全部“打開”**了。| 動作 | 是否發生 | |---|---| | **打開文件句柄 / mmap** | ? 立即完…

通俗理解主機的BIOS和UEFI啟動方式

“對于 22.04 版本&#xff0c;這些操作說明應適用于通過 BIOS 或 UEFI 兩種方式創建和運行啟動盤。”我們來詳細解釋一下這句話的含義&#xff0c;這句話的核心意思是&#xff1a;你按照這個教程制作出來的 Ubuntu U 盤&#xff0c;將擁有極佳的兼容性&#xff0c;無論是在老電…