Skip to main content

Waveshare WM8960 Audio HAT

Product Overview​

The WM8960 Audio HAT is an audio adapter board produced by Waveshare Electronics, featuring the WM8960 Codec. It supports dual-channel microphone recording and audio playback. The board is shown below:

image-audio-wm8960

For more details, refer to the WM8960 Audio HAT Wiki.

Installation​

  • Hardware Setup​

Connect the audio HAT to the 40-pin header of the RDK X5 as shown below:
image-wm8960-audio-hat-rkd-x5-setup-2

  • Software Configuration​

  1. Use srpi-config to configure the audio board.
    Go to 3 Interface Options -> I5 Audio
    Select WM8960 Audio Driver HAT: image-audio-codec-select-wm8960-hat-rdkx5

  2. Follow the prompt to reboot, or run sync && reboot to restart the board. If cat /proc/asound/cards shows a duplexaudioi2s1 sound card, the installation was successful.

root@ubuntu:~# cat /proc/asound/cards 
0 [duplexaudioi2s1]: simple-card - duplex-audio-i2s1
duplex-audio-i2s1
1 [duplexaudio ]: simple-card - duplex-audio
duplex-audio
  • Uninstallation​

  1. Use srpi-config to configure the audio board.
    Go to 3 Interface Options -> I5 Audio
    Select UNSET to uninstall the audio driver and related configurations.

  2. Remove the HAT from the board.

Usage​

Check if the sound card exists and verify the device number.

Confirm whether the sound card is registered via the cat /proc/asound/cards command (mentioned above):

root@ubuntu:~# cat /proc/asound/cards 
0 [duplexaudioi2s1]: simple-card - duplex-audio-i2s1
duplex-audio-i2s1
1 [duplexaudio ]: simple-card - duplex-audio
duplex-audio

Confirm logical devices via the cat /proc/asound/devices command:

root@ubuntu:~# cat /proc/asound/devices
2: [ 0- 0]: digital audio playback
3: [ 0- 1]: digital audio capture
4: [ 0] : control
5: [ 1- 0]: digital audio playback
6: [ 1- 0]: digital audio capture
7: [ 1] : control
33: : timer

Check the actual device files in user space using the ls /dev/snd/ command:

root@ubuntu:~# ls /dev/snd/
by-path controlC0 controlC1 pcmC0D0p pcmC0D1c pcmC1D0c pcmC1D0p timer

From the above, and with reference to the Onboard Earphone Audio Port, you can confirm that sound card 0 corresponds to the WM8960 Audio Driver HAT node. The devices exist, with device numbers 0-0 and 0-1. The actual devices to operate are pcmC0D0p and pcmC0D1c.

The onboard sound card is card 1, device number 1-0, which is not used here.

This audio HAT requires audio routing configuration before each function. The following commands must be run before each scenario.

Recording Operations​

Audio Routing and Gain Configuration Before Recording​

Before recording, it is necessary to correctly configure the audio input path and gain to ensure recording quality. The following commands sequentially set the input gain for left/right channels, recording volume, input path switches, etc.

# Set left/right channel input gain
tinymix -D 0 set 'Left Input Boost Mixer LINPUT1 Volume' 3
tinymix -D 0 set 'Right Input Boost Mixer RINPUT1 Volume' 3

# Adjust gain according to actual conditions (reduce appropriately if feedback occurs)
tinymix -D 0 set 'Left Input Boost Mixer LINPUT1 Volume' 1
tinymix -D 0 set 'Right Input Boost Mixer RINPUT1 Volume' 1

# Set recording volume
tinymix -D 0 set 'Capture Volume' 40,40
tinymix -D 0 set 'ADC PCM Capture Volume' 200,200

# Turn on input path switches
tinymix -D 0 set 'Left Boost Mixer LINPUT1 Switch' 1
tinymix -D 0 set 'Right Boost Mixer RINPUT1 Switch' 1
tinymix -D 0 set 'Left Input Mixer Boost Switch' 1
tinymix -D 0 set 'Right Input Mixer Boost Switch' 1

# Turn on recording switch
tinymix -D 0 set 'Capture Switch' 1,1

Start Recording​

Use the tinycap command for recording:

tinycap ./2chn_test.wav -D 0 -d 0 -c 2 -b 16 -r 48000 -p 512 -n 4 -t 5

After recording completes, the 2chn_test.wav file will be generated.

Playback Operation​

Speaker Playback (Dual Channel)​

  • Audio output path and volume need to be configured before playback:
# Enable left and right channel PCM playback switches
tinymix -D 0 set 'Left Output Mixer PCM Playback Switch' 1
tinymix -D 0 set 'Right Output Mixer PCM Playback Switch' 1

# Set speaker volume
tinymix -D 0 set 'Speaker DC Volume' 3
tinymix -D 0 set 'Speaker AC Volume' 3
tinymix -D 0 set 'Speaker Playback Volume' 127, 127
tinymix -D 0 set 'Playback Volume' 255, 255

# Ensure output switches are enabled again
tinymix -D 0 set 'Left Output Mixer PCM Playback Switch' 1
tinymix -D 0 set 'Right Output Mixer PCM Playback Switch' 1

# Play the recording file
tinyplay ./2chn_test.wav -D 0 -d 0
  • Simultaneous headphone and speaker playback
tinymix -D  0 set 'Headphone Playback Volume' 80,80
tinymix -D 0 set 'Playback Volume' 220,220
tinymix -D 0 set 'Speaker DC Volume' 4
tinymix -D 0 set 'Left Output Mixer PCM Playback Switch' 1
tinymix -D 0 set 'Right Output Mixer PCM Playback Switch' 1
tinyplay ./2chn_test.wav -D 0 -d 0
  • Headphone playback only (speaker muted)
tinymix -D  0 set 'Headphone Playback Volume' 115,115
tinymix -D 0 set 'Speaker Playback Volume' 0,0
tinymix -D 0 set 'Playback Volume' 244,244
tinymix -D 0 set 'Speaker DC Volume' 4
tinymix -D 0 set 'Left Output Mixer PCM Playback Switch' 1
tinymix -D 0 set 'Right Output Mixer PCM Playback Switch' 1
tinyplay ./2chn_test.wav -D 0 -d 0

FAQ​

Q1: Hardware and software are working, audio path is normal, speakers have sound, but headphones are silent.

A1: The headphone volume may be too low. Increase the headphone volume, for example:
tinymix -D 0 set 'Headphone Playback Volume' 115,115

See more questions here