Coder Social home page Coder Social logo

wm8960's Introduction

WM8960 driver for RaspberryPi

Pristine WM8960 Linux driver directly taken from Linux source tree. Based on d2912cb15bdda8ba4a5dd73396ad62641af2f520 commit of wm8960.c and wm8960.h files.

Compatible with recent versions of Raspbian (with kernel version > 4.18, e.g. Raspbian Buster).

Datasheet

WM8960's datasheet can be found here: https://statics.cirrus.com/pubs/proDatasheet/WM8960_v4.4.pdf

Installation

Clone source code. Optionally edit overlay file to suit your hardware. Compile and install with

make
sudo make install

Makefile will automatically edit /boot/config.txt and add/enable if required the following params and overlays:

dtparam=i2c_arm=on
dtoverlay=i2s-mmap
dtparam=i2s=on
dtoverlay=wm8960

You might want to review changes before rebooting.

After reboot, edit mixer settings with alsamixer. In particular you will probably want to enable switches "Left Output Mixer PCM" and "Right Output Mixer PCM" (cf schema on page 1 of datasheet) and push up the Headphone or Speaker volumes.

Overlay

wm8960 is our own overlay. It defines an ALSA sound card using built-in simple-sound-card driver and based on WM8960 codec. It is derived from https://github.com/respeaker/seeed-voicecard/blob/master/seeed-2mic-voicecard-overlay.dts

It defines the following overrides:

  • mclk_frequency clock frequency is set to 12 MHz.
  • alsaname defines the name of the card and defaults to wm8960.

For example, you can change ALSA name with the following line in /boot/config.txt:

dtoverlay=wm8960,alsaname=mycard

Known limitations

  • Some configuration switches are not exposed (e.g. MICBIAS level).
  • WM8960 can play sounds at 12 kHz and 24 kHz yet these frequencies are not reported as available. This is a Linux/ALSA limitation and would require additional code. ALSA plug interface will do the necessary conversion to 48 kHz.

wm8960's People

Contributors

f-laurens avatar guilhem avatar pguyot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

wm8960's Issues

Son grésillant (TagTagTag 2024)

Hello, tout d'abord bravo et merci pour le travail effectué sur les projets, c'est cool de découvrir une nouvelle communauté autant investie !

J'ouvre un ticket concernant un souci de lecture qui grésille, sur certains formats. D'après ce que j'ai pu lire à droite à gauche, les problèmes de sons étaient souvent liés au driver audio.

J'ai reçu aujourd'hui une carte du batch 2024, que j'ai configurée et installée en suivant scrupuleusement les instructions. Tout fonctionne parfaitement excepté la lecture audio.

J'ai pris quelques vidéos pour aider au diagnostic :

Lecture de la météo en français, puis en anglais (pas le même comportement!).
En français, seul le mot "degré" est entendu correctement.

PXL_20240514_164024939.4.mp4
PXL_20240514_164024939.5.mp4

Dernière vidéo, j'ai lancé deux commandes :

  • speaker-test -c2 -twav -l7 : Audio clair 💯
  • mpg123 file_example_MP3_1MG.mp3 : Son grésillant (le fichier utilisé est trouvable ici). En dehors des petits bzzz que l'on peut entendre sur toutes les vidéos, un gros bruit blanc reste actif quelques secondes après l'arrêt de la lecture.
PXL_20240514_164201431.mp4

Concernant ce que j'ai d'installé, voici ce que me liste l'interface Pynab :

CleanShot 2024-05-14 at 19 02 00@2x

J'ai tenté également de cloner/compiler puis installer la version la plus récente du driver sur la branche tagtagtag-sound, tout le processus se déroule sans souci, les grésillements sont toujours présents.

Je reste à dispo pour effectuer des tests si besoin !

Adafruit I2S mic driver Rpi

opencardev/snd-i2s_rpi#4

Paul I don't think the clocking and formatting info is right with the above and wondered if you ever get the interest would you lend your talents?

I may have a go of using this working repo to mangle the missing parts of snd-i2s_rpi but fingers crossed it will perk your interest as my mangling and code molesting skills are poor even to the level I refer.

amixer cset params to get you going

amixer -c "wm8960" cset numid=1 34,34
amixer -c "wm8960" cset numid=26 3
amixer -c "wm8960" cset numid=27 4
amixer -c "wm8960" cset numid=30 5
amixer -c "wm8960" cset numid=32 5
amixer -c "wm8960" cset numid=33 5
amixer -c "wm8960" cset numid=34 25
amixer -c "wm8960" cset numid=35 on
amixer -c "wm8960" cset numid=9 3
amixer -c "wm8960" cset numid=8 3
amixer -c "wm8960" cset numid=49 on
amixer -c "wm8960" cset numid=51 on
amixer -c "wm8960" cset numid=37 0
amixer -c "wm8960" cset numid=38 0
amixer -c "wm8960" cset numid=39 5
amixer -c "wm8960" cset numid=48 on
amixer -c "wm8960" cset numid=50 on
amixer -c "wm8960" cset numid=54 on
amixer -c "wm8960" cset numid=16 5
amixer -c "wm8960" cset numid=15 4
alsactl store

Driver build fails with kernel 5.15.xx

/usr/bin/git pull -v
From https://github.com/pguyot/wm8960
 = [up to date]      tagtagtag-sound -> origin/tagtagtag-sound
Already up to date.
Building wm8960 driver for kernel 5.15.30+.
/usr/bin/make KERNELRELEASE=5.15.30+ clean && /usr/bin/make KERNELRELEASE=5.15.30+ && /usr/bin/sudo /usr/bin/make KERNELRELEASE=5.15.30+ install && /usr/bin/make KERNELRELEASE=5.15.30+ clean
make -C /usr/src/linux-headers-5.15.30+ M=/home/pi/wm8960 clean
make[1]: Entering directory '/usr/src/linux-headers-5.15.30+'
  CLEAN   /home/pi/wm8960/Module.symvers
make[1]: Leaving directory '/usr/src/linux-headers-5.15.30+'
rm -f tagtagtag-mixerd tagtagtag-mixerd-test
cc -Wall -Werror tagtagtag-mixerd.c -lasound -lpthread -o tagtagtag-mixerd
make -C /usr/src/linux-headers-5.15.30+ M=/home/pi/wm8960 modules
make[1]: Entering directory '/usr/src/linux-headers-5.15.30+'
  CC [M]  /home/pi/wm8960/wm8960.o
/home/pi/wm8960/wm8960.c: In function ‘wm8960_configure_clocking’:
/home/pi/wm8960/wm8960.c:752:6: warning: unused variable ‘iface1’ [-Wunused-variable]
  752 |  u16 iface1 = snd_soc_component_read(component, WM8960_IFACE1);
      |      ^~~~~~
/home/pi/wm8960/wm8960.c: At top level:
/home/pi/wm8960/wm8960.c:1355:3: error: ‘struct snd_soc_dai_driver’ has no member named ‘symmetric_rates’; did you mean ‘symmetric_rate’?
 1355 |  .symmetric_rates = 1,
      |   ^~~~~~~~~~~~~~~
      |   symmetric_rate
/home/pi/wm8960/wm8960.c:1355:21: warning: initialization of ‘const struct snd_soc_cdai_ops *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
 1355 |  .symmetric_rates = 1,
      |                     ^
/home/pi/wm8960/wm8960.c:1355:21: note: (near initialization for ‘wm8960_dai.cops’)
/home/pi/wm8960/wm8960.c: In function ‘wm8960_hw_params’:
/home/pi/wm8960/wm8960.c:836:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
  836 |   if ((iface & 0x3) != 0) {
      |      ^
/home/pi/wm8960/wm8960.c:841:2: note: here
  841 |  default:
      |  ^~~~~~~
make[2]: *** [scripts/Makefile.build:277: /home/pi/wm8960/wm8960.o] Error 1
make[1]: *** [Makefile:1868: /home/pi/wm8960] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.15.30+'
make: *** [Makefile:16: all] Error 2

Make won't compile

I'm on Raspberry Pi OS Bookworm 64 bit and am getting these errors while running make:

wm8960/wm8960.c:1386:10: error: ‘const struct snd_soc_component_driver’ has no member named ‘non_legacy_dai_naming’; did you mean ‘legacy_dai_naming’?
 1386 |         .non_legacy_dai_naming  = 1,

wm8960/wm8960.c:1499:21: error: initialization of ‘void (*)(struct i2c_client *)’ from incompatible pointer type ‘int (*)(struct i2c_client *)’ [-Werror=incompatible-pointer-types]
 1499 |         .remove =   wm8960_i2c_remove,
      |                     ^~~~~~~~~~~~~~~~~

Current version is not compatible with Raspberry Pi kernel 5.10.xx+

From https://github.com/pguyot/wm8960
 = [up to date]      tagtagtag-sound -> origin/tagtagtag-sound
 = [up to date]      master          -> origin/master
Already up to date.
make -C /lib/modules/5.10.11+/build M=/home/pi/wm8960 clean
make[1]: Entering directory '/usr/src/linux-headers-5.10.11+'
make[1]: Leaving directory '/usr/src/linux-headers-5.10.11+'
rm -f tagtagtag-mixerd tagtagtag-mixerd-test
cc -Wall -Werror -lasound -lpthread tagtagtag-mixerd.c -o tagtagtag-mixerd
make -C /lib/modules/5.10.11+/build M=/home/pi/wm8960 modules
make[1]: Entering directory '/usr/src/linux-headers-5.10.11+'
scripts/Makefile.lib:8: 'always' is deprecated. Please use 'always-y' instead
  CC [M]  /home/pi/wm8960/wm8960.o
/home/pi/wm8960/wm8960.c: In function ‘wm8960_configure_clocking’:
/home/pi/wm8960/wm8960.c:745:15: error: implicit declaration of function ‘snd_soc_component_read32’; did you mean ‘snd_soc_component_read’? [-Werror=implicit-function-declaration]
  u16 iface1 = snd_soc_component_read32(component, WM8960_IFACE1);
               ^~~~~~~~~~~~~~~~~~~~~~~~
               snd_soc_component_read
/home/pi/wm8960/wm8960.c:745:6: warning: unused variable ‘iface1’ [-Wunused-variable]
  u16 iface1 = snd_soc_component_read32(component, WM8960_IFACE1);
      ^~~~~~
/home/pi/wm8960/wm8960.c: At top level:
/home/pi/wm8960/wm8960.c:1318:3: error: ‘const struct snd_soc_dai_ops’ has no member named ‘digital_mute’
  .digital_mute = wm8960_mute,
   ^~~~~~~~~~~~
/home/pi/wm8960/wm8960.c:1318:18: error: initialization of ‘int (*)(struct snd_pcm_substream *, struct snd_soc_dai *)’ from incompatible pointer type ‘int (*)(struct snd_soc_dai *, int)’ [-Werror=incompatible-pointer-types]
  .digital_mute = wm8960_mute,
                  ^~~~~~~~~~~
/home/pi/wm8960/wm8960.c:1318:18: note: (near initialization for ‘wm8960_dai_ops.prepare’)
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:279: /home/pi/wm8960/wm8960.o] Error 1
make[1]: *** [Makefile:1808: /home/pi/wm8960] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.10.11+'
make: *** [Makefile:17: all] Error 2

tagtagtag-sound branch: tagtagtag-mixerd compilation fails on Debian Bullseye (with gcc 10)

(test done with raspios_lite:2021-10-30 base image)

Cloning into 'wm8960'...
cc -Wall -Werror -lasound -lpthread tagtagtag-mixerd.c -o tagtagtag-mixerd
/usr/bin/ld: /tmp/ccNWcwfx.o: in function `hctl_jack_cb':
tagtagtag-mixerd.c:(.text+0x94): undefined reference to `snd_hctl_elem_get_callback_private'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x9c): undefined reference to `snd_ctl_elem_value_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xcc): undefined reference to `snd_ctl_elem_value_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xf0): undefined reference to `snd_hctl_elem_read'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x100): undefined reference to `snd_ctl_elem_value_get_boolean'
/usr/bin/ld: /tmp/ccNWcwfx.o: in function `hctl_button_cb':
tagtagtag-mixerd.c:(.text+0x138): undefined reference to `snd_hctl_elem_get_callback_private'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x140): undefined reference to `snd_ctl_elem_value_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x170): undefined reference to `snd_ctl_elem_value_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x194): undefined reference to `snd_hctl_elem_read'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x1a4): undefined reference to `snd_ctl_elem_value_get_integer'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x1c8): undefined reference to `snd_ctl_elem_value_get_integer'
/usr/bin/ld: /tmp/ccNWcwfx.o: in function `setup_hctl':
tagtagtag-mixerd.c:(.text+0x9dc): undefined reference to `snd_hctl_open'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xa20): undefined reference to `snd_hctl_nonblock'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xa60): undefined reference to `snd_hctl_load'
/usr/bin/ld: /tmp/ccNWcwfx.o: in function `teardown_hctl':
tagtagtag-mixerd.c:(.text+0xacc): undefined reference to `snd_hctl_close'
/usr/bin/ld: /tmp/ccNWcwfx.o: in function `setup_callbacks':
tagtagtag-mixerd.c:(.text+0xaf4): undefined reference to `snd_ctl_elem_id_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xb24): undefined reference to `snd_ctl_elem_id_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xb48): undefined reference to `snd_ctl_elem_id_set_interface'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xb58): undefined reference to `snd_ctl_elem_id_set_name'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xb68): undefined reference to `snd_hctl_find_elem'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xb78): undefined reference to `snd_hctl_elem_set_callback'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xb84): undefined reference to `snd_hctl_elem_set_callback_private'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xba0): undefined reference to `snd_ctl_elem_id_set_name'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xbb0): undefined reference to `snd_hctl_find_elem'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xbc0): undefined reference to `snd_hctl_elem_set_callback'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xbcc): undefined reference to `snd_hctl_elem_set_callback_private'
/usr/bin/ld: /tmp/ccNWcwfx.o: in function `set_ctl_elem_value':
tagtagtag-mixerd.c:(.text+0xc14): undefined reference to `snd_ctl_elem_value_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xc44): undefined reference to `snd_ctl_elem_value_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xc5c): undefined reference to `snd_ctl_elem_id_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xc8c): undefined reference to `snd_ctl_elem_id_sizeof'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xcb0): undefined reference to `snd_ctl_elem_id_set_interface'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xcc0): undefined reference to `snd_ctl_elem_id_set_name'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xcd0): undefined reference to `snd_hctl_find_elem'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xd08): undefined reference to `snd_ctl_elem_value_set_boolean'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xd20): undefined reference to `snd_ctl_elem_value_set_boolean'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xd34): undefined reference to `snd_ctl_elem_value_set_boolean'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xd4c): undefined reference to `snd_ctl_elem_value_set_integer'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xd64): undefined reference to `snd_ctl_elem_value_set_integer'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xd78): undefined reference to `snd_ctl_elem_value_set_integer'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0xd8c): undefined reference to `snd_hctl_elem_write'
/usr/bin/ld: /tmp/ccNWcwfx.o: in function `main':
tagtagtag-mixerd.c:(.text+0x1274): undefined reference to `pthread_sigmask'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x14c4): undefined reference to `snd_hctl_poll_descriptors_count'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x1514): undefined reference to `snd_hctl_poll_descriptors'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x15f8): undefined reference to `snd_hctl_poll_descriptors_revents'
/usr/bin/ld: tagtagtag-mixerd.c:(.text+0x1644): undefined reference to `snd_hctl_handle_events'
collect2: error: ld returned 1 exit status
make: *** [Makefile:44: tagtagtag-mixerd] Error 1

5.10.25+/build: No such file or directory

~/wm8960# make
make -C /lib/modules/5.10.25+/build M=/root/wm8960 modules
make[1]: *** /lib/modules/5.10.25+/build: No such file or directory.  Stop.
make: *** [Makefile:10: all] Error 2
root@rpi:~/wm8960# 

apt-get install raspberrypi-kernel-headers
~/wm8960# ls -la /lib/modules/5.10.25+/
total 2336
drwxr-xr-x  3 root root   4096 Apr  5 12:51 .
drwxr-xr-x 10 root root   4096 Apr  5 12:51 ..
drwxr-xr-x 11 root root   4096 Apr  5 12:51 kernel
-rw-r--r--  1 root root 561119 Apr  5 12:51 modules.alias
-rw-r--r--  1 root root 587873 Apr  5 12:51 modules.alias.bin
-rw-r--r--  1 root root  13109 Apr  5 12:51 modules.builtin
-rw-r--r--  1 root root  23475 Apr  5 12:51 modules.builtin.alias.bin
-rw-r--r--  1 root root  14109 Apr  5 12:51 modules.builtin.bin
-rw-r--r--  1 root root  71162 Apr  5 12:51 modules.builtin.modinfo
-rw-r--r--  1 root root 194345 Apr  5 12:51 modules.dep
-rw-r--r--  1 root root 268822 Apr  5 12:51 modules.dep.bin
-rw-r--r--  1 root root    324 Apr  5 12:51 modules.devname
-rw-r--r--  1 root root  64427 Apr  5 12:51 modules.order
-rw-r--r--  1 root root    380 Apr  5 12:51 modules.softdep
-rw-r--r--  1 root root 249341 Apr  5 12:51 modules.symbols
-rw-r--r--  1 root root 304134 Apr  5 12:51 modules.symbols.bin

Tagtagtag sound card driver incompatibility with latest versions of 5.15 and 6.1 kernel

See https://www.tagtagtag.fr/forum/showthread.php?tid=467&pid=2541#pid2541

Tagtagtag sound card driver, which worked fine with kernel version 5.15.32 (20220331), seems incompatible with later versions (5.15.56, 5.15.61, 5.15.76, 5.15.84, 6.1.21, ...):

Following kernel upgrade, after Pynab drivers recompilation (which works fine) and reboot:

  • rabbit is mute
  • nabd log shows a problem configuring sound card:
pi@Nabaztag:~$ cat /var/log/nabd.log
2022-08-31 14:38:55,088 [INFO] nabd: started with log level INFO
2022-08-31 14:38:55,500 [ERROR] nabd: Unable to configure sound card for playback
2022-08-31 14:38:55,504 [WARNING] nabd: no Tagtagtag card?
2022-08-31 14:38:55,542 [ERROR] nabd: Unable to configure sound card for playback
2022-08-31 14:38:55,543 [WARNING] nabd: no sound card?
2022-08-31 14:38:55,567 [INFO] nabd: running on Raspberry Pi Zero W Rev 1.1
  • the following errors appear for the sound driver:
pi@Nabaztag:~$ dmesg | grep wm8960
[   31.610013] wm8960 1-001a: failed to configure clock
[   31.610043] wm8960 1-001a: ASoC: error at snd_soc_dai_hw_params on wm8960-hifi: -22
[   31.610072]  bcm2835-i2s-wm8960-hifi: ASoC: soc_pcm_hw_params() failed (-22)
[   31.651845] wm8960 1-001a: failed to configure clock
[   31.651876] wm8960 1-001a: ASoC: error at snd_soc_dai_hw_params on wm8960-hifi: -22
[   31.651904]  bcm2835-i2s-wm8960-hifi: ASoC: soc_pcm_hw_params() failed (-22)

Capture doesn't seem to work

Playback working great Paul.

Had a look at amixer -c2 contents and doesn't seem to be anything amiss.

Prob something simple so thought I would ask if I am missing anything.

pi@raspberrypi:~ $ amixer -c2 contents
numid=12,iface=MIXER,name='Headphone Playback ZC Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=off,off
numid=11,iface=MIXER,name='Headphone Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=127,step=0
  : values=122,122
  | dBscale-min=-121.00dB,step=1.00dB,mute=1
numid=17,iface=MIXER,name='PCM Playback -6dB Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=57,iface=MIXER,name='Mono Output Mixer Left Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=58,iface=MIXER,name='Mono Output Mixer Right Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=41,iface=MIXER,name='ADC Data Output Select'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Left Data = Left ADC;  Right Data = Right ADC'
  ; Item #1 'Left Data = Left ADC;  Right Data = Left ADC'
  ; Item #2 'Left Data = Right ADC; Right Data = Right ADC'
  ; Item #3 'Left Data = Right ADC; Right Data = Left ADC'
  : values=0
numid=19,iface=MIXER,name='ADC High Pass Filter Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=36,iface=MIXER,name='ADC PCM Capture Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=255,step=0
  : values=195,195
  | dBscale-min=-97.50dB,step=0.50dB,mute=1
numid=18,iface=MIXER,name='ADC Polarity'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'No Inversion'
  ; Item #1 'Left Inverted'
  ; Item #2 'Right Inverted'
  ; Item #3 'Stereo Inversion'
  : values=0
numid=2,iface=MIXER,name='Capture Volume ZC Switch'
  ; type=INTEGER,access=rw------,values=2,min=0,max=1,step=0
  : values=0,0
numid=3,iface=MIXER,name='Capture Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=on,on
numid=1,iface=MIXER,name='Capture Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=63,step=0
  : values=39,39
  | dBscale-min=-17.25dB,step=0.75dB,mute=0
numid=10,iface=MIXER,name='Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=255,step=0
  : values=246,246
  | dBscale-min=-127.50dB,step=0.50dB,mute=1
numid=23,iface=MIXER,name='3D Filter Lower Cut-Off'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Low'
  ; Item #1 'High'
  : values=0
numid=22,iface=MIXER,name='3D Filter Upper Cut-Off'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'High'
  ; Item #1 'Low'
  : values=0
numid=25,iface=MIXER,name='3D Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=24,iface=MIXER,name='3D Volume'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=0
numid=33,iface=MIXER,name='ALC Attack'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=3
numid=32,iface=MIXER,name='ALC Decay'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=3
numid=26,iface=MIXER,name='ALC Function'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Off'
  ; Item #1 'Right'
  ; Item #2 'Left'
  ; Item #3 'Stereo'
  : values=3
numid=30,iface=MIXER,name='ALC Hold Time'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=3
numid=27,iface=MIXER,name='ALC Max Gain'
  ; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
  : values=7
numid=29,iface=MIXER,name='ALC Min Gain'
  ; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
  : values=0
numid=31,iface=MIXER,name='ALC Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'ALC'
  ; Item #1 'Limiter'
  : values=0
numid=28,iface=MIXER,name='ALC Target'
  ; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
  : values=12
numid=21,iface=MIXER,name='DAC Deemphasis Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=42,iface=MIXER,name='DAC Mono Mix'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Stereo'
  ; Item #1 'Mono'
  : values=0
numid=20,iface=MIXER,name='DAC Polarity'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'No Inversion'
  ; Item #1 'Left Inverted'
  ; Item #2 'Right Inverted'
  ; Item #3 'Stereo Inversion'
  : values=0
numid=45,iface=MIXER,name='Left Boost Mixer LINPUT1 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=43,iface=MIXER,name='Left Boost Mixer LINPUT2 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=44,iface=MIXER,name='Left Boost Mixer LINPUT3 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=9,iface=MIXER,name='Left Input Boost Mixer LINPUT1 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=3,step=0
  : values=0
  | dBrange-
    rangemin=0,,rangemax=1
      | dBscale-min=0.00dB,step=13.00dB,mute=0
    rangemin=2,,rangemax=3
      | dBscale-min=20.00dB,step=9.00dB,mute=0

numid=5,iface=MIXER,name='Left Input Boost Mixer LINPUT2 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=0
  | dBscale-min=-15.00dB,step=3.00dB,mute=1
numid=4,iface=MIXER,name='Left Input Boost Mixer LINPUT3 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=0
  | dBscale-min=-15.00dB,step=3.00dB,mute=1
numid=49,iface=MIXER,name='Left Input Mixer Boost Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=53,iface=MIXER,name='Left Output Mixer Boost Bypass Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=37,iface=MIXER,name='Left Output Mixer Boost Bypass Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=2
  | dBscale-min=-21.00dB,step=3.00dB,mute=0
numid=52,iface=MIXER,name='Left Output Mixer LINPUT3 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=38,iface=MIXER,name='Left Output Mixer LINPUT3 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=2
  | dBscale-min=-21.00dB,step=3.00dB,mute=0
numid=51,iface=MIXER,name='Left Output Mixer PCM Playback Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=35,iface=MIXER,name='Noise Gate Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=34,iface=MIXER,name='Noise Gate Threshold'
  ; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
  : values=0
numid=48,iface=MIXER,name='Right Boost Mixer RINPUT1 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=46,iface=MIXER,name='Right Boost Mixer RINPUT2 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=47,iface=MIXER,name='Right Boost Mixer RINPUT3 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=8,iface=MIXER,name='Right Input Boost Mixer RINPUT1 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=3,step=0
  : values=0
  | dBrange-
    rangemin=0,,rangemax=1
      | dBscale-min=0.00dB,step=13.00dB,mute=0
    rangemin=2,,rangemax=3
      | dBscale-min=20.00dB,step=9.00dB,mute=0

numid=7,iface=MIXER,name='Right Input Boost Mixer RINPUT2 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=0
  | dBscale-min=-15.00dB,step=3.00dB,mute=1
numid=6,iface=MIXER,name='Right Input Boost Mixer RINPUT3 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=0
  | dBscale-min=-15.00dB,step=3.00dB,mute=1
numid=50,iface=MIXER,name='Right Input Mixer Boost Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=56,iface=MIXER,name='Right Output Mixer Boost Bypass Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=39,iface=MIXER,name='Right Output Mixer Boost Bypass Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=2
  | dBscale-min=-21.00dB,step=3.00dB,mute=0
numid=54,iface=MIXER,name='Right Output Mixer PCM Playback Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=55,iface=MIXER,name='Right Output Mixer RINPUT3 Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=40,iface=MIXER,name='Right Output Mixer RINPUT3 Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=7,step=0
  : values=2
  | dBscale-min=-21.00dB,step=3.00dB,mute=0
numid=16,iface=MIXER,name='Speaker AC Volume'
  ; type=INTEGER,access=rw------,values=1,min=0,max=5,step=0
  : values=0
numid=15,iface=MIXER,name='Speaker DC Volume'
  ; type=INTEGER,access=rw------,values=1,min=0,max=5,step=0
  : values=0
numid=13,iface=MIXER,name='Speaker Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=127,step=0
  : values=0,0
  | dBscale-min=-121.00dB,step=1.00dB,mute=1
numid=14,iface=MIXER,name='Speaker Playback ZC Switch'
  ; type=BOOLEAN,access=rw------,values=2
  : values=off,off

To be honest confused to what some of those are but doesn't seem to be a PCM switch like there was with playback?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.