---
categories: ['OpenBSD','Système','Multimédia']
date: 2022-11-22T12:44:25+01:00
description: "Gestion du son, de la vidéo sous OpenBSD : USB Audio, sortie SPDIF, enregistrement audio et vidéo"
draft: false
include_toc: true
show_comments: false
tags: ['OpenBSD','mixerctl','sndiod','sndioctl']
title: "OpenBSD : Gestion de l'audio ET de la vidéo"
translationKey: 'openbsd-multimedia'
---
## 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
{{}}
Cette sortie est considérée comme une sortie analogique. Par défaut, c'est
le mode de sortie utilisé… si ce n'est pas/plus le cas, reconfigurez-la :
`outputs.mode=analog`
{{}}
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 :
```sh
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 :
```sh
# 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 {{< anchor Documentations documentations >}}.
#### Microphone USB
⇒ Après avoir connecté physiquement votre microphone USB, vérifiez la reconnaissance :
```sh
$ 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'{{< anchor "enregistrement audio" "enregistrement-audio" >}}.
2. Puis, il faut paramètrer le serveur sndiod, tel que :
```sh
# rcctl set sndiod flags -s default -m play,mon -s mon
```
3. puis le (re)démarrer…
4. Optionnellement, vous pouvez vous assurer des paramètres d'entrée par
le contrôleur **sndioctl**, tel que :
```sh
$ sndioctl input.mute=0
$ sndioctl input.level=1
```
---
Un petit test de fonctionnement, en parlant près du microphone :
```sh
$ aucat -f snd/1 -o output.wav
```
Et pour l'écoute :
```sh
$ 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 :
```sh
$ 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 :
```sh
# rcctl set sndiod flags -c 0:3
# rcctl restart sndiod
```
{{}}
Il est possible de lui signifier de n'utiliser que les canaux 2 et 3.
De plus, votre matériel peut certainement utiliser encore plus de canaux.
À vous de modifier en conséquence…
Lire le manpage **sndiod(8)** qui montre dans les exemples son utilisation
en espace utilisateur.
{{}}
## 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
```sh
$ pgrep -lf sndiod
44982 /usr/bin/sndiod -c0:3
16091 sndiod: helper
```
qui montre le fonctionnement du serveur…
## Documentations
- [Effortless OpenBSD Audio and Desktop Screen Recording Guide](https://rsadowski.de/posts/2024-01-14-openbsd-video-audio-screen-recording/)
### manpage
- {{< man mixerctl >}}, {{< man sndioctl >}}, {{< man sndiod 8 >}}
- {{< man usbhidaction >}}
- {{< man wscons 4 >}}, {{< man wsconsctl 8 >}}
---
***Enjoy-ID!
Enjoy-IT!***
---