Capture audio avec un Raspberry Pi 3

Introduction

Afin de pouvoir utiliser mon RPi3 comme Baby Phone, il doit être capable d'écouter les bruits environnants et éventuellement pouvoir jouer des musiques ou des sons.

Le premier pré-requis est donc de pouvoir capturer et jouer un son avec le RPi3.

Cet article présente donc comment câbler une carte audio au Raspberry PI.

Audio Codec PROTO

Le Rpi3 n'est pas d'origine capable d'enregistrer un son, ni d'en jouer en qualité suffisante. La carte n'est pas pourvue d'un ADC ni d'un DAC.

Beaucoup de solutions existent pour ajouter une carte son. J'ai choisi d'utiliser la carte Audio Codec PROTO disposant d'un codec WM8731.

Celle-ci a l'avantage d'être déjà supportée par les overlays de configuration du Kernel linux fournie sur Rasbian. De plus, elle supporte l'amplification de l'entrée micro et une sortie audio amplifiée, suffisante pour une petit enceinte.

img79

Branchements

La connexion de cette carte avec le Rpi3 est facile.

Un ancien câble en nappe de disque dur IDE de 40 points, quelques points de soudure, et voilà, une carte son fonctionnelle sur mon Raspberry Pi3!

La carte utilise les ports PCM et I2C du RaspberryPi présents sur le connecteur 40pins.

Description des pattes de la carte Audio Codec PROTO:

   
Pin Description Signal Pin
SCK Digital Audio Bit Clock BCM 18 12
MISO ADC Digital Audio Data Output BCM 20 38
MOSI DAC Digital Audio Data Input BCM 21 40
ADCL ADC Sample Rate Left/Right Clock BCM 19 35
DACL DAC Sample Rate Left/Right Clock BCM 19 35
SDA I2C Data BCM 2 3
SCL I2C Clock BCM 3 5
3.3V   3.3V 1,17
GND   GND 34,39

pinout

Configuration

Une fois branchée, activez le driver en ajoutant cette ligne dans le fichier /boot/config.txt:

# Load Proto soundcard module
dtoverlay=rpi-proto

Cela va automatiquement activer et charger les modules du Kernel Linux nécessaires.

Utilisation

Ensuite, il ne reste plus qu'à capturer en utilisant arecord ou rec.

Le petit script shell ci-dessous permet d'enregistrer les sons provenant du micro connecté à la carte PROTO tout en détectant les silences.

#!/bin/bash

# Required by rec
AUDIODEV=hw:1,0
export AUDIODEV
# Run specific commands for PROTO board.
PROTO=1

[ $# -lt 1 ] && set -- "voice"

if [ $PROTO -eq 1 ]; then
    # Input Mux: Mic
    amixer -c 1 cset numid=14 1
    # ADC Filter: off
    amixer -c 1 cset numid=8 off
    # Mic Capture Switch: on
    amixer -c 1 cset numid=6 on
fi

# Record at 44100, splitting record at silence
rec -S -r 44100 -p channels 1 silence 1 0.5 5% 1 0:05 5% | \
    sox -p -b 16 $1.wav silence 1 0.25 5% 1 2.0 5% : \
    newfile : restart

if [ $PROTO -eq 1 ]; then
    # Mic Capture Switch: off
    amixer -c 1 cset numid=6 off
    amixer -c 1 cset numid=14 0
fi

Vous pouvez aussi utiliser FFMPEG ou tout autre programme compatible avec la librairie ALSA.

Commentaires

links

social