Vollständiger technischer Text der chinesischen Quelle RK-KF-YF-774 V1.1.0 vom : Kompilierung, Aktivierung und Parameter. Der Quellumfang nennt alle Chips/Kernelversionen, nicht aktuell geprüfte Kompatibilität. Es gibt nur eine chinesische Quelle, keine englischen Originalbilder oder Bitmap-Abbildungen in diesem Dokument. Code, Konfigurationen und Logs bleiben editierbar, Quellkommentare erhalten. Rechts-/Kontakt-, Zielgruppen-, Revisions- und doppelte Inhaltsangaben entfallen. Keine Befehle oder Audio-/Hardwaretests wurden ausgeführt.
Redaktion/Sicherheit: UUID-Umbrüche, das seitengetrennte Java-Beispiel und Kommentarumbrüche sind repariert. Der Text nennt zwei Befehle, listet aber drei; alle bleiben erhalten. equalizer/mEqualizer, die Schreibweise channnel und Presetlisten bleiben wie im Original. adb root, remount und setenforce 0 nur auf autorisierten userdebug-Geräten; Parameter sichern, danach SELinux-Erzwingung wiederherstellen und Debug-Einstellungen nicht unverändert in Seriengeräte übernehmen.
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/eqdrc kompiliert wird.
BOARD_USE_AUDIO_EQDRC := true
2. Aktivierung
2.1 Effekt deklarieren
EQ/DRC in frameworks/av/media/libeffects/data/audio_effects.xml deklarieren.
<libraries>
<!-- 保留已有内容, 添加下面的配置项 -->
<library name="rkeqdrc" path="librkeqdrc.so"/>
</libraries>
<effects>
<!-- 保留已有内容, 添加下面的配置项 -->
<effect name="eqdrc" library="rkeqdrc" uuid="79fe72b2-4182-44c1-b2ea-0002a5d5c51b"/>
</effects>
2.2 Effekt aktivieren
Die Bindungsart entsprechend dem gewünschten Wirkungsbereich wählen.
2.2.1 Dynamische Bindung
EQ/DRC beim Erzeugen von MediaPlayer oder AudioTrack dynamisch binden. Dies wirkt auf den einzelnen Audiostream.
import android.media.MediaPlayer;
import android.media.audiofx.RockchipEqualizer;
MediaPlayer mediaPlayer = new MediaPlayer();
RockchipEqualizer equalizer = new RockchipEqualizer(0,
mediaPlayer.getAudioSessionId());
equalizer.setEnabled(true);
2.2.2 Stream-HAL-Bindung
Den Streamtyp in audio_effects.xml angeben. Dies wirkt global auf Streams dieses Typs, beispielsweise music-Ausgabestreams.
<!-- 如果没有声明 postprocess, 则直接添加下面的配置, 忽略下面的注释 -->
<postprocess>
<!-- 保留已有内容, 添加下面的配置项 -->
<stream type="music">
<apply effect="eqdrc"/>
</stream>
</postprocess>
Auch mehrere Ausgabestreamtypen können gebunden werden.
<!-- 如果没有声明 postprocess, 则直接添加下面的配置, 忽略下面的注释 -->
<postprocess>
<!-- 保留已有内容, 添加下面的配置项 -->
<stream type="music">
<apply effect="eqdrc"/>
</stream>
<stream type="voice_call">
<apply effect="eqdrc"/>
</stream>
</postprocess>
Folgende Ausgabestreamtypen sind verfügbar:
/** All output stream types which support effects.
* This need to be kept in sync with the xsd streamOutputType.
*/
template <>
constexpr std::pair<audio_stream_type_t, const char*>
STREAM_NAME_MAP<audio_stream_type_t>[] = {
{AUDIO_STREAM_VOICE_CALL, "voice_call"},
{AUDIO_STREAM_SYSTEM, "system"},
{AUDIO_STREAM_RING, "ring"},
{AUDIO_STREAM_MUSIC, "music"},
{AUDIO_STREAM_ALARM, "alarm"},
{AUDIO_STREAM_NOTIFICATION, "notification"},
{AUDIO_STREAM_BLUETOOTH_SCO, "bluetooth_sco"},
{AUDIO_STREAM_ENFORCED_AUDIBLE, "enforced_audible"},
{AUDIO_STREAM_DTMF, "dtmf"},
{AUDIO_STREAM_TTS, "tts"},
{AUDIO_STREAM_ASSISTANT, "assistant"},
};
2.3 Überprüfung
2.3.1 Effektregistrierung prüfen
Mit dumpsys media.audio_flinger prüfen, ob der deklarierte Effekt bei AudioFlinger registriert ist.
# dumpsys media.audio_flinger
[...]
Libraries loaded:
path: /vendor/lib/soundfx/librkeqdrc.so
EQ DRC / Rockchip Electronics Co. Ltd.
UUID: 79fe72b2-4182-44c1-b2ea-0002a5d5c51b
TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
apiVersion: 00020000
flags: 00820204
[...]
2.3.2 Effektbindung prüfen
Prüfen, ob der Effekt an den richtigen Ausgabestream gebunden ist. Audio in einer Android-App abspielen und dumpsys media.audio_flinger prüfen.
# 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 49
[...]
Effect ID 11:
Session State Registered Enabled Suspended:
00049 003 y y n
Descriptor:
- UUID: 79fe72b2-4182-44c1-b2ea-0002a5d5c51b
- TYPE: 34805d32-2e6d-4d1e-9296-0002a5d5c51b
- apiVersion: 00000000
[...]
- name: EQ DRC
- implementor: Rockchip Electronics Co. Ltd.
[...]
Effect ID 11 HAL dump:
[...]
[...]
3. Parameter
3.1 Parameterdateien und Verzeichnisse
3.1.1 Parameterdateien
Standardparameter stehen in den folgenden zwei Binärdateien.
rkaudio_effect_eqdrc_44100hz_2ch.bin
rkaudio_effect_eqdrc_48000hz_2ch.bin
Weitere voreingestellte Parameterdateien werden ebenfalls unterstützt.
rkaudio_effect_eqdrc_48000hz_2ch_classroom.bin
rkaudio_effect_eqdrc_48000hz_2ch_meeting.bin
rkaudio_effect_eqdrc_48000hz_2ch_standard.bin
3.1.2 Parameterverzeichnisse
Das SDK speichert Standardwerte unter hardware/rockchip/audio/eqdrc/configs/ und installiert sie nach /vendor/etc/. Bei userdebug überträgt das PC-Werkzeug Dateien nach /vendor/etc/. Nutzt eine App die Standardkonfiguration (preset 0), werden ihre Parameter unter /data/vendor/audio/ gespeichert. Beim Erzeugen lädt EQ/DRC zuerst aus diesem Verzeichnis, andernfalls aus dem Standardverzeichnis.
3.2 Parameterbeschreibung
Siehe Rockchip_Developer_Audio_Effect_Tool.pdf.
3.3 Parameterabstimmung
Zwei Methoden werden unterstützt: App und PC-Werkzeug. Nach Bedarf auswählen.
3.3.1 Abstimmung mit eigener App
Ist EQ/DRC in audio_effects.xml gebunden, verarbeitet diese Instanz den Effekt. Eine zusätzliche Bindung aus der App dient dann als Kanal zur Parameteranpassung.
import android.media.MediaPlayer;
import android.media.audiofx.RockchipEqualizer;
MediaPlayer mediaPlayer = new MediaPlayer();
// 绑定
RockchipEqualizer equalizer = new RockchipEqualizer(0,
mediaPlayer.getAudioSessionId());
// 使能
equalizer.setEnabled(true);
Die entsprechenden APIs von android.media.audiofx.RockchipEqualizer.Settings aufrufen. Folgendes Beispiel setzt EQ-Parameter.
// 获取所有配置
RockchipEqualizer.Settings settings = equalizer.getProperties();
// 使能 EQ10
settings.setEq10Enabled(1);
// 获取当前 EQ, 总共 2 channnel 的 EQ
Collection<RockchipEqualizer.Settings.Eq> eqs = settings.getEqs();
// 创建 EQ 迭代器
Iterator<RockchipEqualizer.Settings.Eq> eqsIterator = eqs.iterator();
// 遍历所有 channel 的 EQ
while (eqsIterator.hasNext()) {
RockchipEqualizer.Settings.Eq eq = eqsIterator.next();
Log.d(TAG, "eq: " + eq.toString());
// 获取当前 channel 的 EQ 的所有 band 配置
Collection<RockchipEqualizer.Settings.Eq.EqBand> eqBands = eq.getBands();
// 创建 band 迭代器
Iterator<RockchipEqualizer.Settings.Eq.EqBand> eqBandsIterator =
eqBands.iterator();
// 遍历当前 channel 的 EQ 的所有 band 配置
while (eqBandsIterator.hasNext()) {
RockchipEqualizer.Settings.Eq.EqBand eqBand = eqBandsIterator.next();
Log.d(TAG, "band: " + eqBand.toString());
// 设置 band 参数, 具体可以看对应的 set API
// eqBand.setBoost(0); 滤波器中心频率增益,单位 dB
// eqBand.setFilter(0); 0 表示 Parametric,1 表示 LowShelf,2 表示 HighShelf,3 表示 GeneralLP,4 表示 GeneralHP
// eqBand.setFc(0); 滤波器的中心频率,单位 Hz
// eqBand.setQ(0); filter 为 Parametric 时,Q 为品质因数,范围为[0.01, 16]; filter 为 LowShelf/HighShelf时,Q 为Slope,范围为[0.01, 2]
// eqBand.setEnabled(0); 是否启用该滤波器,1 表示启用,0 表示bypass
}
}
// 更新配置
equalizer.setProperties(settings);
Ein Preset kann auch direkt geladen werden. Ohne explizite Auswahl gilt “custom”; nur dieses erlaubt die obigen Parameteränderungen.
mEqualizer.usePreset(0); // 使用 "custom" 预设
mEqualizer.usePreset(1); // 使用 "standard" 预设
mEqualizer.usePreset(2); // 使用 "meeting" 预设
mEqualizer.usePreset(3); // 使用 "classical" 预设
mEqualizer.usePreset(4); // 使用 "classroom" 预设
3.3.2 Abstimmung mit dem PC-Werkzeug
Für das PC-Werkzeug sind ein userdebug-Build und eine adb-Verbindung zum Gerät erforderlich.
1) Werkzeugpfad. Das PC-Werkzeug liegt standardmäßig im SDK unter RKTools/windows/AudioEffect_Tool.rar.
2) Weitere Funktionen. load lädt Parameter aus einem beliebigen Verzeichnis; save speichert aktuelle Parameter; push überträgt sie per adb push nach /vendor/etc/ auf dem Gerät; pull speichert die aktuellen Geräteparameter per adb pull im gewählten Verzeichnis. Details: Rockchip_Developer_Audio_Effect_Tool.pdf.
Hinweis: push/pull verwenden rkaudio_effect_eqdrc_xhz_ych.bin; x/y sind Abtastrate/Kanalzahl des Werkzeugs.
3) Vorgehen. Vor der Abstimmung folgende zwei Befehle am PC ausführen.
adb root
adb remount
adb shell setenforce 0
AudioEffect_tool.exe öffnen. SampleRate muss der rate der vorhandenen pcm_config in hardware/rockchip/audio/tinyalsa_hal/ entsprechen.
static struct pcm_config pcm_config = {
// ...
.rate = 48000,
// ...
};
NumChan muss channels der vorhandenen pcm_config in hardware/rockchip/audio/tinyalsa_hal/ entsprechen.
static struct pcm_config pcm_config = {
.channels = 2,
// ...
};
Optional mit pull die aktuellen Geräteparameter sichern. Mit load das Parameterverzeichnis wählen. Audio in einer Android-App abspielen, Parameter anpassen und mit push aktualisieren. logcat auf dem Gerät zeigt das erneute Laden der Parameter.
# logcat | grep eqdrc
06-19 07:33:12.286 714 2068 D eqdrc : eqdrc_fx_process : reload profile
from tuner
Das Ergebnis anhören oder mit Audiomesstechnik wie AP prüfen. Bei Erfolg mit save unter hardware/rockchip/audio/eqdrc/configs im SDK speichern; andernfalls erneut abstimmen.
