Linux Audio record play: Difference between revisions
No edit summary |
|||
Line 208: | Line 208: | ||
</pre> | </pre> | ||
Capture currently now set to 81%. | Capture currently now set to 81%. | ||
== Enabling the Dynamic Rate Controller (DRC) == | |||
The codec WM8904 provide a Dynamic Rate Controller that can be used to amplify the DMIC input using an Automatic Gain Control (AGC) configuration. | |||
The details of how the DRC works are available in the application note [https://statics.cirrus.com/pubs/appNote/WAN0215.pdf 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 | |||
amixer set 'DRC' on | |||
To select the DRM mode, run | |||
amixer set 'DRC Mode' 'tradition' | |||
The available 'DRC modes' are: | |||
* "default": the default settings upon reset | |||
* "peaklimiter": the signal level is unchanged for amplitudes below the knee, but sharply reduced for amplitudes above the knee. Normally the knee will be at a high amplitude e.g. around -6dB, so that the majority of the dynamic range is unchanged | |||
* "tradition": typical traditional ALC characteristic | |||
* "soft": used in applications where a gentler ALC characteristic is required, for example where both speech and music recording is required without reconfiguring compressor parameters | |||
* "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 device tree] | |||
= Save/restore system's audio settings = | = Save/restore system's audio settings = |
Revision as of 14:56, 4 August 2021
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%.
Enabling the Dynamic Rate Controller (DRC)
The codec WM8904 provide a Dynamic Rate Controller that can be used to amplify the DMIC input using an Automatic Gain Control (AGC) configuration.
The details of how the DRC works are available in the application note 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
amixer set 'DRC' on
To select the DRM mode, run
amixer set 'DRC Mode' 'tradition'
The available 'DRC modes' are:
- "default": the default settings upon reset
- "peaklimiter": the signal level is unchanged for amplitudes below the knee, but sharply reduced for amplitudes above the knee. Normally the knee will be at a high amplitude e.g. around -6dB, so that the majority of the dynamic range is unchanged
- "tradition": typical traditional ALC characteristic
- "soft": used in applications where a gentler ALC characteristic is required, for example where both speech and music recording is required without reconfiguring compressor parameters
- "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 device tree
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