223 lines
6.9 KiB
Markdown
223 lines
6.9 KiB
Markdown
|
# PulseAudio Configuration for seeed-voicecard
|
||
|
|
||
|
Following this guide if you want to use your seeed-voicecard as a default source/sink of pulseaudio.
|
||
|
|
||
|
### ReSpeaker 4 Mic Array
|
||
|
|
||
|
|
||
|
1. Download pulseaudio
|
||
|
```
|
||
|
sudo apt install pulseaudio
|
||
|
pulseaudio --k
|
||
|
```
|
||
|
|
||
|
2. First, you need to write [a profile for pulse](https://www.freedesktop.org/wiki/Software/PulseAudio/Backends/ALSA/Profiles/)
|
||
|
```
|
||
|
cd seeed-voicecard
|
||
|
cd pulseaudio
|
||
|
cd pulse_config_4mic
|
||
|
sudo cp seeed-voicecard.conf /usr/share/pulseaudio/alsa-mixer/profile-sets/
|
||
|
```
|
||
|
|
||
|
3. Edit `udev rules`
|
||
|
|
||
|
During the system start, when the card "seeed4micvoicec" is detected, the PULSE_PROFILE_SET variable will be set in the udev database, and PulseAudio will be forced to use `seeed-voicecard.conf`.
|
||
|
|
||
|
```
|
||
|
# have a look at /lib/udev/rules.d/90-pulseaudio.rules
|
||
|
sudo vim /lib/udev/rules.d/90-pulseaudio.rules
|
||
|
# add the following lines at about line 87(behind the setting for some laptops and before the line GOTO="pulseaudio_end")
|
||
|
# Seeed Voicecard
|
||
|
ATTR{id}=="seeed4micvoicec",ATTR{number}=="1",ENV{PULSE_PROFILE_SET}="seeed-voicecard.conf"
|
||
|
```
|
||
|
![](./udev_rules_4mic.png)
|
||
|
|
||
|
The value of `ATTR{number}` can be found with:
|
||
|
|
||
|
```
|
||
|
udevadm info -a -p /sys/class/sound/card0/
|
||
|
# or udevadm info -a -p /sys/class/sound/card1/
|
||
|
```
|
||
|
|
||
|
For example, in Raspberry Pi, we can find `ATTR{id}=="seeed4micvoicec"` and `ATTR{number}=="1"` with command `udevadm info -a -p /sys/class/sound/card1/`:
|
||
|
|
||
|
```
|
||
|
pi@raspberrypi:~ $ udevadm info -a -p /sys/class/sound/card1/
|
||
|
|
||
|
Udevadm info starts with the device specified by the devpath and then
|
||
|
walks up the chain of parent devices. It prints for every device
|
||
|
found, all possible attributes in the udev rules key format.
|
||
|
A rule to match, can be composed by the attributes of the device
|
||
|
and the attributes from one single parent device.
|
||
|
|
||
|
looking at device '/devices/platform/soc/soc:sound/sound/card1':
|
||
|
KERNEL=="card1"
|
||
|
SUBSYSTEM=="sound"
|
||
|
DRIVER==""
|
||
|
ATTR{id}=="seeed4micvoicec"
|
||
|
ATTR{number}=="1"
|
||
|
|
||
|
looking at parent device '/devices/platform/soc/soc:sound':
|
||
|
KERNELS=="soc:sound"
|
||
|
SUBSYSTEMS=="platform"
|
||
|
DRIVERS=="seeed-voicecard"
|
||
|
ATTRS{driver_override}=="(null)"
|
||
|
|
||
|
looking at parent device '/devices/platform/soc':
|
||
|
KERNELS=="soc"
|
||
|
SUBSYSTEMS=="platform"
|
||
|
DRIVERS==""
|
||
|
ATTRS{driver_override}=="(null)"
|
||
|
|
||
|
looking at parent device '/devices/platform':
|
||
|
KERNELS=="platform"
|
||
|
SUBSYSTEMS==""
|
||
|
DRIVERS==""
|
||
|
```
|
||
|
|
||
|
4. config `default.pa` and `daemon.conf`
|
||
|
```
|
||
|
sudo cp default.pa /etc/pulse/
|
||
|
sudo cp daemon.conf /etc/pulse/
|
||
|
```
|
||
|
|
||
|
5. reboot raspberry pi and check
|
||
|
```
|
||
|
sudo reboot
|
||
|
pulseaudio --start # start pulse at first
|
||
|
pactl info # check the setting
|
||
|
|
||
|
Server String: /run/user/1000/pulse/native
|
||
|
Library Protocol Version: 32
|
||
|
Server Protocol Version: 32
|
||
|
Is Local: yes
|
||
|
Client Index: 18
|
||
|
Tile Size: 65496
|
||
|
User Name: pi
|
||
|
Host Name: raspberrypi
|
||
|
Server Name: pulseaudio
|
||
|
Server Version: 10.0
|
||
|
Default Sample Specification: s16le 4ch 16000Hz
|
||
|
Default Channel Map: front-left,front-center,front-right,rear-center
|
||
|
Default Sink: alsa_output.platform-soc_audio.analog-stereo
|
||
|
Default Source: alsa_input.platform-soc_sound.seeed-source
|
||
|
Cookie: 3b12:70b3
|
||
|
```
|
||
|
|
||
|
### 6-Mics Circular Array Kit and 4-Mics Linear Array
|
||
|
|
||
|
|
||
|
1. Download pulseaudio
|
||
|
```
|
||
|
sudo apt install pulseaudio
|
||
|
pulseaudio --k
|
||
|
```
|
||
|
|
||
|
2. First, you need to write [a profile for pulse](https://www.freedesktop.org/wiki/Software/PulseAudio/Backends/ALSA/Profiles/)
|
||
|
```
|
||
|
cd seeed-voicecard
|
||
|
cd pulseaudio
|
||
|
cd pulse_config_6mic
|
||
|
sudo cp seeed-voicecard.conf /usr/share/pulseaudio/alsa-mixer/profile-sets/
|
||
|
```
|
||
|
|
||
|
3. Edit `udev rules`
|
||
|
|
||
|
During the system start, when the card "seeed8micvoicec" is detected, the PULSE_PROFILE_SET variable will be set in the udev database, and PulseAudio will be forced to use `seeed-voicecard.conf`.
|
||
|
|
||
|
```
|
||
|
# have a look at /lib/udev/rules.d/90-pulseaudio.rules
|
||
|
sudo vim /lib/udev/rules.d/90-pulseaudio.rules
|
||
|
# add the following lines at about line 87(behind the setting for some laptops and before the line GOTO="pulseaudio_end")
|
||
|
# Seeed Voicecard
|
||
|
ATTR{id}=="seeed8micvoicec",ATTR{number}=="1",ENV{PULSE_PROFILE_SET}="seeed-voicecard.conf"
|
||
|
```
|
||
|
![](./udev_rules_6mic.png)
|
||
|
|
||
|
The value of `ATTR{number}` can be found with:
|
||
|
|
||
|
```
|
||
|
udevadm info -a -p /sys/class/sound/card0/
|
||
|
# or udevadm info -a -p /sys/class/sound/card1/
|
||
|
```
|
||
|
|
||
|
For example, in Raspberry Pi, we can find `ATTR{id}=="seeed8micvoicec"` and `ATTR{number}=="1"` with command `udevadm info -a -p /sys/class/sound/card1/`:
|
||
|
|
||
|
```
|
||
|
pi@raspberrypi:~ $ udevadm info -a -p /sys/class/sound/card1/
|
||
|
|
||
|
Udevadm info starts with the device specified by the devpath and then
|
||
|
walks up the chain of parent devices. It prints for every device
|
||
|
found, all possible attributes in the udev rules key format.
|
||
|
A rule to match, can be composed by the attributes of the device
|
||
|
and the attributes from one single parent device.
|
||
|
|
||
|
looking at device '/devices/platform/soc/soc:sound/sound/card1':
|
||
|
KERNEL=="card1"
|
||
|
SUBSYSTEM=="sound"
|
||
|
DRIVER==""
|
||
|
ATTR{id}=="seeed8micvoicec"
|
||
|
ATTR{number}=="1"
|
||
|
|
||
|
looking at parent device '/devices/platform/soc/soc:sound':
|
||
|
KERNELS=="soc:sound"
|
||
|
SUBSYSTEMS=="platform"
|
||
|
DRIVERS=="seeed-voicecard"
|
||
|
ATTRS{driver_override}=="(null)"
|
||
|
|
||
|
looking at parent device '/devices/platform/soc':
|
||
|
KERNELS=="soc"
|
||
|
SUBSYSTEMS=="platform"
|
||
|
DRIVERS==""
|
||
|
ATTRS{driver_override}=="(null)"
|
||
|
|
||
|
looking at parent device '/devices/platform':
|
||
|
KERNELS=="platform"
|
||
|
SUBSYSTEMS==""
|
||
|
DRIVERS==""
|
||
|
```
|
||
|
|
||
|
4. config `default.pa` and `daemon.conf`
|
||
|
```
|
||
|
sudo cp default.pa /etc/pulse/
|
||
|
sudo cp daemon.conf /etc/pulse/
|
||
|
```
|
||
|
|
||
|
5. reboot raspberry pi and check
|
||
|
```
|
||
|
sudo reboot
|
||
|
pulseaudio --start # start pulse at first
|
||
|
pactl info # check the setting
|
||
|
|
||
|
# The output should be like this
|
||
|
# You could see the default sink is seeed-2ch and default source is seeed-8ch
|
||
|
pi@raspberrypi:~ $ pactl info
|
||
|
Server String: /run/user/1000/pulse/native
|
||
|
Library Protocol Version: 32
|
||
|
Server Protocol Version: 32
|
||
|
Is Local: yes
|
||
|
Client Index: 6
|
||
|
Tile Size: 65496
|
||
|
User Name: pi
|
||
|
Host Name: raspberrypi
|
||
|
Server Name: pulseaudio
|
||
|
Server Version: 10.0
|
||
|
Default Sample Specification: s32le 8ch 48000Hz
|
||
|
Default Channel Map: front-left,front-left-of-center,front-center,front-right,front-right-of-center,rear-center,aux0,aux1
|
||
|
Default Sink: alsa_output.platform-soc_sound.seeed-2ch
|
||
|
Default Source: alsa_input.platform-soc_sound.seeed-8ch
|
||
|
Cookie: 3523:e5af
|
||
|
```
|
||
|
|
||
|
### FAQ
|
||
|
|
||
|
1. Default Sink/Source not right
|
||
|
|
||
|
Make sure there is no any other daemon or using the audio device. Then check profile and udev rules.
|
||
|
|
||
|
`pacmd list-sinks` and `pacmd list-sources` can be used to show the avaiable sinks/sources, after pulseaudio is started.
|
||
|
|
||
|
2. Can't start PulseAudio
|
||
|
|
||
|
Check `default.pa` and `daemon.conf`
|
||
|
|