wiki:mycroft_mark-2_sound

Version 3 (modified by admin, 4 years ago) (diff)

--

Adafruit Volume control

UPDATE: Based on a posting of user j1nx on the mycroft forum (thanks a lot!) the better way to control the initial value of the Adafruit using i2cset and an udev-rule

Enable I2C

I2C is not enabled by default so run and enable I2C in the Interfacing Options

Volume control with i2cset (preferred)

Install the i2c-tools:

  • sudo apt-get install i2c-tools

The command to set the volume (30) is:

  • i2cset -y 1 0x4b 30

Create the udev-rule:

  • sudo nano /etc/udev/rules.d/10-i2c-sound.rules

with the content:

SUBSYSTEM=="i2c", ATTR{name}=="bcm2835 I2C adapter", RUN+="/usr/sbin/i2cset -y 1 0x4b 30"

This blindly sets the volume as soon as the i2c adapter is seen by udev.

How to find the value for the udev rule

Use the command:

  • udevadm info -a -p /sys/bus/i2c/devices/i2c-1

to get the values for SUBSYSTEM and ATTR

Volume control with the Adafruit python library (alternative)

Control the volume of the MAX9744 using the CircuitPython Libraries (see https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi ). The things that I had to do:

Install the library

while in (.venv)

  • pip3 install RPI.GPIO
  • pip3 install adafruit-blinka
  • pip3 install adafruit-circuitpython-max9744
Python script

Use this script to set the initial volume to about the half (the range is 0 to 63). Create ~/bin/ada_volume.py with the following content

  • nano ~/bin/ada_volume.py
    import board
    import busio
    import adafruit_max9744
    i2c = busio.I2C(board.SCL, board.SDA)
    amp = adafruit_max9744.MAX9744(i2c)
    amp.volume = 30
    
Start using systemd

Place a service file in the user directory:

  • nano ~/.config/systemd/user/myadavolume.service

with the content

[Unit]
Description=set adafruit volume
After=network.target

[Service]
Type=simple
ExecStart=/home/pi/mycroft-core/.venv/bin/python /home/pi/bin/ada_volume.py

[Install]
WantedBy=default.target

Enable and start it:

  • systemctl --user daemon-reload
  • systemctl --user enable myadavolume
  • systemctl --user start myadavolume

Pulseaudio

The picroft installation does not use pulseaudio for the output of voice and other sound so the general volume control did not work

blacklist the internal bcm2835 sound card

This is for sure totally optional but I did it

  • sudo nano /etc/modprobe.d/alsa-blacklist.conf
    blacklist snd_bcm2835
    

force ALSA userspace to use PulseAudio

  • sudo nano /etc/asound.conf
    # Use PulseAudio by default
    pcm.!default {
      type pulse
      fallback "sysdefault"
      hint {
        show on
        description "Default ALSA Output (currently PulseAudio Sound Server)"
      }
    }
    
    ctl.!default {
      type pulse
      fallback "sysdefault"
    }
    

mycroft conf

  • sudo nano /etc/mycroft/mycroft.conf

replace:

   "play_wav_cmdline": "aplay -Dplughw:ArrayUAC10,0 %1",
   "play_mp3_cmdline": "mpg123 -a plughw:ArrayUAC10,0 %1",

with

   "play_wav_cmdline": "paplay %1",
   "play_mp3_cmdline": "mpg123 %1",

additional setting in default.pa

This enables ducking and is a nice feature that the volume of music playing is turned down while Mycroft speaks instead of stopping the output.

  • sudo nano /etc/pulse/default.pa

add to the end of the file

unload-module module-suspend-on-idle
unload-module module-role-cork
load-module module-role-ducking