110 Raspberri Pi 1 con I2S Wolfson Audio Card - Rsantct/FIRtro-light GitHub Wiki

Raspberry Pi 1 con Tarjeta de sonido I2S Wolfson Audio Card

(TAMBIÉN APLICA A CUALQUIER RPI x con CIRRUS LOGIC AUDIO CARD)

RPI 1 Wolfson

Overclock

$ raspi-config → Overclock: Turbo
Turbo  1000MHz ARM, 500MHz core, 600MHz SDRAM, 6 overvolt
--------------------
   Thermal Zone 0
   57.838 °C
--------------------

CPU

https://wiki.linuxaudio.org/wiki/raspberrypi

/etc/rc.local

for cpu in /sys/devices/system/cpu/cpu[0-9]*; do echo -n performance | sudo tee $cpu/cpufreq/scaling_governor; done

Wolfson Audio Sound Card / Cirrus Logic Audio Card para Raspberry Pi

http://www.horus.com/~hias/cirrus-driver.html

  1. Actualizar Raspbian para tener un kernel >= 4.x

    sudo apt-get update sudo apt-get upgrade

  2. Instalar drivers oficiales

    sudo rpi-update

OjO parece ser que este punto ya no es necesario ¿!? https://www.raspberrypi.org/forums/viewtopic.php?t=200029 Update with

sudo apt update
sudp apt -y dist-upgrade 
  1. Y activarlos

/boot/config.txt

dtoverlay=rpi-cirrus-wm5102

/etc/modprobe.d/cirrus.conf

softdep arizona-spi pre: arizona-ldo1
  1. Reiniciar:

    $ sudo reboot

  2. Comprobar:

    $ aplay -l

  3. Instalar las utilidades de configuración de la tarjeta:

    mkdir /home/pi/bin_cirrus/

    wget http://www.horus.com/~hias/tmp/cirrus/cirrus-ng-scripts.tgz

    cd /home/pi/bin_cirrus/

    tar zxf ../cirrus-ng-scripts.tgz

  4. Ajustes de la tarjeta

El alsamixer de las tarjetas Wolfson/CirrusLogic es muy complicado, dispone de un DSP interno. Para seleccionar la entrada, salida, o resetar ajustes ejecutar los scripts del fabricante:

/home/pi/bin_cirrus/
    Cirrus_listen.sh
    Playback_to_Headset.sh
    Playback_to_Lineout.sh
    Playback_to_SPDIF.sh
    Playback_to_Speakers.sh
    Record_from_DMIC.sh
    Record_from_Headset.sh
    Record_from_Linein_Micbias.sh
    Record_from_Linein.sh
    Record_from_SPDIF.sh
    Reset_paths.sh

Para ajustar los niveles de entrada/salida y guardarlos para el arraque de FIRtro podemos usar estos scripts:

/home/pi/bin_clac_custom/clac_dBlevel.py
/home/pi/bin_clac_custom/clac_dBlevel_headset.py

Guardamos los ajustes para el arranque de FIRtro

$ alsactl -f /home/firtro/audio/asound.RPiCirrus store RPiCirrus

Archivos ad-hoc:

Ver en https://github.com/Rsantct/FIRtro-light

/etc/sudoers.d/020_firtro
/etc/rc.local # con ajustes ad-hoc y scripts BT/Spotify
/home/firtro/.asoundrc
/home/firtro/bin_custom/
    patch_firtro.sh	
    restart_jack.sh
    librespot_watchdog.sh
    escuchaBT.py
/home/firtro/bin/
    webcustombutton_7.sh
    webcustombutton_8.sh
    webcustombutton_8.sh
/home/www/config/config.ini
/home/audio/inputs

Prestaciones:

  • librespot OK aunque en RPI1 funciona mejor con --bitrate 160
  • LineIn OK, necesita jackd -p 1024 o menor para material audiovisual
  • bluetooth OK

Si el ajuste --period (frames per period) de jackd es inferior a 4096, se observan underruns desde el plugin jack de .asoundrc cuando es usado por librespot debido a su alto consumo CPU. Otros usos como por ejemplo el receptor BT (bluealsa) no presentan problemas.

Como se necesita --period pequeño para escuchar material audiovisual por la entrada analógica LineIn, preparamos unos botones de la web de control para relanzar jack/brutefir/ecasound, ajustando --period en Jack y filter_lenght en Brutefir.

bin_custom/restart_jack.sh tamaño_buffer

Alternativamente, se ha intentado ajustar el slave del pcm.jack de .asoundrc con un valor period_time alto, pero no funciona :-/

pcm.jack {
    type plug
    slave {
        pcm         "rawjack"
        period_time 8192   # <-- esto no funciona
    }