%
Puffy image/svg+xml Puffy 2019-06-14 Stéphane HUC OpenBSD Team Inkscape Puffy OpenBSD https://www.openbsd.org/art4.html English "Puffy", it's a symbol of OpenBSD

OpenBSD : Gestion de l'audio ET de la vidéo

Article publié, le et modifié le
7 minutes de lecture

Cet article contient 1333 mots.
Source brute de l'article :
Commit version : 395ac55

Description

Voyons ensemble comment gérer les fonctionnalités multimédias sous OpenBSD.

Audio

Gestion du Bip

Le bip sonore qui se fait entendre parfois dans certains contextes, tel lors de l’utilisation de la complétion de commande avec la touche Tab, peut être rendu muet.

Avant OpenBSD 6.7, c’est l’outil mixerctl qui le permettait : # mixerctl inputs.mix_beep = 0

Depuis OpenBSD 6.7, ce paramètre est géré par le pilote wscons(4) et configuré par le biais du contrôleur wsconsctl(8) — ce qui nécessite des droits administrateurs.

Pour le rendre muet : # wsconsctl keyboard.bell.volume=0

Pour le désactiver définitivement et garder le paramètre au redémarrage, copiez-le fichier /etc/examples/wsconsctl.conf vers /etc et décommentez la ligne : #keyboard.bell.volume=0

Enregistrement audio

Depuis OpenBSD 6.4, pour des raisons de confidentialité, l’enregistrement audio est désactivé. Pour le réactiver :

# sysctl kern.audio.record=1

Pensez à modifier le fichier /etc/sysctl.conf !

Cela sera utile dans le contexte d’utilisation d’un microphone, d’une webcam ayant un micro, etc… ce qui permettra d’utiliser correctement tout logiciel tel audacity… ainsi que lors de l’utilisation du protocole WebRTC avec les navigateurs web, que sont Firefox et Chromium.

Gestion des niveaux

La gestion des niveaux de volume se fait en espace utilisateur, grâce à l’outil sndioctl(1). Pas besoin de droits administrateur dans la session utilisateur.

  • pour augmenter/diminuer le niveau : $ sndioctl output.level=+0.1
  • pour mettre/enlever le mode muet : $ sndioctl output.mute=!
  • pour voir les niveaux en pourcentage : $ sndioctl output.level | awk -F = '{printf "%d\n",$2*100}'

Pensez à modifier votre fichier ~/.kshrc pour ajouter la commande si vous voulez un niveau audio par défaut lors du démarrage de la session.

Gestion des paramètres

Pour la gestion des paramètres, c’est l’outil mixerctl(1) qui est à utiliser. Celui-ci s’utilise toujours avec des droits administrateurs !

  • # mixerctl -av permet de savoir ce qui de votre matériel est reconnu.

Toute modification de paramètres devra être enregistré dans le fichier /etc/mixerctl.conf qui n’existe pas par défaut. Il faut le copier depuis les fichiers d’exemples : # cp /etc/examples/mixerctl.conf /etc/

Illustrons par le cas d’utilisation d’une sortie USB Audio et SPDIF :

HDMI Audio

C’est apparemment une situation complexe qui semble n’avoir encore à ce jour pas de solution.

Pour comprendre le propos lire la discussion suivante et suivez le fil : https://marc.info/?l=openbsd-tech&m=158780750403100&w=2

USB Audio

DAC USB

Info

Il est de plus en plus courant d’avoir un périphérique Audio par USB, voir un DAC Audio USB. Une fois connecté, pour vérifier son support, utilisons la commande suivante : dmesg | grep uaudio ainsi que la commande usbdevs.

Tel que, pour l’exemple :

uaudio0 at uhub0 port 1 configuration 1 interface 1 "Logitech Logitech USB Headset" rev 1.10/10.13 addr 2
uaudio0: class v1, full-speed, sync, channels: 2 play, 1 rec, 7 ctls
audio1 at uaudio0

qui est reconnu en tant que périphérique uaudio0 qui est connecté sur le périphérique spécial audio audio1.

Le serveur sndiod le reconnaît en tant que périphérique snd/1.

Deux manières différentes de procéder :

  • la plus simple est de reconfigurer la variable server.device pour qu’il écoute le périphérique snd/1 : $ sndioctl server.device=1 ce qui a pour avantage de ne pas avoir à reconfigurer tout autre logiciel pour écouter ledit périphérique.
  • la deuxième est liée aux programmes gérant de l’audio capables d’utiliser directement le périphérique snd/1.

Par exemple, avec le logiciel audacious, il faut aller dans les Paramètres > Paramètre de son, puis face au champ Greffon de sortie, il y a deux boutons, dont l’un nommé [Paramètres] qui ouvre une autre fenêtre où pour le champ Périphérique :, il faudra écrire le nom du périphérique audio USB, soit snd/1, puis valider et écouter du son…


Il existe une manière alternative pour que le serveur sndiod reconnaisse automatiquement le périphérique USB en tant que périphérique par défaut, lorsqu’il est connecté physiquement, puis de rebasculer sur le périphérique snd/0 dès que ce n’est plus le cas.

Pour ce contexte, il faut redéfinir les drapeaux du serveur sndiod puis le relancer :

# rcctl set sndiod flags -f rsnd/0 -F rsnd/1
# rcctl restart sndiod

Le serveur n’est pas capable de se relancer automatiquement si vous connectez le périphérique USB après le (re)démarrage du serveur. Une fois, le périphérique connecté, rechargez tout simplement le serveur : # rcctl reload sndiod forcera le serveur a détecter à nouveau le périphérique.


Un autre outil disponible est l’utilisation de la commande usbhidaction

Je vous renvoie au manpage relatif — cf la section Documentations .

Microphone USB

⇒ Après avoir connecté physiquement votre microphone USB, vérifiez la reconnaissance :

$ dmesg | grep audio 
uaudio0 at uhub4 port 2 configuration 1 interface 1 "BIRD UM1 BIRD UM1" rev 1.10/1.00 addr 2
uaudio0: class v1, full-speed, sync, channels: 0 play, 1 rec, 2 ctls
audio1 at uaudio0

(dans mon cas, le microphone est bien le BIRD UM1.)

Si vous avez une sortie similaire, alors votre microphone USB est bien reconnu et sera utilisable ; si non, dommage.

Là encore du fait d’être un périphérique USB, le serveur sndiod capture l’enregistrement micro en tant que périphérique snd/1 principalement.

⇒ Pour utiliser le microphone USB sous OpenBSD :

  1. Dans un premier temps, veillez à activer l’enregistrement audio .
  2. Puis, il faut paramètrer le serveur sndiod, tel que :
# rcctl set sndiod flags -s default -m play,mon -s mon
  1. puis le (re)démarrer…
  2. Optionnellement, vous pouvez vous assurer des paramètres d’entrée par le contrôleur sndioctl, tel que :
$ sndioctl input.mute=0
$ sndioctl input.level=1

Un petit test de fonctionnement, en parlant près du microphone :

$ aucat -f snd/1 -o output.wav

Et pour l’écoute :

$ aucat -i output.wav

Sortie SPDIF

Pour utiliser une sortie SPDIF, il faut modifier le mode de sortie ; en effet, par défaut le mode de sortie correspond à l’analogique.

Avec l’outil mixerctl, modifiez ce mode, tel que : outputs.mode=digital

Ensuite, il faut modifier le serveur de son sndiod(8) pour qu’il gère les canaux audio correspondants, car par défaut, il ne gère que les deux premiers canaux, à savoir 0:1 ; ce qui permet d’avoir quand même un son stéréo.

Avant de le modifier, vérifions dans un premier temps, la sortie SPDIF, tel que : # mixerctl outputs.SPDIF_source

Dans le contexte de la carte-mère que j’utilise :

$ doas mixerctl outputs.SPDIF_source
outputs.SPDIF_source=dig-dac-2:3

Ainsi, la sortie SPDIF se fait sur les canaux 2 et 3.

Modifions le serveur sndiod pour ajouter la gestion des canaux 2 et 3, au démarrage de celui-ci :

# rcctl set sndiod flags -c 0:3
# rcctl restart sndiod
Info

Vidéo

Enregistrement vidéo

Par défaut, depuis OpenBSD 6.9, pour des raisons de confidentialité, l’enregistrement vidéo est désactivé !

Pour le réactiver :

# sysctl kern.video.record=1

Pensez à modifier le fichier /etc/sysctl.conf !

Cela sera utile dans le contexte d’utilisation d’une webcam ayant un micro, etc… ce qui permettra d’utiliser correctement tout logiciel tel fswebcam… ainsi que lors de l’utilisation du protocole WebRTC avec les navigateurs web, que sont Firefox et Chromium.

Dépannage

mixerctl: AUDIO_MIXER_WRITE: Device busy

Lorsque vous essayez de changer le mode de sortie de l’analogique vers le digital et réciproquement, le système vous répond avec ce message interdisant la modification.

  1. arrêtez d’abord le serveur sndiod ; vérifiez qu’il est correctement éteint.
  2. refaites la modification désirée, avec l’outil mixerctl
  3. redémarrez le serveur sndiod

vérifier le fonctionnement du serveur sndiod

Pour vérifier le fonctionnement du serveur sndiod(8), hormis de vérifier le status de son démon, utilisez la commande suivante : $ pgrep -lf sndiod

Par exemple

$ pgrep -lf sndiod   
44982 /usr/bin/sndiod -c0:3
16091 sndiod: helper

qui montre le fonctionnement du serveur…

Documentations

manpage


Enjoy-ID! Enjoy-IT!