Linux Audio record play: Difference between revisions

From Variscite Wiki
No edit summary
(6 intermediate revisions by 2 users not shown)
Line 3: Line 3:
--> {{#lst:Yocto_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:Yocto_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:B2QT_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:B2QT_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#vardefine:SUPPORT_WM8904_DRC | <!--
-->    {{#switch:{{#var:HARDWARE_NAME}} | <!--
-->      DART-MX8M-PLUS = {{#ifexpr: {{#var:YOCTO_VERSION}} > 3.2 | yes | no }} | <!--
-->      {{#ifexpr: {{#var:YOCTO_VERSION}} > 3.0 | yes | no }}  <!--
-->    }} <!--
--> }} <!--
--> {{PageHeader|{{#var:HARDWARE_NAME}} Audio Record/Play}} {{DocImage|category1=Yocto|category2={{#var:HARDWARE_NAME}}}} __toc__
--> {{PageHeader|{{#var:HARDWARE_NAME}} Audio Record/Play}} {{DocImage|category1=Yocto|category2={{#var:HARDWARE_NAME}}}} __toc__
= Get information on the Sound Cards =
= Get information on the Sound Cards =
Line 209: Line 215:
Capture  currently now set to 81%.
Capture  currently now set to 81%.


{{#ifeq: {{#var:SUPPORT_WM8904_DRC}} | yes |
== Enabling the Dynamic Rate Controller (DRC) ==
== Enabling the Dynamic Rate Controller (DRC) ==


Line 217: Line 224:
In latest kernels 5.4.x, dedicated patches have been introduced to provide the available parameters shown in the applications section of WAN0215.
In latest kernels 5.4.x, dedicated patches have been introduced to provide the available parameters shown in the applications section of WAN0215.


To enable DRC, run
To enable DRC, run:


   amixer set 'DRC' on
   amixer set 'DRC' on


To select the DRM mode, run
To select the DRM mode, run:


   amixer set 'DRC Mode' 'tradition'
   amixer set 'DRC Mode' 'tradition'
Line 232: Line 239:
* "music": uses even gentler compression characteristics and uses a higher knee threshold to limit the gain to around 20dB
* "music": uses even gentler compression characteristics and uses a higher knee threshold to limit the gain to around 20dB


Additional modes may be added, providing the relevant registers configurations in the [https://github.com/varigit/linux-imx/blob/5.4-2.1.x-imx_var01/arch/arm64/boot/dts/freescale/imx8mm-var-som.dtsi#L590-L602 device tree].
Additional modes may be added, providing the relevant registers configurations in arch/arm64/boot/dts/freescale/{{#var:DEFAULT_DTB}} under kernel source tree:
<pre>
wm8904: codec@1a {
...
num-drc-cfgs = <5>; /* must match the number of items in the following 2 lists */
drc-cfg-names = "default", "peaklimiter", "tradition", "soft", "music";
drc-cfg-regs =
/* coded default: KNEE_IP = KNEE_OP = 0, HI_COMP = LO_COMP = 1  */
<0x01af 0x3248 0x0000 0x0000>,
/* coded default: KNEE_IP = -24, KNEE_OP = -6, HI_COMP = 1/4, LO_COMP = 1 */
<0x04af 0x324b 0x0010 0x0408>,
/* coded default: KNEE_IP = -42, KNEE_OP = -3, HI_COMP = 0, LO_COMP = 1 */
<0x04af 0x324b 0x0028 0x0704>,
/* coded default: KNEE_IP = -45, KNEE_OP = -9, HI_COMP = 1/8, LO_COMP = 1 */
<0x04af 0x324b 0x0018 0x078c>,
/* coded default: KNEE_IP = -30, KNEE_OP = -10.5, HI_COMP = 1/4, LO_COMP = 1 */
<0x04af 0x324b 0x0010 0x050e>;
...
};
</pre>
| }}


= Save/restore system's audio settings =
= Save/restore system's audio settings =

Revision as of 14:38, 10 October 2021

DART-MX8M Audio Record/Play

Get information on the Sound Cards

Installed devices:

# cat /proc/asound/cards
 0 [wm8904audio      ]: wm8904-audio - wm8904-audio
                      wm8904-audio

List device names for playback:

# aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
sysdefault:CARD=wm8904audio
    wm8904-audio, 
    Default Audio Device

Audio Playback

Set PCM volume (main volume of audio codec), range :0-63

# amixer set Headphone 35

Play audio:

# aplay /usr/share/sounds/alsa/Front_Center.wav

Example:

# amixer set set Headphone 35
Simple mixer control 'Headphone',0
  Capabilities: volume pswitch
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 63
  Front Left: 35 [56%] [-22.00dB] Playback [on]
  Front Right: 35 [56%] [-22.00dB] Playback [on]

# aplay /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

Audio Record and Play, Line-in Jack

Set PCM volume (main volume of audio codec), range :0-63

# amixer set Headphone 35

Set capture input source to ADC

# amixer set 'Capture Input' ADC

Set DMIC Mux to DMIC2

# amixer set 'DMIC Mux' DMIC2

Record CD quality audio for 10 seconds into file test.wav

# arecord -f cd -d 10 test.wav

Play the recorded file

# aplay test.wav 

Example:

# amixer set set Headphone 35
Simple mixer control 'Headphone',0
  Capabilities: volume pswitch
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 63
  Front Left: 35 [56%] [-22.00dB] Playback [on]
  Front Right: 35 [56%] [-22.00dB] Playback [on]
# amixer set 'Capture Input' ADC
Simple mixer control 'Capture Input',0
  Capabilities: enum
  Items: 'ADC' 'DMIC'
  Item0: 'ADC'
# amixer set 'DMIC Mux' DMIC2
Simple mixer control 'DMIC Mux',0
  Capabilities: enum
  Items: 'DMIC1' 'DMIC2'
  Item0: 'DMIC2'
# arecord -f cd -d 10 test.wav
Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
# aplay test.wav
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

Audio Record and Play, DMIC

Set Headphones volume, range :0-63

# amixer set Headphone 35

Set capture input source to DMIC

# amixer set 'Capture Input' DMIC

Set DMIC Mux to DMIC1

# amixer set 'DMIC Mux' DMIC1

Record CD quality audio for 10 seconds into file test.wav

# arecord -f cd -d 10 test.wav

Play the recorded file

# aplay test.wav 

Example:

# amixer set set Headphone 35
Simple mixer control 'Headphone',0
  Capabilities: volume pswitch
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 63
  Front Left: 35 [56%] [-22.00dB] Playback [on]
  Front Right: 35 [56%] [-22.00dB] Playback [on]
# amixer set 'Capture Input' DMIC
Simple mixer control 'Capture Input',0
  Capabilities: enum
  Items: 'ADC' 'DMIC'
  Item0: 'DMIC'
# amixer set 'DMIC Mux' DMIC1
Simple mixer control 'DMIC Mux',0
  Capabilities: enum
  Items: 'DMIC1' 'DMIC2'
  Item0: 'DMIC1'
# arecord -f cd -d 10 test.wav
Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
# aplay test.wav
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

Advanced Controls

amixer without a parameter will show all available controls. For example:

# amixer
Simple mixer control 'Headphone',0
  Capabilities: volume pswitch
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 63
  Front Left: 35 [56%] [-22.00dB] Playback [on]
  Front Right: 35 [56%] [-22.00dB] Playback [on]
Simple mixer control 'Headphone ZC',0
  Capabilities: pswitch
  Playback channels: Front Left - Front Right
  Mono:
  Front Left: Playback [on]
  Front Right: Playback [on]
Simple mixer control 'Line Output',0
  Capabilities: volume pswitch
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 63
  Front Left: 57 [90%] [0.00dB] Playback [on]
  Front Right: 57 [90%] [0.00dB] Playback [on]
Simple mixer control 'Line Output ZC',0
  Capabilities: pswitch
  Playback channels: Front Left - Front Right
  Mono:
  Front Left: Playback [on]
  Front Right: Playback [on]
Simple mixer control 'Capture',0
  Capabilities: cvolume cswitch
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 31
  Front Left: Capture 24 [77%] [on]
  Front Right: Capture 24 [77%] [on]
Simple mixer control 'Capture Input',0
  Capabilities: enum
  Items: 'ADC' 'DMIC'
  Item0: 'DMIC'
...

Options:

amixer   sset sID P      set contents for one mixer simple control
amixer   sget sID        get contents for one mixer simple control

For example:

# amixer sget 'Capture'
Simple mixer control 'Capture',0
  Capabilities: cvolume cswitch
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 31
  Front Left: Capture 24 [77%] [on]
  Front Right: Capture 24 [77%] [on]
# amixer sset 'Capture' 25
Simple mixer control 'Capture',0
  Capabilities: cvolume cswitch
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 31
  Front Left: Capture 25 [81%] [on]
  Front Right: Capture 25 [81%] [on]

Capture currently now set to 81%.


Save/restore system's audio settings

alsactl store stores all alsamixer settings into a file
alsctl Options:

  store     <card>  save current driver setup for one or each soundcards
                      to configuration file
  restore   <card>  load current driver setup for one or each soundcards
                      from configuration file

Example:

# alsactl store -f 123.conf
# alsactl restore -f 123.conf