前言:
大家好,我是飛一樣的成長,今天這篇文章主要想分享音頻3A的內容。在之前有網友找我怎么移植原生的webrtc到rk3568/rk3588上,當時我自己也沒有移植過,后面折騰了一個禮拜才搞定,當時遇到的最大問題,主要是編譯器g++對于webrtc最新版本是不兼容的,導致始終無法編譯過,后面切換了低一點的版本才搞定:

但是這里面的內容比較多,其實也是可以專門關注webrtc audio模塊的,主要就是關注音頻3A算法:
-
AEC
-
ANC
-
AGC
其實我自己也關注了很久了的音頻3A這塊,比如有rk自帶的3A模塊,還有一些開源的項目:
-
rnnoise

但是效果最好的還是webrtc的效果最好,而且也最成熟,如果從商業開發的角度來看的話。
而且為了簡化內容,webrtc 有專門抽取出來的webrtc audio開源模塊WebRTC AudioProcessing,所以我的精力就想專門研究里面的3A算法,要搞就搞最好的,不搞雜毛:


同時結合我自己的工作經歷,這塊的內容還是非常的重要,搞音頻最難的地方,就是這塊。當然還有底層的音頻,也會涉及到算法。在我們做嵌入式開發,音頻的指標,也是有嚴格的標準的,需要用專業的儀器測試,比如說信噪比指標。
rk3568移植WebRTC AudioProcessing:
其實這里沒有平臺的限制,只是我這里以我手上有的板子來進行移植,其他平臺都可以按照我下面的方法進行移植即可。
移植步驟:
-
1、 meson和ninja安裝:
sudo apt update
sudo apt install meson ninja-build python3-pip
pip3 install --user meson
-
2、在webrt audio processing源碼下創建一個文本,同時里面填寫的內容如下:

[binaries]
c =?'/home/txp/rk3568/rk3568_sdk/buildroot/output/rockchip_atk_dlrk3568/host/bin/aarch64-buildroot-linux-gnu-gcc'
cpp =?'/home/txp/rk3568/rk3568_sdk/buildroot/output/rockchip_atk_dlrk3568/host/bin/aarch64-buildroot-linux-gnu-g++'
ar =?'/home/txp/rk3568/rk3568_sdk/buildroot/output/rockchip_atk_dlrk3568/host/bin/aarch64-buildroot-linux-gnu-ar'
strip =?'/home/txp/rk3568/rk3568_sdk/buildroot/output/rockchip_atk_dlrk3568/host/bin/aarch64-buildroot-linux-gnu-strip'
pkgconfig =?'/home/txp/rk3568/rk3568_sdk/buildroot/output/rockchip_atk_dlrk3568/host/bin/pkg-config'
cmake =?'cmake'[properties]
needs_exe_wrapper =?true# 如果在構建中需要運行可執行文件(通常交叉時不能執行)
exe_wrapper =?'qemu-arm-static'# 如果有 QEMU 支持運行目標可執行文件來生成一些配置[host_machine]
system =?'linux'
cpu_family =?'arm'
cpu =?'aarch64'
endian =?'little'
-
3、開始構建和編譯:
meson setup build_arm --cross-file cross_arm_linux.txt --buildtype=release

cd?build_arm
ninja


-
最后,安裝編譯出來的庫:
ninja install

查看是否成功了:

可以看到成功了。
最后就開啟2025年正式研究音頻3A了。
后面的內容,會測試一下效果,先用alsa或者tinyalsa采集音頻,然后看一下經過webrtc audio processing處理效果以及里面的具體實現學習。