Android は tinyalsa デバッグを通じてオーディオの録音と再生の問題を解決します

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ツールを使用する

tinyalsaALSA インターフェイスと対話するためのツールです。すべてのミキサー コントロールをリストするには、次を使用します。

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 を使用する方法も学びました。カードのパラメータとデバイス。

このブログがお役に立てば幸いです。ご質問やご提案がございましたら、コメント欄に残してください。ありがとう!

おすすめ

転載: blog.csdn.net/SHH_1064994894/article/details/133272500