DART-6UL/VAR-SOM-MX7 Audio record play
Due to End-of-Life (EOL), the Cirrus Logic WM8731 audio codec has been replaced by the Cirrus Logic WM8904.
Variscite is updating all relevant software repositories and recommends impacted users to upgrade to the latest software version or to update their U-Boot and kernel to the latest commit ID of the branch they are already based on.
For details, see the changelogs:
Get Information on the Sound Cards
Installed Sound Cards
To check the installed devices for different codecs, use:
# cat /proc/asound/cards
Example outputs:
- WM8731 codec:
0 [wm8731audio ]: wm8731-audio - wm8731-audio wm8731-audio
- WM8904 codec:
0 [wm8904audio ]: simple-card - wm8904-audio wm8904-audio
List Available Playback Devices
To list playback device names, use:
# aplay -L
Example outputs:
- WM8731 codec:
null Discard all samples (playback) or generate zero samples (capture) sysdefault:CARD=wm8731audio wm8731-audio, Default Audio Device
- WM8904 codec:
null Discard all samples (playback) or generate zero samples (capture) sysdefault:CARD=wm8904audio wm8904-audio, 308a0000.sai-wm8904-hifi wm8904-hifi-0 Default Audio Device
Audio Playback
Set PCM Volume
The main volume of the audio codec can be adjusted using `amixer`. The volume range varies by codec:
- WM8731 codec: `0-127`
- WM8904 codec: `0-63`
To set the maximum volume for each codec, use:
# amixer set Master 127 # For WM8731 # amixer set Headphone 63 # For WM8904
For WM8731, also enable the output mixer:
# amixer set 'Output Mixer HiFi' on
Play Audio
To play a sample audio file:
# aplay /usr/share/sounds/alsa/Front_Center.wav
Example Outputs
- WM8731 codec:
# amixer set Master 125 Simple mixer control 'Master',0 Capabilities: pvolume Playback channels: Front Left - Front Right Limits: Playback 0 - 127 Mono: Front Left: Playback 125 [98%] [4.00dB] Front Right: Playback 125 [98%] [4.00dB] # 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
- WM8904 codec:
# amixer set Headphone 63 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: 63 [100%] [6.00dB] Playback [on] Front Right: 63 [100%] [6.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 Capture Volume
To adjust the recording volume, use:
- WM8731 codec:
# amixer set 'Capture' 22
- WM8904 codec:
# amixer set 'Capture' 31
Record and Playback Audio
To record 10 seconds of audio and play it back:
# arecord -f cd -d 10 test.wav # aplay test.wav
Example Outputs
- WM8731 codec:
# 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
- WM8904 codec:
# 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
Running `amixer` without parameters will show all available controls.
For example:
- WM8731 codec:
# amixer Simple mixer control 'Master',0 Capabilities: pvolume Playback channels: Front Left - Front Right Limits: Playback 0 - 127 Mono: Front Left: Playback 125 [98%] [4.00dB] Front Right: Playback 125 [98%] [4.00dB] ... Simple mixer control 'Capture',0 Capabilities: cvolume Capture channels: Front Left - Front Right Limits: Capture 0 - 31 Front Left: Capture 31 [100%] [12.00dB] Front Right: Capture 31 [100%] [12.00dB] ...
- WM8904 codec:
# 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: 63 [100%] [6.00dB] Playback [on] Front Right: 63 [100%] [6.00dB] Playback [on] ... Simple mixer control 'Capture',0 Capabilities: cvolume cswitch Capture channels: Front Left - Front Right Limits: Capture 0 - 31 Front Left: Capture 31 [100%] [on] Front Right: Capture 31 [100%] [on] ...
Get and Set Control Values
Use the following amixer commands to check and adjust mixer controls (from amixer --help):
amixer sset sID P # Set contents for one mixer simple control amixer sget sID # Get contents for one mixer simple control
Example: Checking Capture Volume
- WM8731 codec:
# amixer sget 'Capture' Simple mixer control 'Capture',0 Capabilities: cvolume Capture channels: Front Left - Front Right Limits: Capture 0 - 31 Front Left: Capture 31 [100%] [12.00dB] Front Right: Capture 31 [100%] [12.00dB]
- WM8904 codec:
# amixer sget 'Capture' Simple mixer control 'Capture',0 Capabilities: cvolume cswitch Capture channels: Front Left - Front Right Limits: Capture 0 - 31 Front Left: Capture 31 [100%] [on] Front Right: Capture 31 [100%] [on]
Example: Setting Capture Volume to 81%
- WM8731 codec:
# amixer sset 'Capture' 25 Simple mixer control 'Capture',0 Capabilities: cvolume Capture channels: Front Left - Front Right Limits: Capture 0 - 31 Front Left: Capture 25 [81%] [3.00dB] Front Right: Capture 25 [81%] [3.00dB]
- WM8904 codec:
# 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]
Headphone DAC Gain (WM8731) and Output Control (WM8904)
For WM8731, the HP DAC gain is set using `'Capture'` (range 0 - 118 for 0-100%).
For WM8904, the Headphone and Line Output volume can be controlled with:
# amixer sset 'Headphone' 63 # 100% volume # amixer sset 'Line Output' 57 # 90% volume
Example output:
# amixer sget 'Headphone' 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: 63 [100%] [6.00dB] Playback [on] Front Right: 63 [100%] [6.00dB] Playback [on]
Save / Restore System's Audio Settings
The `alsactl` command can be used to save and restore all ALSA mixer settings. This works for any supported audio codec, including WM8731 and WM8904.
To save the current ALSA configuration:
# alsactl store -f 123.conf
To restore a previously saved configuration:
# alsactl restore -f 123.conf
This allows that audio settings remain persistent across reboots or resets.
Options
store <card> Save current driver setup for one or all sound cards to a configuration file. restore <card> Load the saved driver setup from a configuration file.