Bei der Entwicklung von Audio auf Android-Geräten können verschiedene Probleme auftreten. Einer davon ist, dass die Aufnahmelautstärke zu niedrig ist. In diesem Artikel werde ich untersuchen, wie dieses Problem diagnostiziert und behoben werden kann, und die Verwendung des Tinyalsa-Tools kurz vorstellen.
Problembeschreibung
Seit Kurzem nutze ich die Android-Plattform von Allwinner. Ein Kunde benötigt ein Mikrofon, das die Funktion zum Aufzeichnen und Abspielen von Audio benötigt. Ich habe den Soundkartentreiber der Allwinner-Plattform gefunden, der zwei Mikrofoneingänge bietet, nämlich MIC1 und MIC2. Ich möchte MIC1 als Aufnahmeeingangsquelle anstelle von MIC2 verwenden.
Ich habe viele Dinge versucht, einschließlich der Änderung der Soundkarten-Konfigurationsdateien, der Mixer-Steuerung und der Aufnahmebefehle, ohne Erfolg.
Lösung
Nach einigem Suchen und Ausprobieren habe ich eine Lösung gefunden, die darin besteht, MIC1 als Aufnahmeeingangsquelle zu verwenden, indem ich die Konfigurationsdatei der Soundkarte, die Mixersteuerung und die Aufnahmebefehle modifiziere und die Lautstärke der MIC-Aufnahme und des Verstärkerkopfhörers erhöhe.
Ändern Sie die Konfigurationsdatei der Soundkarte
Die Soundkarten-Konfigurationsdatei ist eine Datei zum Definieren von Soundkartenparametern und -geräten. Sie befindet sich normalerweise in system\etc\codec_paths.xml. :
<path name="media-main-mic">
<ctl name="Left Input Mixer MIC2 Boost Switch" value="1" />
<ctl name="Right Input Mixer MIC2 Boost Switch" value="1" />
</path>
<path name="media-main-mic-close">
<ctl name="Left Input Mixer MIC2 Boost Switch" value="0" />
<ctl name="Right Input Mixer MIC2 Boost Switch" value="0" />
</path>
Speicherort des Quellcodes:hardware/aw/audio/codec_paths.xml
Dieser Inhalt definiert die Audiopfadkonfiguration im Android-Audiosystem. Diese Pfadkonfigurationen werden normalerweise verwendet, um zu bestimmen, wie Audiosignale zwischen Hardware und Software fließen.
-
Wenn
media-main-mic
der Pfad aktiviert ist, wird der MIC2-Verstärkungsschalter sowohl am linken als auch am rechten Eingangsmischer eingeschaltet, sodass das MIC2-Audiosignal in die Audioverarbeitungskette gelangen kann. -
Wenn
media-main-mic-close
der Pfad aktiviert ist, wird der Verstärkungsschalter von MIC2 sowohl am linken als auch am rechten Eingangsmischer ausgeschaltet, wodurch verhindert wird, dass das Audiosignal von MIC2 in die Audioverarbeitungskette gelangt.
Ich habe die Datei auf dem normalen Computer verglichen und sie wurde angezeigt MIC1
, aber auf dem abnormalen Computer wurde sie angezeigt, MIC2
daher halte ich es für effektiv, dies zu ändern.
Ändern Sie die Mixer-Steuerung
Dann erinnerte ich mich an das Debugging, das ich vor langer Zeit verwendet hatte tinyalsa
, wenn es nicht nötig war, es auszuführen mmm external/tinyalsa/
.
Mixer-Steuerelemente sind Parameter, mit denen Soundkarteneinstellungen gesteuert werden, z. B. Eingangsquelle, Ausgabegerät, Verstärkung, Lautstärke usw. Um die Mixer-Steuerelemente zu ändern, müssen Sie ein Befehlszeilentool verwenden, um diese Parameter anzuzeigen und festzulegen. Auf der Allwinner-Plattform können Sie das Tool tinyalsa verwenden, um diese Funktion zu implementieren. tinyalsa ist eigentlich eine vereinfachte ALSA-Bibliothek, die einige Befehlszeilentools zum Testen und Steuern von Audiogeräten bereitstellt.
Verwenden Sie tinyalsa, um die Mischpultsteuerung zu ändern, z. B. um die Parameter für die Mikrofonaufnahme und die Kopfhörerlautstärke des Verstärkers anzupassen. Sie können den Befehl tinymix verwenden, um die Werte dieser Steuerelemente zu ändern, zum Beispiel:
tinymix "digital volume" 63
tinymix "Headphone volume" 63
tinymix "MIC gain volume" 7 7
tinymix "MIC1 boost volume" 7
tinymix "MIC2 boost volume" 7
tinymix "ADC gain volume" 7
Sie können die Aufnahme- und Verstärker-Kopfhörer-Schallpegel des Mikrofons beeinflussen:
- digitale Lautstärke: Mit diesem Regler kann die digitale Lautstärke eingestellt werden. Der Bereich liegt zwischen 0 und 63. Je größer der Wert, desto höher die Lautstärke.
- Kopfhörerlautstärke: Mit diesem Regler können Sie die Kopfhörerlautstärke einstellen. Der Bereich liegt zwischen 0 und 63. Je größer der Wert, desto höher die Lautstärke.
- MIC-Gain-Lautstärke: Dieser Regler kann die Verstärkung von MIC einstellen. Er verfügt über zwei Kanäle, entsprechend MIC1 und MIC2. Der Bereich liegt zwischen 0 und 7. Je größer der Wert, desto größer die Verstärkung.
- MIC1-Boost-Lautstärke: Mit diesem Regler kann die zusätzliche Verstärkung von MIC1 eingestellt werden. Der Bereich liegt zwischen 0 und 7. Je größer der Wert, desto größer die Verstärkung.
- MIC2-Boost-Lautstärke: Mit diesem Regler kann die zusätzliche Verstärkung von MIC2 eingestellt werden. Der Bereich liegt zwischen 0 und 7. Je größer der Wert, desto größer die Verstärkung.
- ADC-Verstärkungslautstärke: Dieser Regler kann die Verstärkung des ADC anpassen. Der Bereich liegt zwischen 0 und 7. Je größer der Wert, desto größer die Verstärkung.
Diese Befehle setzen die Werte dieser Bedienelemente auf den Maximalwert und erhöhen dadurch vorübergehend und schnell die Lautstärke der MIC-Aufnahme und des Verstärkerkopfhörers. Passen Sie dann diese Werte des Codes entsprechend der tatsächlichen Situation an.
Aufnahmebefehl ändern
Der Aufnahmebefehl ist ein Befehlszeilentool zum Aufnehmen von Audiodateien. Er kann Parameter wie Abtastrate, Anzahl der Kanäle, Format, Dauer usw. angeben. Auf der Allwinner-Plattform können Sie das Tool tinyalsa verwenden, um diese Funktion zu implementieren.
Um den Aufnahmebefehl mit tinyalsa zu ändern, müssen Sie den folgenden Befehl ausführen:
tinycap -D 0 -d mic -c 2 -r 44100 -b 16 -t 10 /sdcard/test.wav
Dieser Befehl bedeutet, dass das Mikrofongerät der Soundkarte 0, Zweikanal, 44,1 kHz, 16 Bit, verwendet wird, um eine 10-sekündige Audiodatei in /sdcard/test.wav aufzunehmen.
Ergebnisüberprüfung
Nach den oben genannten Änderungen kann ich MIC2 zum Aufnehmen und Abspielen von Audio verwenden. Meine Ergebnisse können mit dem folgenden Befehl überprüft werden:
tinyplay -D 0 /sdcard/test.wav
Dieser Befehl bedeutet, dass die Soundkarte 0 zum Abspielen der Datei /sdcard/test.wav verwendet wird. Der von mir aufgenommene Audioinhalt ist hörbar und der Ton ist klar und laut.
Bisher ist mein Problem gelöst,
Andere Audio-Debugging-Methoden
Hier sind einige gängige Befehle und Methoden zum Debuggen von Audioproblemen:
1. Audioprofilprüfung
Auf bestimmten Plattformen wie Allwinner gibt es möglicherweise spezielle Konfigurationsdateien oder Tools für Audioeinstellungen. /system/etc
Diese Dateien finden Sie in oder anderen relevanten Verzeichnissen.
2. Verwenden Sie dumpsys
Befehle
dumpsys
Es bietet detaillierte Informationen zu Systemdiensten. Um detaillierte Informationen über das Audiosystem zu erhalten, können Sie Folgendes verwenden:
XXX # dumpsys media.audio_flinger
Library loudness_enhancer
Loudness Enhancer / The Android Open Source Project
UUID: fa415329-2034-4bea-b5dc-5b381c8d1e2c
TYPE: fe3199be-aed0-413f-87bb-11260eb63cf1
apiVersion: 00020000
flags: 00000008
Library downmix
Multichannel Downmix To Stereo / The Android Open Source Project
UUID: 93f04452-e4fe-41cc-91f9-e475b6d1d69f
TYPE: 381e49cc-a858-4aa2-87f6-e8388e7601b2
apiVersion: 00020000
flags: 00000008
Library visualizer
Visualizer / The Android Open Source Project
UUID: d069d9e0-8329-11df-9168-0002a5d5c51b
TYPE: e46b26a0-dddd-11db-8afd-0002a5d5c51b
apiVersion: 00020000
flags: 00000008
Library reverb
Insert Preset Reverb / NXP Software Ltd.
UUID: 172cdf00-a3bc-11df-a72f-0002a5d5c51b
TYPE: 47382d60-ddd8-11db-bf3a-0002a5d5c51b
apiVersion: 00020000
flags: 00000048
Auxiliary Preset Reverb / NXP Software Ltd.
UUID: f29a1400-a3bb-11df-8ddc-0002a5d5c51b
TYPE: 47382d60-ddd8-11db-bf3a-0002a5d5c51b
apiVersion: 00020000
flags: 00000001
Insert Environmental Reverb / NXP Software Ltd.
UUID: c7a511a0-a3bb-11df-860e-0002a5d5c51b
TYPE: c2e5d5f0-94bd-4763-9cac-4e234d06839e
apiVersion: 00020000
flags: 00000048
Auxiliary Environmental Reverb / NXP Software Ltd.
UUID: 4a387fc0-8ab3-11df-8bad-0002a5d5c51b
TYPE: c2e5d5f0-94bd-4763-9cac-4e234d06839e
apiVersion: 00020000
flags: 00000001
Library bundle
Volume / NXP Software Ltd.
UUID: 119341a0-8469-11df-81f9-0002a5d5c51b
TYPE: 09e8ede0-ddde-11db-b4f6-0002a5d5c51b
apiVersion: 00020000
flags: 00000050
Equalizer / NXP Software Ltd.
UUID: ce772f20-847d-11df-bb17-0002a5d5c51b
TYPE: 0bed4300-ddd6-11db-8f34-0002a5d5c51b
apiVersion: 00020000
flags: 00000048
Virtualizer / NXP Software Ltd.
UUID: 1d4033c0-8557-11df-9f2d-0002a5d5c51b
TYPE: 37cc2c00-dddd-11db-8577-0002a5d5c51b
apiVersion: 00020000
flags: 00000250
Dynamic Bass Boost / NXP Software Ltd.
UUID: 8631f300-72e2-11df-b57e-0002a5d5c51b
TYPE: 0634f220-ddd4-11db-a0fc-0002a5d5c51b
apiVersion: 00020000
flags: 00000248
Clients:
pid: 2404
Notification Clients:
pid: 1755
pid: 1765
pid: 2404
pid: 4551
pid: 5872
Global session refs:
session pid count
9 2404 1
Hardware status: 0
Standby Time mSec: 3000
Output thread 0xae003d40 type 0 (MIXER):
Thread name: AudioOut_D
I/O handle: 13
TID: 1823
Standby: yes
Sample rate: 44100 Hz
HAL frame count: 2720
HAL format: 0x1 (pcm16)
HAL buffer size: 10880 bytes
Channel count: 2
Channel mask: 0x00000003 (front-left, front-right)
Processing format: 0x1 (pcm16)
Processing frame size: 4 bytes
Pending config events: none
Output device: 0x2 (SPEAKER)
Input device: 0 (NONE)
Audio source: 0 (default)
Normal frame count: 2720
Last write occurred (msecs): 2158695
Total writes: 4459
Delayed writes: 0
Blocked in write: no
Suspend count: 0
Sink buffer : 0xae054000
Mixer buffer: 0xae072000
Effect buffer: 0xae057000
Fast track availMask=0xfe
Standby delay ns=3000000000
AudioStreamOut: 0xae548150 flags 0x2 (PRIMARY)
Frames written: 12128480
Suspended frames: 0
Hal stream dump:
Thread throttle time (msecs): 1037
AudioMixer tracks: 0x00000001
Master mono: off
FastMixer not initialized
Stream volumes in dB: 0:-5.9, 1:-6, 2:0, 3:0, 4:0, 5:0, 6:0, 7:-6, 8:-6, 9:0, 10:0, 11:0, 12:0
Normal mixer raw underrun counters: partial=0 empty=0
1 Tracks of which 0 are active
Name Active Client Type Fmt Chn mask Session fCount S F SRate L dB R dB Server Main buf Aux Buf Flags UndFrmCnt
0 no 2404 1 00000001 00000003 9 4512 S 1 48000 -inf -inf 0005B6E0 0xae054000 0x0 0x600 0
0 Effect Chains
USB audio module:
No output streams.
No input streams.
Reroute submix audio module:
route[0] rate in=0 out=0, addr=[]
route[1] rate in=0 out=0, addr=[]
route[2] rate in=0 out=0, addr=[]
route[3] rate in=0 out=0, addr=[]
route[4] rate in=0 out=0, addr=[]
route[5] rate in=0 out=0, addr=[]
route[6] rate in=0 out=0, addr=[]
route[7] rate in=0 out=0, addr=[]
route[8] rate in=0 out=0, addr=[]
route[9] rate in=48000 out=48000, addr=[]
a40-p1:/data/data # cat /proc/asound/cards
0 [audiocodec ]: audiocodec - audiocodec
audiocodec
1 [fmidi ]: MIDI Gadget - f_midi
MIDI Gadget
a40-p1:/data/data # dumpsys media.audio_flinger
Library loudness_enhancer
Loudness Enhancer / The Android Open Source Project
UUID: fa415329-2034-4bea-b5dc-5b381c8d1e2c
TYPE: fe3199be-aed0-413f-87bb-11260eb63cf1
apiVersion: 00020000
flags: 00000008
Library downmix
Multichannel Downmix To Stereo / The Android Open Source Project
UUID: 93f04452-e4fe-41cc-91f9-e475b6d1d69f
TYPE: 381e49cc-a858-4aa2-87f6-e8388e7601b2
apiVersion: 00020000
flags: 00000008
Library visualizer
Visualizer / The Android Open Source Project
UUID: d069d9e0-8329-11df-9168-0002a5d5c51b
TYPE: e46b26a0-dddd-11db-8afd-0002a5d5c51b
apiVersion: 00020000
flags: 00000008
Library reverb
Insert Preset Reverb / NXP Software Ltd.
UUID: 172cdf00-a3bc-11df-a72f-0002a5d5c51b
TYPE: 47382d60-ddd8-11db-bf3a-0002a5d5c51b
apiVersion: 00020000
flags: 00000048
Auxiliary Preset Reverb / NXP Software Ltd.
UUID: f29a1400-a3bb-11df-8ddc-0002a5d5c51b
TYPE: 47382d60-ddd8-11db-bf3a-0002a5d5c51b
apiVersion: 00020000
flags: 00000001
Insert Environmental Reverb / NXP Software Ltd.
UUID: c7a511a0-a3bb-11df-860e-0002a5d5c51b
TYPE: c2e5d5f0-94bd-4763-9cac-4e234d06839e
apiVersion: 00020000
flags: 00000048
Auxiliary Environmental Reverb / NXP Software Ltd.
UUID: 4a387fc0-8ab3-11df-8bad-0002a5d5c51b
TYPE: c2e5d5f0-94bd-4763-9cac-4e234d06839e
apiVersion: 00020000
flags: 00000001
Library bundle
Volume / NXP Software Ltd.
UUID: 119341a0-8469-11df-81f9-0002a5d5c51b
TYPE: 09e8ede0-ddde-11db-b4f6-0002a5d5c51b
apiVersion: 00020000
flags: 00000050
Equalizer / NXP Software Ltd.
UUID: ce772f20-847d-11df-bb17-0002a5d5c51b
TYPE: 0bed4300-ddd6-11db-8f34-0002a5d5c51b
apiVersion: 00020000
flags: 00000048
Virtualizer / NXP Software Ltd.
UUID: 1d4033c0-8557-11df-9f2d-0002a5d5c51b
TYPE: 37cc2c00-dddd-11db-8577-0002a5d5c51b
apiVersion: 00020000
flags: 00000250
Dynamic Bass Boost / NXP Software Ltd.
UUID: 8631f300-72e2-11df-b57e-0002a5d5c51b
TYPE: 0634f220-ddd4-11db-a0fc-0002a5d5c51b
apiVersion: 00020000
flags: 00000248
Clients:
pid: 2404
Notification Clients:
pid: 1755
pid: 1765
pid: 2404
pid: 4551
pid: 5872
Global session refs:
session pid count
9 2404 1
Hardware status: 0
Standby Time mSec: 3000
Output thread 0xae003d40 type 0 (MIXER):
Thread name: AudioOut_D
I/O handle: 13
TID: 1823
Standby: yes
Sample rate: 44100 Hz
HAL frame count: 2720
HAL format: 0x1 (pcm16)
HAL buffer size: 10880 bytes
Channel count: 2
Channel mask: 0x00000003 (front-left, front-right)
Processing format: 0x1 (pcm16)
Processing frame size: 4 bytes
Pending config events: none
Output device: 0x2 (SPEAKER)
Input device: 0 (NONE)
Audio source: 0 (default)
Normal frame count: 2720
Last write occurred (msecs): 2540304
Total writes: 4459
Delayed writes: 0
Blocked in write: no
Suspend count: 0
Sink buffer : 0xae054000
Mixer buffer: 0xae072000
Effect buffer: 0xae057000
Fast track availMask=0xfe
Standby delay ns=3000000000
AudioStreamOut: 0xae548150 flags 0x2 (PRIMARY)
Frames written: 12128480
Suspended frames: 0
Hal stream dump:
Thread throttle time (msecs): 1037
AudioMixer tracks: 0x00000001
Master mono: off
FastMixer not initialized
Stream volumes in dB: 0:-5.9, 1:-6, 2:0, 3:0, 4:0, 5:0, 6:0, 7:-6, 8:-6, 9:0, 10:0, 11:0, 12:0
Normal mixer raw underrun counters: partial=0 empty=0
1 Tracks of which 0 are active
Name Active Client Type Fmt Chn mask Session fCount S F SRate L dB R dB Server Main buf Aux Buf Flags UndFrmCnt
0 no 2404 1 00000001 00000003 9 4512 S 1 48000 -inf -inf 0005B6E0 0xae054000 0x0 0x600 0
0 Effect Chains
USB audio module:
No output streams.
No input streams.
Reroute submix audio module:
route[0] rate in=0 out=0, addr=[]
route[1] rate in=0 out=0, addr=[]
route[2] rate in=0 out=0, addr=[]
route[3] rate in=0 out=0, addr=[]
route[4] rate in=0 out=0, addr=[]
route[5] rate in=0 out=0, addr=[]
route[6] rate in=0 out=0, addr=[]
route[7] rate in=0 out=0, addr=[]
route[8] rate in=0 out=0, addr=[]
route[9] rate in=48000 out=48000, addr=[]
3. Sehen Sie sich ALSA PCM-Geräte an
Um die derzeit im System vorhandenen ALSA PCM-Geräte anzuzeigen, verwenden Sie den folgenden Befehl:
XXX:/data/data # cat /proc/asound/pcm
00-00: SUNXI-CODEC sun8iw11codec-0 : : playback 1 : capture 1
4. Listen Sie alle Soundkarten auf
Um alle Soundkarten im System anzuzeigen, verwenden Sie den folgenden Befehl:
XXX:/data/data # cat /proc/asound/cards
0 [audiocodec ]: audiocodec - audiocodec
audiocodec
1 [fmidi ]: MIDI Gadget - f_midi
MIDI Gadget
5. Verwenden Sie das Tinyalsa-Tool
tinyalsa
Ist ein Tool zur Interaktion mit der ALSA-Schnittstelle. Um alle Mixer-Steuerelemente aufzulisten, verwenden Sie:
XXX:/ # tinymix
Mixer name: 'audiocodec'
Number of controls: 48
ctl type num name value
0 ENUM 1 codec hub mode hub_disable
1 INT 1 digital volume 63
2 INT 1 Headphone volume 59
3 INT 2 LINEIN Mixer volume 3 3
4 INT 1 FM gain volume 3
5 INT 1 LINEIN gain volume 3
6 INT 2 MIC gain volume 3 3
7 INT 1 phoneout volume 3
8 INT 1 MIC1 boost volume 4
9 INT 1 MIC2 boost volume 4
10 INT 1 ADC gain volume 3
11 ENUM 1 MIC2 Mux MIC2IN
12 ENUM 1 HPL Mux DAC
13 ENUM 1 HPR Mux DAC
14 BOOL 1 Phone Out Mixer LOMIX Switch Off
15 BOOL 1 Phone Out Mixer ROMIX Switch Off
16 BOOL 1 Phone Out Mixer MIC2 Boost Switch Off
17 BOOL 1 Phone Out Mixer MIC1 Boost Switch Off
18 BOOL 1 Right Input Mixer LOMIX Switch Off
19 BOOL 1 Right Input Mixer ROMIX Switch Off
20 BOOL 1 Right Input Mixer FMR Switch Off
21 BOOL 1 Right Input Mixer LINEINR Switch Off
22 BOOL 1 Right Input Mixer LINEINLR Switch Off
23 BOOL 1 Right Input Mixer MIC2 Boost Switch On
24 BOOL 1 Right Input Mixer MIC1 Boost Switch Off
25 BOOL 1 Left Input Mixer ROMIX Switch Off
26 BOOL 1 Left Input Mixer LOMIX Switch Off
27 BOOL 1 Left Input Mixer FML Switch Off
28 BOOL 1 Left Input Mixer LINEINL Switch Off
29 BOOL 1 Left Input Mixer LINEINLR Switch Off
30 BOOL 1 Left Input Mixer MIC2 Boost Switch On
31 BOOL 1 Left Input Mixer MIC1 Boost Switch On
32 BOOL 1 Right Output Mixer DACL Switch Off
33 BOOL 1 Right Output Mixer DACR Switch On
34 BOOL 1 Right Output Mixer FMR Switch Off
35 BOOL 1 Right Output Mixer LINEINR Switch Off
36 BOOL 1 Right Output Mixer LINEINLR Switch Off
37 BOOL 1 Right Output Mixer MIC2 Boost Switch Off
38 BOOL 1 Right Output Mixer MIC1 Boost Switch Off
39 BOOL 1 Left Output Mixer DACR Switch Off
40 BOOL 1 Left Output Mixer DACL Switch On
41 BOOL 1 Left Output Mixer FML Switch Off
42 BOOL 1 Left Output Mixer LINEINL Switch Off
43 BOOL 1 Left Output Mixer LINEINLR Switch Off
44 BOOL 1 Left Output Mixer MIC2 Boost Switch Off
45 BOOL 1 Left Output Mixer MIC1 Boost Switch Off
46 BOOL 1 Headphone Switch On
47 BOOL 1 Phoneout Speaker Switch Off
6. Audiobezogene Protokolle anzeigen
Mithilfe logcat
von Tools können Sie die Protokolle im Zusammenhang mit Systemaudio überprüfen, um festzustellen, ob Probleme oder Fehler vorliegen:
logcat | grep -i audio
7. Sehen Sie sich die Kernel-Protokolle an
dmesg
Mit dem Befehl können Sie sich das Kernel-Protokoll ansehen und prüfen, ob es Probleme mit dem Audiotreiber gibt:
dmesg | grep -i audio
Zusammenfassen
Durch diesen Prozess habe ich gelernt, wie man den Soundkartentreiber der Allwinner-Android-Plattform zum Aufzeichnen und Abspielen von Audio verwendet, insbesondere wie man MIC1 als Aufnahmeeingangsquelle verwendet. Ich habe auch gelernt, wie man Tinyalsa als Tool zum Anzeigen und Einstellen von Ton verwendet Kartenparameter und Geräte.
Ich hoffe, dieser Blog hat Ihnen geholfen. Wenn Sie Fragen oder Vorschläge haben, hinterlassen Sie diese bitte im Kommentarbereich. Danke!