Rockchip · AI & Linux Hub

Android und BSP

Entwicklerhandbuch zum Rockchip Android-3A-Modul

Entwicklerhandbuch zum Rockchip Android-3A-Modul — V1.0.0

· ArmSoM Editorial · Rockchip source documentation · 27 Min. Lesezeit

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 |
+----------------+  |                      +----------+  |               +-----+
                    |                                    |

Audio

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 |
                    |                     |+----------+| |               +-----+
                    |                     +------------+ |

Audio

Audio

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 |
+----------------+  |                      |          |  |               +-----+
                    |                      +----------+  |

Audio

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>     |                                    |

Audio

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>;
};

Dieses Thema entdecken → · Lernpfade →