Android デバイスでオーディオを開発すると、さまざまな問題が発生することがあります。そのうちの1つは、録音音量が小さすぎることです。この記事では、この問題を診断して解決する方法を検討し、tinalsa ツールの使用方法を簡単に紹介します。
問題の説明
最近、Allwinner Android プラットフォームを使用しているのですが、顧客から MIC の要件があり、オーディオの録音と再生の機能が必要です。Allwinner プラットフォームのサウンド カード ドライバーを見つけました。これは、MIC1 と MIC2 という 2 つのマイク入力を提供します。MIC2 の代わりに MIC1 を録音入力ソースとして使用したいと考えています。
サウンドカード構成ファイル、ミキサーコントロール、録音コマンドの変更など、さまざまなことを試しましたが、成功しませんでした。
解決
いくつか検索して試した結果、サウンドカード設定ファイル、ミキサー制御および録音コマンドを変更して、MIC1 を録音入力ソースとして使用し、MIC 録音とアンプのヘッドフォンの音量を増やすという解決策を見つけました。
サウンドカード構成ファイルを変更する
サウンド カード構成ファイルは、サウンド カードのパラメータとデバイスを定義するために使用されるファイルで、通常は 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>
ソースコードの場所:hardware/aw/audio/codec_paths.xml
このコンテンツは、Android オーディオ システムのオーディオ パス構成を定義します。これらのパス構成は通常、ハードウェアとソフトウェアの間でオーディオ信号がどのように流れるかを決定するために使用されます。
-
パスがアクティブになると
media-main-mic
、左右の入力ミキサーの MIC2 ゲイン スイッチがオンになり、MIC2 オーディオ信号がオーディオ処理チェーンに入力できるようになります。 -
パスがアクティブになると
media-main-mic-close
、左右の入力ミキサーの両方で MIC2 のゲイン スイッチがオフになり、MIC2 のオーディオ信号がオーディオ処理チェーンに入るのが防止されます。
正常なマシンではファイルを比較すると と表示されましたMIC1
が、異常なマシンでは と表示されていたので、MIC2
これを変更するのが有効だと思います。
ミキサーコントロールを変更する
tinyalsa
そこで、実行する必要がなければ、昔使ったデバッグを思い出しましたmmm external/tinyalsa/
。
ミキサー コントロールは、入力ソース、出力デバイス、ゲイン、ボリュームなどのサウンド カード設定を制御するために使用されるパラメーターです。ミキサー コントロールを変更するには、コマンド ライン ツールを使用してこれらのパラメーターを表示および設定する必要があります。Allwinner プラットフォームでは、tinyalsa ツールを使用してこの機能を実装できます。tinyalsa は実際には、オーディオ デバイスをテストおよび制御するためのいくつかのコマンド ライン ツールを提供する簡素化された ALSA ライブラリです。
tinyalsa を使用して、MIC 録音やアンプのヘッドフォン音量パラメータの調整など、ミキサー コントロールを変更します。tinymix コマンドを使用して、これらのコントロールの値を変更できます。たとえば、次のようになります。
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
これらは、MIC の録音およびアンプのヘッドフォンのサウンド レベルに影響を与える可能性があります。
- デジタル ボリューム: このコントロールはデジタル ボリュームを調整できます。範囲は 0 ~ 63 です。値が大きいほど、音量は大きくなります。
- ヘッドフォンの音量: このコントロールはヘッドフォンの音量を調整できます。範囲は 0 ~ 63 です。値が大きいほど、音量は大きくなります。
- MIC ゲインボリューム: このコントロールは MIC のゲインを調整でき、それぞれ MIC1 と MIC2 に対応する 2 つのチャンネルがあります。範囲は 0 ~ 7 で、値が大きいほどゲインも大きくなります。
- MIC1 ブーストボリューム: このコントロールは MIC1 の追加ゲインを調整できます。範囲は 0 ~ 7 で、値が大きいほどゲインが大きくなります。
- MIC2 ブーストボリューム: このコントロールは MIC2 の追加ゲインを調整できます。範囲は 0 ~ 7 で、値が大きいほどゲインが大きくなります。
- ADC ゲインボリューム: このコントロールは ADC のゲインを調整できます。範囲は 0 ~ 7 です。値が大きいほど、ゲインも大きくなります。
これらのコマンドは、これらのコントロールの値を最大値に設定し、それによって MIC 録音とアンプのヘッドフォンの音量を一時的かつ迅速に増加させます。次に、実際の状況に応じてコードのこれらの値を調整します。
記録コマンドの変更
録音コマンドはオーディオ ファイルを録音するためのコマンド ライン ツールで、サンプリング レート、チャンネル数、フォーマット、長さなどのパラメーターを指定できます。Allwinner プラットフォームでは、tinyalsa ツールを使用してこの機能を実装できます。
tinyalsa を使用して記録コマンドを変更するには、次のコマンドを実行する必要があります。
tinycap -D 0 -d mic -c 2 -r 44100 -b 16 -t 10 /sdcard/test.wav
このコマンドは、サウンド カード 0、デュアル チャネル、44.1 kHz、16 ビットのマイク デバイスを使用して、10 秒のオーディオ ファイルを /sdcard/test.wav に録音することを意味します。
結果検証
上記の変更後、MIC2 を使用してオーディオを録音および再生できるようになります。結果は次のコマンドを使用して確認できます。
tinyplay -D 0 /sdcard/test.wav
このコマンドは、サウンド カード 0 を使用して /sdcard/test.wav ファイルを再生することを意味します。録音した音声コンテンツは聞くことができ、音はクリアで大音量です。
これまでのところ私の問題は解決されていますが、
その他のオーディオ デバッグ方法
オーディオ関連の問題をデバッグするための一般的なコマンドと方法をいくつか示します。
1.オーディオプロファイルのチェック
Allwinner などの特定のプラットフォームでは、オーディオ設定用の特定の構成ファイルまたはツールが存在する場合があります。/system/etc
これらのファイルは、 または他の関連ディレクトリにあります。
2.dumpsys
コマンドを使用する
dumpsys
システムサービスに関する詳細情報を提供します。オーディオ システムに関する詳細情報を取得するには、次のコマンドを使用できます。
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. ALSA PCM 機器を表示する
現在システム上にある ALSA PCM デバイスを表示するには、次のコマンドを使用します。
XXX:/data/data # cat /proc/asound/pcm
00-00: SUNXI-CODEC sun8iw11codec-0 : : playback 1 : capture 1
4.すべてのサウンドカードをリストします。
システム内のすべてのサウンド カードを表示するには、次のコマンドを使用します。
XXX:/data/data # cat /proc/asound/cards
0 [audiocodec ]: audiocodec - audiocodec
audiocodec
1 [fmidi ]: MIDI Gadget - f_midi
MIDI Gadget
5. tinyalsaツールを使用する
tinyalsa
ALSA インターフェイスと対話するためのツールです。すべてのミキサー コントロールをリストするには、次を使用します。
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. オーディオ関連のログを表示する
ツールを使用するとlogcat
、システム オーディオに関連するログをチェックして、問題やエラーがないかどうかを確認できます。
logcat | grep -i audio
7. カーネルログの表示
dmesg
次のコマンドを使用してカーネル ログを調べ、オーディオ ドライバーに問題があるかどうかを確認できます。
dmesg | grep -i audio
要約する
このプロセスを通じて、Allwinner Android プラットフォームのサウンド カード ドライバーを使用してオーディオを録音および再生する方法、特に MIC1 を録音入力ソースとして使用する方法を学びました。また、サウンドを表示および設定するためのツールとして tinyalsa を使用する方法も学びました。カードのパラメータとデバイス。
このブログがお役に立てば幸いです。ご質問やご提案がございましたら、コメント欄に残してください。ありがとう!