Vollständige technische Ausgabe der vier Kapitel aus der chinesischen Quelle RK-KF-YF-793 V1.0.0 vom : Kompilierung, Aktivierung, Parameter und Fehlerbehebung. Die Quelltabelle nennt alle Chips und Kernelversionen; das ist der historische Geltungsbereich, keine aktuelle Kompatibilitätszusage. Es existiert nur eine chinesische Quelle, keine englischen Originalbilder. Monospace-Audiopfaddiagramme bleiben editierbarer Code und werden durch Originalausschnitte des chinesischen PDF ergänzt; keine behauptete Bildlokalisierung. Rechts-, Zielgruppen-, Revisions- und doppelte Inhaltsangaben entfallen, technische Parameter nicht. Keine Befehle, Aufnahmen oder Hardwaretests wurden ausgeführt.
Redaktionelle Hinweise: Seitengetrennte Codeblöcke/Tabellen wurden verbunden, UUID-Umbrüche und das letzte Zeichen von Überschrift 4.1 repariert. Leere Beschreibungen für attenuate_time und fünf DOA-Parameter bleiben wie im Original leer. supEnergy2 nennt „Punkt 1“; fRk1/fRk2 nennen eine unwirksame Expansionssteigung; Schreibweisen HardThreshold/PrioriRatio bleiben ohne Vermutung über die Algorithmik erhalten. Codekommentare, UUIDs, Parameternamen, Logs und ursprüngliche Auslassungen bleiben unverändert. Sicherheit: adb root/remount und setenforce 0 nur auf autorisierten Debuggeräten; letzteres deaktiviert SELinux-Erzwingung, daher nach Tests die Richtlinie wiederherstellen. Audiodumps können private Aufnahmen enthalten: Zugriff beschränken und nicht mehr benötigte Dateien löschen.
1. Kompilierung
1.1 BoardConfig.mk des Projekts finden
Der Pfad von BoardConfig.mk hängt vom Chip und dem mit lunch gewählten product ab. Beispiel: Chip rk3588, product rk3588_u.
# echo $TARGET_PRODUCT
# rk3588_u
Dann liegt BoardConfig.mk unter device/rockchip/rk3588/rk3588_u/BoardConfig.mk.
1.2 Build-Schalter hinzufügen
Den folgenden Schalter in BoardConfig.mk eintragen, damit hardware/rockchip/audio/preprocess kompiliert wird.
BOARD_USE_AUDIO_PREPROCESS := true
2. Aktivierung
2.1 Effekte deklarieren
In frameworks/av/media/libeffects/data/audio_effects.xml die folgende Effektsammlung deklarieren.
<libraries>
<!-- 保留已有内容, 添加下面的配置项 -->
<library name="rkpreprocess" path="librkpreprocess.so"/>
</libraries>
<effects>
<!-- 保留已有内容, 添加下面的配置项 -->
<effect name="preproc_aec_normal" library="rkpreprocess" uuid="bb392ec0-8d4d-11e0-a896-0002a5d5c51b"/>
<effect name="preproc_aec_delay" library="rkpreprocess" uuid="55fa4ede-4adb-45fe-80b9-0002a5d5c51b"/>
<effect name="preproc_aec_array_reset" library="rkpreprocess"
uuid="49cd17f2-819f-4acd-9541-0002a5d5c51b"/>
<effect name="preproc_bf_fast_aec" library="rkpreprocess" uuid="b5bfc822-0b26-4230-adcb-0002a5d5c51b"/>
<effect name="preproc_bf_wakeup" library="rkpreprocess" uuid="9ed2a703-5336-4a49-9bbf-0002a5d5c51b"/>
<effect name="preproc_bf_dereverb" library="rkpreprocess" uuid="bd266323-f95b-4c4f-ab34-0002a5d5c51b"/>
<effect name="preproc_bf_nlp" library="rkpreprocess" uuid="53e4a6d1-4e6b-4421-afbc-0002a5d5c51b"/>
<effect name="preproc_bf_aes" library="rkpreprocess" uuid="3ad36ef7-2f2a-42cc-afa3-0002a5d5c51b"/>
<effect name="preproc_bf_agc" library="rkpreprocess" uuid="aa8130e0-66fc-11e0-bad0-0002a5d5c51b"/>
<effect name="preproc_bf_anr" library="rkpreprocess" uuid="20b2732e-28e9-4b6b-968a-0002a5d5c51b"/>
<effect name="preproc_bf_gsc" library="rkpreprocess" uuid="19d4a390-7e23-488b-8568-0002a5d5c51b"/>
<effect name="preproc_bf_gsc_method" library="rkpreprocess" uuid="79dbccc7-d690-4ed3-be87-0002a5d5c51b"/>
<effect name="preproc_bf_fix" library="rkpreprocess" uuid="8e8fe0d9-e335-4a75-847a-0002a5d5c51b"/>
<effect name="preproc_bf_dtd" library="rkpreprocess" uuid="97ef38d0-9346-48d3-aeed-0002a5d5c51b"/>
<effect name="preproc_bf_cng" library="rkpreprocess" uuid="c0c12199-fccb-45a0-a912-0002a5d5c51b"/>
<effect name="preproc_bf_eq" library="rkpreprocess" uuid="5f4428b2-6827-4a06-842f-0002a5d5c51b"/>
<effect name="preproc_bf_chn_select" library="rkpreprocess" uuid="874978b4-1b82-470f-be80-0002a5d5c51b"/>
<effect name="preproc_bf_howling" library="rkpreprocess" uuid="22075603-4d9d-40a6-bfac-0002a5d5c51b"/>
<effect name="preproc_bf_doa" library="rkpreprocess" uuid="50404545-a180-40ad-a8f4-0002a5d5c51b"/>
<effect name="preproc_bf_wind" library="rkpreprocess" uuid="2b8fea18-547e-4af7-85c9-0002a5d5c51b"/>
<effect name="preproc_bf_ainr" library="rkpreprocess" uuid="a2913959-f123-43bc-ad9c-0002a5d5c51b"/>
<effect name="preproc_rx_anr" library="rkpreprocess" uuid="9b6b4c6f-9fba-453b-9f33-0002a5d5c51b"/>
<effect name="preproc_rx_howling" library="rkpreprocess" uuid="f55efb11-dc37-4844-a160-0002a5d5c51b"/>
<effect name="preproc_ref_hw" library="rkpreprocess" uuid="b95396ba-60ed-424d-8ec7-0002a5d5c51b"/>
<effect name="preproc_ref_sw_dlp" library="rkpreprocess" uuid="7583028a-e283-4cb5-9c0f-0002a5d5c51b"/>
<effect name="preproc_ref_sw_alp_playback" library="rkpreprocess"
uuid="d3cb7c9b-79a1-4a84-b26c-0002a5d5c51b"/>
<effect name="preproc_ref_sw_alp_capture" library="rkpreprocess"
uuid="4f7f9f58-122b-4dc6-831d-0002a5d5c51b"/>
</effects>
2.2 Effekte aktivieren
Einzelheiten stehen in Rockchip_Developer_Guide_Microphone_Array_Tuning.pdf. Vor der Aktivierung sind zwei Änderungen erforderlich:
1) Die Aufnahmerahmenlänge in tinyalsa_hal auf 16 ms setzen und abrunden.
period_size = (int)(rate * 0.016 / 4) * 4
Bei 48000 Hz gilt period_size = (int)(48000 * 0.016 / 4) * 4 = 768. Bei 44100 Hz gilt period_size = (int)(44100 * 0.016 / 4) * 4 = 704. Anschließend die entsprechende pcm config in hardware/rockchip/audio/tinyalsa_hal/audio_hw.c ändern.
static struct pcm_config pcm_config_in = {
// ...
.rate = 48000,
.period_size = 768,
};
2) Die Anzahl der MIC-Kanäle ändern.
Nach Prüfung der MIC-Kanalzahl folgende Konfiguration anpassen; Beispiel für zwei MIC-Kanäle in hardware/rockchip/audio/tinyalsa_hal/audio_hw.c.
#define PCM_CAPTURE_CHANNELS 2
Ein einzelnes MIC wird derzeit als zwei Kanäle behandelt.
2.2.1 AEC
effect |
Beschreibung |
|---|---|
preproc_aec_normal |
AEC-Modul |
preproc_aec_delay |
AEC-Untermodul zur Verzögerungsschätzung |
preproc_aec_array_reset |
AEC-Eingangsaudiokanäle umordnen |
preproc_ref_hw |
Hardware-Rückführsignal |
preproc_ref_sw_dlp |
Software-Rückführung über DLP |
preproc_ref_sw_alp_playback |
Software-Rückführung: Aloop-Daten puffern |
preproc_ref_sw_alp_capture |
Software-Rückführung: Aloop-Daten erfassen |
AEC benötigt ein rückgeführtes Referenzsignal zur Echounterdrückung. Daher entsprechend dem tatsächlichen Audiopfad bzw. der Topologie konfigurieren.
1) Hardware-Rückführung. In den Diagrammen bezeichnet [L1][R1]… Referenzdaten, die vor dem SPK zu einer Audioschnittstelle (CPU DAI1) zurückgeführt werden; [L2][R2]… sind MIC-Daten.
HAL | Kernel | Hardware
| |
| +----------+ |
+----------------+ | [L1][R1]... | CPU DAI0 | | +-----+
| Output Stream *------------------------>* *----\------------>* SPK |
+----------------+ | +----------+ | \ +-----+
| | |(Wired)
| +----------+ | |
+----------------+ | [L2][R2][L1][R1]... | CPU DAI1 | | v [L2][R2]...+-----+
| Input Stream *<========================* *<====+<-----------* MIC |
+----------------+ | +----------+ | +-----+
| |

HAL | Kernel | Hardware
| |
| +----------+ |
+----------------+ | [L1][R1]... | CPU DAI0 | | +-----+
| Output Stream *------------------------>* *----\------------>* SPK |
+----------------+ | +----------+ | \ +-----+
| | |
| +------------+ | |(Wired)
| | Combo DAI | | |
| |+----------+| | |
| || CPU DAI1 || | /
| || *<---/
+----------------+ | [L2][R2][L1][R1]... |+----------+| |
| Input Stream *<=======================* | |
+----------------+ | |+----------+| |
| || CPU DAI2 || | [L2][R2]...+-----+
| || *<-----------------* MIC |
| |+----------+| | +-----+
| +------------+ |


Die Referenzkanalzahl ändern; Beispiel: zwei Referenzkanäle in hardware/rockchip/audio/tinyalsa_hal/audio_hw.c.
#define PCM_REFERENCE_CHANNELS 2
In frameworks/av/media/libeffects/data/audio_effects.xml die entsprechenden Streams an folgende Effekte binden.
<!-- 如果没有声明 preprocess, 则直接添加下面的配置, 并忽略下面的注释 -->
<preprocess>
<stream type="mic">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_aec_normal"/>
<apply effect="preproc_ref_hw"/>
</stream>
<stream type="voice_communication">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_aec_normal"/>
<apply effect="preproc_ref_hw"/>
</stream>
</preprocess>
2) Software-Rückführung über DLP gilt, wenn Wiedergabe und Aufnahme denselben cpu dai verwenden. [L1][R1]… sind in DLP gepufferte Referenzdaten, [L2][R2]… MIC-Daten.
HAL | Kernel | Hardware
| |
| +----------+ |
+----------------+ | [L1][R1]... | CPU DAI0 | |
| Output Stream *-------------------------*---\ | |
+----------------+ | | \ | |
| | |(DLP)| |
+----------------+ | [L2][R2][L1][R1]... | v | | [L2][R2]... +-----+
| Input Stream *<========================*====+<----*------------------* MIC |
+----------------+ | | | | +-----+
| +----------+ |

Die Kernelkonfiguration zum Kompilieren von DLP ändern.
CONFIG_SND_SOC_ROCKCHIP_DLP_PCM
In der dts-Konfiguration DLP am betreffenden cpu dai aktivieren.
&i2s {
rockchip,digital-loopback;
};
Mögliche cpu dai sind i2s0_8ch, i2s1_8ch, i2s2_2ch, i2s3_2ch, sai0, sai1 usw. Die zugehörige Route in tinyalsa_hal ergänzen. Soundkartennamen verweisen auf unterschiedliche Konfigurationsdateien; sound_card_config_list prüfen. Ohne Treffer wird default_config.h verwendet. Beispiel: zwei MIC- plus zwei Referenzkanäle.
diff --git a/tinyalsa_hal/codec_config/default_config.h
b/tinyalsa_hal/codec_config/default_config.h
index a554492..114e3d2 100755
--- a/tinyalsa_hal/codec_config/default_config.h
+++ b/tinyalsa_hal/codec_config/default_config.h
@@ -198,6 +202,10 @@ const struct config_control
default_main_mic_capture_controls[] = {
.ctl_name = "Capture MIC Path",
.str_val = "Main Mic",
},
+ {
+ .ctl_name = "Software Digital Loopback Mode",
+ .str_val = "4CH: 2 Mics + 2 Loopbacks",
+ },
};
const struct config_control default_hands_free_mic_capture_controls[] = {
Die verfügbaren Optionen folgen; passend zur Anzahl der MIC- und Referenzkanäle konfigurieren.
static const char *const dlp_text[] = {
"Disabled",
"2CH: 1 Loopback + 1 Mic",
"2CH: 1 Mic + 1 Loopback",
"2CH: 1 Mic + 1 Loopback-mixed",
"2CH: 2 Loopbacks",
"4CH: 2 Mics + 2 Loopbacks",
"4CH: 2 Mics + 1 Loopback-mixed",
"4CH: 4 Loopbacks",
"6CH: 4 Mics + 2 Loopbacks",
"6CH: 4 Mics + 1 Loopback-mixed",
"6CH: 6 Loopbacks",
"8CH: 6 Mics + 2 Loopbacks",
"8CH: 6 Mics + 1 Loopback-mixed",
"8CH: 8 Loopbacks",
"10CH: 8 Mics + 2 Loopbacks",
"10CH: 8 Mics + 1 Loopback-mixed",
"16CH: 8 Mics + 8 Loopbacks",
};
Die Referenzkanalzahl ändern; Beispiel: zwei Referenzkanäle in hardware/rockchip/audio/tinyalsa_hal/audio_hw.c.
#define PCM_REFERENCE_CHANNELS 2
In frameworks/av/media/libeffects/data/audio_effects.xml die entsprechenden Streams an folgende Effekte binden.
<!-- 如果没有声明 preprocess, 则直接添加下面的配置, 并忽略下面的注释 -->
<preprocess>
<stream type="mic">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_aec_normal"/>
<apply effect="preproc_ref_sw_dlp"/>
</stream>
<stream type="voice_communication">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_aec_normal"/>
<apply effect="preproc_ref_sw_dlp"/>
</stream>
</preprocess>
3) Software-Rückführung über Aloop gilt bei unterschiedlichen cpu dai für Wiedergabe und Aufnahme. [L1][R1]… sind in Aloop gepufferte Referenzdaten; [L2][R2]… MIC-Daten. MIC- und Referenzdaten werden in Step#4 zusammengeführt.
HAL | Kernel | Hardware
| |
<Far End In> | +----------+ |
+------*---------+ | [L1][R1]... | CPU DAI0 | | +-----+
| Output Stream *------------------------>* *----------------->* SPK |
+------*---------+ | +----------+ | +-----+
| Step#1 | |
|[L1][R1]... | |
v | |
+------*--------+ | +----------+ |
| | | | Aloop | |
|(optional pre *------------------------->* Playback | |
| resampler) | | | PCM | |
+---------------+ | +----------+ |
| |#cable0 |
| | |
| v |
+---------------+ | +-*--------+ |
| | | Step#2 | Aloop | |
|(optional post *<-------------------------* Capture | |
| resampler) | | | PCM | |
+-----*-*-------+ | +----------+ |
Step#4| ^ Step#3 | |
<AEC> | |[L2][R2]...| |
v | | +----------+ | <Near End>
+-----*-*--------+ | Step#2' | CPU DAI1 | | [L2][R2]... +-----+
| Input Stream *<------------------------* *<-----------------* MIC |
+-----*----------+ | +----------+ | +-----+
<Far End Out> | |

Die Kernelkonfiguration zum Kompilieren von Aloop ändern.
CONFIG_SND_DRIVERS
CONFIG_SND_ALOOP
Referenzkanalzahl: Keine Konfiguration nötig, da Aloop standardmäßig zwei Kanäle verwendet. Datei: hardware/rockchip/audio/tinyalsa_hal/audio_hw.c.
#define PCM_REFERENCE_CHANNELS 0
In frameworks/av/media/libeffects/data/audio_effects.xml die entsprechenden Streams an folgende Effekte binden.
<!-- 如果没有声明 preprocess, 则直接添加下面的配置, 并忽略下面的注释 -->
<preprocess>
<stream type="mic">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_aec_normal"/>
<apply effect="preproc_ref_sw_alp_capture"/>
</stream>
<stream type="voice_communication">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_aec_normal"/>
<apply effect="preproc_ref_sw_alp_capture"/>
</stream>
</preprocess>
<!-- 如果没有声明 postprocess, 则直接添加下面的配置, 并忽略下面的注释 -->
<postprocess>
<stream type="voice_call">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_ref_sw_alp_playback"/>
</stream>
</postprocess>
2.2.2 BF
effect |
Beschreibung |
|---|---|
preproc_bf_fast_aec |
Lineare BF-Restechounterdrückung für den Aufweckpfad |
preproc_bf_wakeup |
BF-Aufweckmodul |
preproc_bf_dereverb |
BF-Enthallungsmodul |
preproc_bf_nlp |
Nichtlineare BF-Restechounterdrückung im Gesprächspfad (veraltet) |
preproc_bf_aes |
Nichtlineare BF-Restechounterdrückung |
preproc_bf_agc |
Automatische BF-Verstärkungsregelung |
preproc_bf_anr |
BF-Rauschunterdrückung |
preproc_bf_gsc |
BF-Beamforming-Nachfilter zur weiteren Rauschunterdrückung; je nach tatsächlichem Ergebnis aktivieren |
preproc_bf_gsc_method |
BF: Deaktiviert verwendet GSC LMS, aktiviert RLS; RLS benötigt mehr Rechenleistung als LMS |
preproc_bf_fix |
BF mit fester Strahlrichtung |
preproc_bf_dtd |
BF-Erkennung von Einzel-/Doppelsprechen |
preproc_bf_cng |
BF-Komfortrauschmodul |
preproc_bf_eq |
BF-EQ-Anpassung |
preproc_bf_chn_select |
BF für kundenspezifische MIC-Erweiterungen |
preproc_bf_howling |
BF-Rückkopplungsunterdrückung; je nach Anwendung aktivieren |
preproc_bf_doa |
BF-Schallquellenlokalisierung schätzt die Richtung; nach Bedarf aktivieren |
preproc_bf_wind |
BF-Windgeräuschunterdrückung; nach Bedarf aktivieren |
preproc_bf_ainr |
KI-basierte BF-Rauschunterdrückung; aktiviert schaltet sie ANR zwangsweise aus |
Vor preproc_bf_fast_aec und preproc_bf_aes zuerst AEC konfigurieren. In frameworks/av/media/libeffects/data/audio_effects.xml die Streams an folgende Effekte binden.
1) Empfohlene BF-Effekte zum Aufwecken:
<!-- 如果没有声明 preprocess, 则直接添加下面的配置, 并忽略下面的注释 -->
<preprocess>
<stream type="mic">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_bf_wakeup"/>
<apply effect="preproc_bf_fast_aec"/>
<apply effect="preproc_bf_dtd"/>
<apply effect="preproc_bf_agc"/>
</stream>
<stream type="voice_communication">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_bf_wakeup"/>
<apply effect="preproc_bf_fast_aec"/>
<apply effect="preproc_bf_dtd"/>
<apply effect="preproc_bf_agc"/>
</stream>
</preprocess>
2) Empfohlene BF-Effekte für Sprachgespräche:
<!-- 如果没有声明 preprocess, 则直接添加下面的配置, 并忽略下面的注释 -->
<preprocess>
<stream type="mic">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_bf_fast_aec"/>
<apply effect="preproc_bf_dtd"/>
<apply effect="preproc_bf_aes"/>
<apply effect="preproc_bf_anr"/>
<apply effect="preproc_bf_agc"/>
<apply effect="preproc_bf_dereverb"/>
</stream>
<stream type="voice_communication">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_bf_fast_aec"/>
<apply effect="preproc_bf_dtd"/>
<apply effect="preproc_bf_aes"/>
<apply effect="preproc_bf_anr"/>
<apply effect="preproc_bf_agc"/>
<apply effect="preproc_bf_dereverb"/>
</stream>
</preprocess>
3) Weitere Effekte nach Bedarf binden.
2.2.3 RX
effect |
Beschreibung |
|---|---|
preproc_rx_anr |
Rauschunterdrückung; je nach Anwendung aktivieren |
preproc_rx_howling |
Rückkopplungsunterdrückung; je nach Anwendung aktivieren |
In frameworks/av/media/libeffects/data/audio_effects.xml die Streams an die nachfolgend benötigten Effekte binden.
<!-- 如果没有声明 preprocess, 则直接添加下面的配置, 并忽略下面的注释 -->
<preprocess>
<stream type="mic">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_rx_anr"/>
<apply effect="preproc_rx_howling"/>
</stream>
<stream type="voice_communication">
<!-- 保留已有内容, 添加下面的配置项 -->
<apply effect="preproc_rx_anr"/>
<apply effect="preproc_rx_howling"/>
</stream>
</preprocess>
2.3 Überprüfung
1) Die Registrierung bei AudioFlinger mit dumpsys media.audio_flinger prüfen.
# dumpsys media.audio_flinger
[...]
Libraries loaded:
[...]
Library rkpreprocess
path: /vendor/lib/soundfx/librkpreprocess.so
Aloop Capture / Rockchip Electronics Co. Ltd.
UUID: 4f7f9f58-122b-4dc6-831d-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
Aloop Playback / Rockchip Electronics Co. Ltd.
UUID: d3cb7c9b-79a1-4a84-b26c-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820204
Digital Loopback / Rockchip Electronics Co. Ltd.
UUID: 7583028a-e283-4cb5-9c0f-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
HW Loopback / Rockchip Electronics Co. Ltd.
UUID: b95396ba-60ed-424d-8ec7-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
RX HOWLING / Rockchip Electronics Co. Ltd.
UUID: f55efb11-dc37-4844-a160-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
RX ANR / Rockchip Electronics Co. Ltd.
UUID: 9b6b4c6f-9fba-453b-9f33-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF AINR / Rockchip Electronics Co. Ltd.
UUID: a2913959-f123-43bc-ad9c-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF WIND / Rockchip Electronics Co. Ltd.
UUID: 2b8fea18-547e-4af7-85c9-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF DOA / Rockchip Electronics Co. Ltd.
UUID: 50404545-a180-40ad-a8f4-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF HOWLING / Rockchip Electronics Co. Ltd.
UUID: 22075603-4d9d-40a6-bfac-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF CHN Select / Rockchip Electronics Co. Ltd.
UUID: 874978b4-1b82-470f-be80-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF EQ / Rockchip Electronics Co. Ltd.
UUID: 5f4428b2-6827-4a06-842f-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF CNG / Rockchip Electronics Co. Ltd.
UUID: c0c12199-fccb-45a0-a912-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF DTD / Rockchip Electronics Co. Ltd.
UUID: 97ef38d0-9346-48d3-aeed-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF FIX / Rockchip Electronics Co. Ltd.
UUID: 8e8fe0d9-e335-4a75-847a-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF GSC Method / Rockchip Electronics Co. Ltd.
UUID: 79dbccc7-d690-4ed3-be87-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF GSC / Rockchip Electronics Co. Ltd.
UUID: 19d4a390-7e23-488b-8568-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF ANR / Rockchip Electronics Co. Ltd.
UUID: 20b2732e-28e9-4b6b-968a-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF AGC / Rockchip Electronics Co. Ltd.
UUID: aa8130e0-66fc-11e0-bad0-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF AES / Rockchip Electronics Co. Ltd.
UUID: 3ad36ef7-2f2a-42cc-afa3-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF NLP / Rockchip Electronics Co. Ltd.
UUID: 53e4a6d1-4e6b-4421-afbc-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF De-Reverberation / Rockchip Electronics Co. Ltd.
UUID: bd266323-f95b-4c4f-ab34-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF Wakeup / Rockchip Electronics Co. Ltd.
UUID: 9ed2a703-5336-4a49-9bbf-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
BF Fast AEC / Rockchip Electronics Co. Ltd.
UUID: b5bfc822-0b26-4230-adcb-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
AEC Array Reset / Rockchip Electronics Co. Ltd.
UUID: 49cd17f2-819f-4acd-9541-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
AEC Delay / Rockchip Electronics Co. Ltd.
UUID: 55fa4ede-4adb-45fe-80b9-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
AEC Normal / Rockchip Electronics Co. Ltd.
UUID: bb392ec0-8d4d-11e0-a896-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820203
[...]
2) Die Bindung an den richtigen Stream prüfen. Bei Aufnahme oder Sprachgespräch dumpsys media.audio_flinger auswerten. Beispiel: Sprachgespräch mit Aloop-Software-Referenz.
<preprocess>
<stream type="voice_communication">
<apply effect="preproc_aec_normal"/>
<apply effect="preproc_bf_fast_aec"/>
<apply effect="preproc_bf_aes"/>
<apply effect="preproc_bf_anr"/>
<apply effect="preproc_bf_dereverb"/>
<apply effect="preproc_rx_anr"/>
<apply effect="preproc_ref_sw_alp_capture"/>
</stream>
</preprocess>
<postprocess>
<stream type="voice_call">
<apply effect="preproc_ref_sw_alp_playback"/>
</stream>
</postprocess>
# dumpsys media.audio_flinger
[...]
Output thread 0xb40000784395ba60, name AudioOut_D, tid 642, type 0 (MIXER):
I/O handle: 13
Standby: no
[...]
1 Effect Chains
1 effects for session 249
In buffer Out buffer Active tracks:
0x78439e0000 0x7843d34000 -> 0xb400007730317020 1
Effect ID 75:
[...]
- UUID: d3cb7c9b-79a1-4a84-b26c-0002a5d5c51b
[...]
- name: Aloop Playback
[...]
[...]
[...]
Input thread 0xb40000784388dc60, name AudioIn_2E, tid 6501, type 3 (RECORD):
I/O handle: 30
Standby: no
[...]
1 Effect Chains
7 effects for session 257
In buffer Out buffer Active tracks:
nullptr nullptr 0
Effect ID 139:
[...]
- UUID: bb392ec0-8d4d-11e0-a896-0002a5d5c51b
[...]
- name: AEC Normal
[...]
Effect ID 147:
[...]
- UUID: b5bfc822-0b26-4230-adcb-0002a5d5c51b
[...]
- name: BF Fast AEC
[...]
Effect ID 155:
[...]
- UUID: 3ad36ef7-2f2a-42cc-afa3-0002a5d5c51b
[...]
- name: BF AES
[...]
Effect ID 163:
[...]
- UUID: 20b2732e-28e9-4b6b-968a-0002a5d5c51b
[...]
- name: BF ANR
[...]
Effect ID 171:
[...]
- UUID: bd266323-f95b-4c4f-ab34-0002a5d5c51b
[...]
- name: BF De-Reverberation
[...]
Effect ID 179:
[...]
- UUID: 9b6b4c6f-9fba-453b-9f33-0002a5d5c51b
[...]
- name: RX ANR
[...]
Effect ID 187:
[...]
- UUID: 4f7f9f58-122b-4dc6-831d-0002a5d5c51b
[...]
- name: Aloop Capture
[...]
[...]
[...]
3. Parameter
Standardwerte stehen in rkaudio_effect_preprocess.xml, im SDK unter hardware/rockchip/audio/preprocess/ und auf dem Gerät unter /vendor/etc/.
3.1 Parameterbeschreibung
Siehe Rockchip_Developer_Guide_Microphone_Array_Tuning.pdf. Nach der Integration stehen die Parameter standardmäßig in rkaudio_effect_preprocess.xml; folgende Erläuterungen beziehen sich auf dieses Dokument und diese XML-Datei.
3.2 Parametereinstellung
3.2.1 AEC-Modulparameter
| Attribut | Beschreibung |
|---|---|
pos |
Position der Referenzkanäle: 0 vor den MIC-Daten, 1 danach. |
drop_ref_channel |
Anzahl nicht verarbeiteter Referenzkanäle. |
delay_len |
Bei deaktivierter Verzögerungsschätzung der Standard-Verzögerungspunkt der Hardware-Referenz; andernfalls der Startpunkt der Schätzung. |
look_ahead |
MIC-Pufferlänge. Nur konfigurieren, wenn die MIC-Erfassung nachweislich hinter der Referenz liegt; sonst 0 belassen. |
filter_len |
Länge des linearen AEC-Filters. Größere Werte verbessern die Echoschätzung, verlangsamen jedoch die Konvergenz und erhöhen den Rechenaufwand. Üblich: 2/4/6/8. |
Array_list |
Reihenfolge der Audiokanäle; erfordert preproc_aec_array_reset. |
Parameter der Verzögerungsschätzung (erfordert preproc_aec_delay).
| Attribut | Beschreibung |
|---|---|
max_frame |
Maximale Framezahl der Schätzung; normalerweise 16. |
least_delay |
Minimale Framezahl der Schätzung; 0 empfohlen, sofern MaxFrame nicht besonders groß ist. |
jump_frame |
Anfangs übersprungene Frames; normalerweise 12. |
delay_offset |
Frame-Offset, damit eine zu große Verzögerungsschätzung das MIC-Signal nicht hinter die Referenz verschiebt; normalerweise 1. |
mic_amp_thr |
Minimale MIC-Energieschwelle; darunter wird die Verzögerungsschätzung nicht aktualisiert. Normalerweise 50. |
ref_amp_thr |
Minimale Referenz-Energieschwelle; darunter wird die Verzögerungsschätzung nicht aktualisiert. Normalerweise 50. |
start_freq |
Startfrequenz der Verzögerungsschätzung. Hauptsprachband wählen und anhand der Aufnahme anpassen; normalerweise 500. |
end_freq |
Endfrequenz der Verzögerungsschätzung. Hauptsprachband wählen und anhand der Aufnahme anpassen; normalerweise 4000. |
smooth_factor |
Glättungsfaktor, meist [0.95,1). Höhere Werte stabilisieren die Schätzung, niedrigere aktualisieren schneller. Üblich: 0.97/0.99. |
3.2.2 BF-Modulparameter
| Attribut | Beschreibung |
|---|---|
ref_pos |
Position der Referenzkanäle: 0 vor den MIC-Daten, 1 danach. |
targ |
Aufnahmerichtung bei aktiviertem preproc_bf_fix. |
drop_ref_channel |
Anzahl nicht verarbeiteter Referenzkanäle. |
1) AES-Parameter (erfordert preproc_bf_aes).
| Attribut | Beschreibung |
|---|---|
beta_up |
Anstiegsrate: Größere Werte verstärken die nichtlineare Unterdrückung. Empfohlen: 0.001-0.01. |
beta_down |
Abfallrate: Größere Werte schwächen die nichtlineare Unterdrückung. Empfohlen: 0.001-0.01. |
beta_up_low |
Anstiegsrate im unteren Band; Verhalten und Bereich wie beta_up. |
beta_down_low |
Abfallrate im unteren Band; Verhalten und Bereich wie beta_down. |
low_freq |
Untere Frequenzbandgrenze. |
high_freq |
Obere Frequenzbandgrenze. |
thd_flag |
1 aktiviert die Unterdrückung harmonischer Verzerrungen, 0 deaktiviert sie. |
hard_flag |
1 aktiviert den Hard-Modus: stärkere Echounterdrückung, jedoch mögliche Überunterdrückung der Sprache. |
limit_ratio_0 |
Minimaler Restechoanteil je Band; empfohlen [1.0f, 5.0f]. Größere Werte verstärken die Echounterdrückung. Die drei Spalten sind unteres, mittleres und oberes Band, getrennt durch low_freq und high_freq. |
limit_ratio_1 |
Restecho-Unterdrückungsverhältnis je Band; empfohlen [1.0f, 3.0f]. Größere Werte verstärken die Unterdrückung. Drei Spalten entsprechen unterem, mittlerem und oberem Band gemäß low_freq und high_freq. |
thd_split_freq_0 |
Bänder der Harmonischenunterdrückung. Unbenötigte Zeile vollständig auf 0 setzen. Jede Zeile ist ein Band: Start in Spalte 1, Ende in Spalte 2; beide Werte in [0,1/2 * sample rate]. |
thd_split_freq_1 |
Wie oben. |
thd_split_freq_2 |
Wie oben. |
thd_split_freq_3 |
Wie oben. |
thd_sup_degree_0 |
Unterdrückungsverhältnisse für die obigen Bänder. Eine vollständig nullgesetzte Bandzeile deaktiviert die zugehörige Verhältniszeile. Die Spalten bestimmen die Unterdrückung der Grundfrequenz, wenn daraus die 2. bis 11. Harmonische im Band entstehen kann. Empfohlen [0.001f,1.0f]; höhere Werte verstärken die Wirkung. |
thd_sup_degree_1 |
Wie oben. |
thd_sup_degree_2 |
Wie oben. |
thd_sup_degree_3 |
Wie oben. |
hard_split_freq_0 |
Hard-Modus-Bänder und das Band zur Berechnung der mittleren Verstärkung. Spalten 1/2 sind Start/Ende in [0,1/2*sample rate]. Höchstens vier Hard-Bänder; die letzte Zeile definiert das Band für die mittlere Verstärkung, das HardThreshold unten verwendet. |
hard_split_freq_1 |
Wie oben. |
hard_split_freq_2 |
Wie oben. |
hard_split_freq_3 |
Wie oben. |
hard_split_freq_4 |
Wie oben. |
hard_threshold |
Hard-Aktivierungsschwellen: Vier Schwellen entsprechen den vier obigen Bändern. Liegt die mittlere Verstärkung unter der jeweiligen Schwelle, wird Hard im betreffenden Band aktiviert. |
2) AGC-Parameter (erfordert preproc_bf_agc).
| Attribut | Beschreibung |
|---|---|
attack_time |
Empfohlen 20-600 ms. Ansprechzeit bis zum Anstieg der AGC-Verstärkung. |
release_time |
Empfohlen 20-600 ms. Abklingzeit bis zum Abfall der AGC-Verstärkung. |
attenuate_time |
|
max_gain |
Empfohlen 0-50 dB. Maximalverstärkung, zugleich Verstärkung des linearen Abschnitts. |
max_peak |
Bereich 0 bis -87 dB. Maximale Sprachenergie nach AGC. |
fRth0 |
Bereich 0 bis -87 dB. Noise-Gate-Schwelle; Sprache darunter wird nicht verstärkt. |
fRth1 |
Bereich 0 bis -87 dB. Energieschwelle am Ende der Expansion; Sprache darüber erhält max_gain. |
fRth2 |
Bereich 0 bis -87 dB. Energieschwelle für den Kompressionsbeginn; darüber sinkt die Sprachverstärkung schrittweise auf 0 dB. |
fRk0 |
Steigung des Expansionsabschnitts. |
fRk1 |
Steigung des Expansionsabschnitts (unwirksamer Parameter). |
fRk2 |
Steigung des Expansionsabschnitts (unwirksamer Parameter). |
fLineGainDb |
Anhebung des linearen Abschnitts in dB (unwirksamer Parameter). |
swSmL0 |
Zeitbereichs-Glättungspunkte der Expansion (unwirksamer Parameter). |
swSmL1 |
Zeitbereichs-Glättungspunkte des linearen Abschnitts (unwirksamer Parameter). |
swSmL2 |
Zeitbereichs-Glättungspunkte der Kompression (unwirksamer Parameter). |
3) ANR-Parameter (erfordert preproc_bf_anr).
| Attribut | Beschreibung |
|---|---|
noiseFactor |
Rauschschätzpegel, meist [0.5f,1.5f]; höhere Werte entfernen Rauschen gründlicher. |
swU |
Zeitfenster der Rauschschätzung, meist [2,20]. Höhere Werte schätzen stationäres Rauschen genauer, reagieren aber langsamer auf Sprünge. Niedrigere Werte reagieren schneller, können jedoch Sprache übermäßig unterdrücken. |
psiMin |
Schwelle für Sprachpräsenzwahrscheinlichkeit, [0.0f,1.0f]; höhere Werte verstärken die Rauschunterdrückung. |
psiMax |
Schwelle für Sprachpräsenzwahrscheinlichkeit, [0.0f,1.0f]; höhere Werte verstärken die Rauschunterdrückung. |
fGmin |
Minimaler Rauschunterdrückungswert, [0.0f,1.0f]; kleinere Werte verstärken die Unterdrückung. |
supFreq1 |
Punkt 1 zur Unterdrückung konstantfrequenten Rauschens, [0,1/2*sample rate]; Rauschen dort wird stets unterdrückt. |
supFreq2 |
Punkt 2 zur Unterdrückung konstantfrequenten Rauschens, [0,1/2*sample rate]; Rauschen dort wird stets unterdrückt. |
supEnergy1 |
Energieschwelle für Punkt 1 der konstantfrequenten Unterdrückung, normalerweise 100000. Bei Überschreitung durch die Frequenzenergie wird die Rauschschätzung aktualisiert. |
supEnergy2 |
Energieschwelle für Punkt 1 der konstantfrequenten Unterdrückung, normalerweise 100000. Bei Überschreitung durch die Frequenzenergie wird die Rauschschätzung aktualisiert. |
interV |
Frame-Abtastintervall, meist [2,20]. Höhere Werte stabilisieren das geschätzte Rauschen, ähnlich swU. |
biasMin |
Rauschkompensation, meist [1.0f, 2.0f]; höhere Werte verstärken die Unterdrückung. |
updateFrm |
Länge der schnellen Konvergenz, normalerweise 15: schnelle Konvergenz in den ersten 15 Frames. |
nPreGammaThr |
Schwelle der Wahrscheinlichkeit reinen Rauschens, meist (3.0f,5.0f); höhere Werte verstärken die Unterdrückung. |
nPreZetaThr |
Schwelle der Wahrscheinlichkeit reinen Rauschens, meist (1.0f,3.0f); höhere Werte verstärken die Unterdrückung. |
sabsGammaThr0 |
Schwelle der Sprachabwesenheitswahrscheinlichkeit, meist (0.5f,1.5f); höhere Werte verstärken die Unterdrückung. |
sabsGammaThr1 |
Schwelle der Sprachabwesenheitswahrscheinlichkeit, meist (2.f,4.0f); höhere Werte verstärken die Unterdrückung. |
infSmooth |
Glättungskoeffizient des Eingangssignals, (0.0f,1.0f). |
probSmooth |
Glättungskoeffizient der Sprachpräsenzwahrscheinlichkeit, (0.0f,1.0f). |
compCoeff |
Rauschkompensation, meist [1.0f, 2.0f], für Bänder unter der mittleren Rauschschätzung. Höhere Werte verstärken die Unterdrückung. |
prioriMin |
Minimales A-priori-SNR, (0.0f, 0.5f); höhere Werte schwächen die Rauschunterdrückung. |
postMax |
Maximales A-posteriori-SNR; normalerweise 40. |
prioriRatio |
Glättungskoeffizient des A-priori-SNR, (0.0f,1.0f); höhere Werte verstärken die Rauschunterdrückung. |
prioriRatioLow |
Glättungskoeffizient des A-priori-SNR, (0.0f,1.0f); höhere Werte verstärken die Rauschunterdrückung. |
splitBand |
Bandtrennindex, [0,32]. Darunter A-priori-SNR mit PrioriRatioLow glätten, andernfalls mit PrioriRatio. |
prioriSmooth |
Glättungskoeffizient des A-priori-SNR, (0.0f,1.0f); höhere Werte verstärken die Rauschunterdrückung. |
tranMode |
Impulsrauschmodus: 0 aus, 1 detektionsbasierte Entfernung, 2 schätzungsbasierte Entfernung. |
4) Enthallungsparameter (erfordert preproc_bf_dereverb).
| Attribut | Beschreibung |
|---|---|
rlsLg |
RLS-Filterordnung für die Enthallung beim Aufwecken. Innerhalb gewisser Grenzen verstärken höhere Ordnungen die Wirkung und erhöhen den Rechenaufwand. Empfohlen: 4. |
curveLg |
Ordnung der Verteilungskurve für Gesprächsenthallung. Höhere Werte verstärken die Wirkung und das Risiko der Überunterdrückung. Empfohlen: 10. |
delay |
RLS-Filterverzögerung bestimmt den Erhalt früher Reflexionen. Empfohlen: 2. |
forgetting |
RLS-Vergessensfaktor. Kleinere Werte verstärken die Enthallung und das Risiko der Überunterdrückung. Empfohlen: 0.98-0.999. |
t60 |
Geschätzte Nachhallzeit in Sekunden. Höhere Werte verstärken die Enthallung, aber auch das Überunterdrückungsrisiko. Empfohlen: 0.68 bei geringem, 1.5 bei mittlerem/starkem Nachhall. |
coCoeff |
Anpassung der gegenseitigen Kohärenz gegen Überunterdrückung. Kleinere Werte verstärken die Wirkung. Empfohlen: 2 bei geringem, 1 bei mittlerem/starkem Nachhall. |
5) Komfortrauschparameter (erfordert preproc_bf_cng).
| Attribut | Beschreibung |
|---|---|
fGain |
Empfohlen 0-50 dB. Amplitudenverhältnis des zugesetzten Komfortrauschens; Standard 2. |
fMpy |
Empfohlen 0-50 dB. Amplitude der Weißrausch-Zufallserzeugung; Standard 5. |
fSmoothAlpha |
Bereich 0.0f-1.0f. Glättung des Komfortrauschens; Standard 0.92. |
fSpeechGain |
Bereich 0.0f-1.0f. Grad der Sprachtextursimulation im Komfortrauschen; Standard 0.3. |
6) DTD-Parameter (erfordert preproc_bf_dtd).
| Attribut | Beschreibung |
|---|---|
ksiThd_high |
Obere Entscheidungsschwelle für Einzel-/Doppelsprechen; darüber gilt Einzelsprechen. |
ksiThd_low |
Untere Entscheidungsschwelle; darunter gilt Einzelsprechen. |
7) DOA-Parameter (erfordert preproc_bf_doa).
| Attribut | Beschreibung |
|---|---|
rad |
|
start_freq |
|
end_freq |
|
lg_num |
|
lg_pitch_num |
8) EQ-Parameter (erfordert preproc_bf_eq).
| Attribut | Beschreibung |
|---|---|
shwParaLen |
Anzahl der Filterkoeffizienten. |
filter_bank_0 |
Filterkoeffizienten. |
filter_bank_1 |
Filterkoeffizienten. |
filter_bank_2 |
Filterkoeffizienten. |
filter_bank_3 |
Filterkoeffizienten. |
filter_bank_4 |
Filterkoeffizienten. |
3.3 Parameterabstimmung
Eine userdebug-Version verwenden und die ADB-Verbindung vom PC sicherstellen. Folgende zwei Befehle am PC ausführen.
adb root
adb remount
3.3.1 Parameter aktualisieren
rkaudio_effect_preprocess.xml ändern und per push in das betreffende Geräteverzeichnis übertragen.
adb push rkaudio_effect_preprocess.xml /vendor/etc/
3.3.2 Ausgabe analysieren
Aufnahme oder Sprachgespräch neu starten, um das Ergebnis bzw. die Ausgabe der Gegenseite zu prüfen. Alternativ Ein-/Ausgabe direkt dumpen und die Datenströme analysieren.
setenforce 0
setprop vendor.audio.preproc.debug 1
Danach die folgenden zwei Dateien exportieren und mit Audacity oder einem anderen PC-Werkzeug analysieren.
/data/misc/audioserver/preproc_input_xxxhz_xxxch.pcm
/data/misc/audioserver/preproc_output_xxxhz_xxxch.pcm
xxxhz bezeichnet die Abtastrate, xxxch die Kanalzahl. In Audacity Datei, Importieren, Rohdaten wählen und Abtastrate sowie Kanalzahl einstellen. Bei zufriedenstellendem Ergebnis rkaudio_effect_preprocess.xml unter hardware/rockchip/audio/preprocess/ aktualisieren.
4. Fragen und Antworten
4.1 Nach Hinzufügen von DLP scheitert die Aufnahme mit der angegebenen MIC- plus Referenzkanalzahl an einem Parameterfehler
Beispiel: zwei MIC- und zwei Referenzkanäle.
# tinycap /sdcard/mic.wav -D xxx -c 4 -r 48000
Unable to open PCM device (cannot set hw params: Invalid argument)
Captured 0 frames
xxx ist der Soundkartenindex aus cat /proc/asound/cards.
4.1.1 Routenkonfiguration prüfen
(1) Prüfen, ob sich die Route einstellen lässt.
# tinymix -D xxx "Software Digital Loopback Mode" "4CH: 2 Mics + 2 Loopbacks"
Bei einem Fehler die folgenden drei Punkte prüfen:
Invalid mixer control: Software Digital Loopback Mode
Prüfen, ob der aktuelle Kernel DLP unterstützt; andernfalls SDK aktualisieren oder Patch einspielen.
# grep rockchip,digital-loopback -r ./sound/soc/rockchip/
./sound/soc/rockchip/rockchip_sai.c: if (device_property_read_bool(&pdev->dev,
"rockchip,digital-loopback"))
./sound/soc/rockchip/rockchip_i2s.c: if (device_property_read_bool(&pdev->dev,
"rockchip,digital-loopback"))
./sound/soc/rockchip/rockchip_i2s_tdm.c: if
(device_property_read_bool(dev, "rockchip,digital-loopback")) {
Prüfen, ob DLP im Kernel aktiviert ist.
CONFIG_SND_SOC_ROCKCHIP_DLP_PCM
DLP am betreffenden cpu dai in dts aktivieren.
&i2s {
rockchip,digital-loopback;
};
cpu dai kann i2s0_8ch, i2s1_8ch, i2s2_2ch, i2s3_2ch, sai0, sai1 usw. sein. (2) Prüfen, ob die Route wirksam wurde.
# tinymix -D xxx
...
13 ENUM 1 Software Digital Loopback Mode 4CH: 2 Mics + 2
Loopbacks
...
4.1.2 Soundkarte prüfen
Prüfen, ob der in dts gebundene codec dai driver Unterstützung für vier Aufnahmekanäle deklariert.
// ...
demo_sound: demo-sound {
compatible = "simple-audio-card";
// ...
simple-audio-card,codec {
sound-dai = <&demo>;
};
// ...
};
// ...
// 或者
demo_sound: demo-sound {
compatible = "rockchip,multicodecs-card";
// ...
rockchip,codec = <&demo>;
// ...
};
struct snd_soc_dai_driver demo_dai = {
// 没有 capture, 或者 channels_max 小于 4 channel, 则说明不支持
.capture = {
.channels_min = 1,
.channels_max = 2,
},
// ...
};
Falls nicht, “rockchip,multicodecs-card” verwenden und zusätzlich einen virtuellen Hilfs-codec binden.
// 修改前 (例1)
#if 0
demo_sound: demo-sound {
status = "okay";
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "rockchip,demo-codec";
simple-audio-card,mclk-fs = <256>;
simple-audio-card,cpu {
sound-dai = <&i2s>;
};
simple-audio-card,codec {
sound-dai = <&demo>;
};
};
#endif
// 修改前 (例2)
#if 0
demo_sound: demo-sound {
status = "okay";
compatible = "rockchip,multicodecs-card";
rockchip,format = "i2s";
rockchip,card-name = "rockchip,demo-codec";
rockchip,mclk-fs = <256>;
rockchip,cpu = <&i2s>;
rockchip,codec = <&demo>;
};
#endif
// 修改后
// 声明虚拟 codec 节点
demo_aux: demo-aux {
status = "okay";
compatible = "rockchip,dummy-codec";
sound-name-prefix = "demo-aux";
#sound-dai-cells = <0>;
};
// 使用 "rockchip,multicodecs-card" 绑定 codec 和虚拟 codec
demo_sound: demo-sound {
status = "okay";
compatible = "rockchip,multicodecs-card";
rockchip,format = "i2s";
rockchip,card-name = "rockchip,demo-codec";
rockchip,mclk-fs = <256>;
rockchip,cpu = <&i2s>;
rockchip,codec = <&demo &demo_aux>;
};
