Gestion du son dans une salle d'escape game
Tags: vlc, music, french
Published: 2021-10-25 13:16:57

---
title: Gestion du son dans une salle d'escape game
published: true
description: Note a moi même des outils utilisé pour la gestion du son dans la salle d'escape game
tags: 
- vlc
- music 
- french

---

#Le projet

##La disposition
Le projet principal s'articule de la façon suivante :

Dans une salle, 5 joueurs et un maître du jeu prennent place. Cette salle accueillera un jeu de rôle sur table durant 1 h et plongera les joueurs dans une ambiance en lien avec les événements du jeu.
Le maître du jeu sera le seul lien avec l'histoire. Il mettra en scène les situations et sera garant de l'interaction des joueurs dans le scénario.

Le Maitre du jeu est éloigné des joueurs afin de gérer la mise en place des ambiances derrière son pupitre. Les joueurs, quant à eux, seront placés face au MJ derrière une table. Cette table est la seule interaction physique qu'il y aura entre les joueurs et l'histoire.

## L'ambiance
Pour générer une ambiance dans laquelle les joueurs seront plongés, il est nécessaire de d'utiliser les éléments suivants :

- Les lumières
- Le son
- La décoration
- Les objets d'interactions

Ce document se concentrera uniquement sur la diffusion du/des sons dans la salle.

Pour créer une ambiance sonore, nous avons besoin des éléments suivants :

- Un système son (stéréo pour le moment)
- Des sons d'ambiances bouclé et permanant par scène
- Des sons d'objet ou d'animaux pouvant intervenir par-dessus la musique d'ambiance sur décision du MJ


# Le materiel
Principalement, tout sera géré par un Raspberry pi 3. Il jouera le rôle de serveur d'application. Sur ce dernier, seront installées VLC ainsi que les musiques à jouer.

Les requêtes seront envoyées depuis une PC sous Windows depuis la console Powershell.

##Petite astuce
Pour télécharger des musiques depuis YouTube vers le RPI, la lib [youtube-dl](https://doc.ubuntu-fr.org/youtube-dl) fais complètement le café.


# Execution
## Installation du RPI
Le RPI sera le serveur principal de toutes les musiques d'ambiance. C'est par lui que passeront toutes les requêtes de lecture des musiques ou des sons additionnel.
### Connexion SSH
La connexion SSH entre le pc windows et le rpi sous linux permettra aux deux periphérique de communiquer.

#### Sur le RPI
Activons le service sur le RPI
```

$ sudo raspi-config

```
Sélectionnez les éléments suivants :
```

3 Interface Options > P2 SSH > YES

```

Le service est maintenant actif. Récupérez l'adresse IP.
```
$ ifconfig
```
Et passez sur le PC Windows.

#### Sur Windows
Testons la connexion ssh avec Powershell:
```
$ ssh pi@XXX.XXX.X.XX
```
Le Mot de passe par défaut est :
```
raspberry
```
Si la connexion n'aboutit pas, vérifiez vos connexions et [RTFM](https://doc.ubuntu-fr.org/ssh)

Afin d'éviter de rentrer le mot de passe à chaque connexion, nous allons créer une clé publique.

Dans Powershell:
```
ssh-keygen.exe
```
Puis validez. Validez également sans modification tous les points qui vous seront présentés.

Puis, envoyez votre clé publique au RPI:
```
$ ssh pi@XXX.XXX.X.XX mkdir -p .ssh
$ pi@XXX.XXX.X.XX's password:
```

```
$ cat .ssh/id_rsa.pub | ssh pi@XXX.XXX.X.XX 'cat >> .ssh/authorized_keys'
$ pi@XXX.XXX.X.XX's password:
```


Vous pouvez maintenant vous connecter sans rentrer de mot de passe.
```
$ ssh pi@XXX.XXX.X.XX
```

Si un problème persiste -> [RTFM](http://www.linuxproblem.org/art_9.html)

### VLC
Procèdons à l'installation de VLC sur le RPI
#### [RPI](https://doc.ubuntu-fr.org/vlc)
```

$ sudo apt-get install vlc

```
... Classique

VLC sera utilisé entierement par la console. En voici là [doc des commandes avancées](https://wiki.videolan.org/VLC_command-line_help/)

### Téléchargement des musiques d'exemple
La Lib [youtube-dl](https://doc.ubuntu-fr.org/youtube-dl) permet de télécharger facilement des vidéos ou des audios à partir d'un lien YouTube.
La lib dans les dépôts Ubuntu ne sont pas stable. Il faut donc télécharger le package depuis le site officiel.

```
$ sudo wget https://yt-dl.org/latest/youtube-dl -O /usr/local/bin/youtube-dl
$ sudo chmod a+x /usr/local/bin/youtube-dl
$ hash -r
```

Pour les essais, nous allons travailler avec les musiques et sons suivants :
- [Musique d'ambiance](https://www.youtube.com/watch?v=O1wtKpdgk9c)
- [Son chauve-souris](https://www.youtube.com/watch?v=-4_CIMDuoLM)


Pour les télécharger
```
$ cd ~
$ youtube-dl -x --audio-format mp3 https://www.youtube.com/watch?v=O1wtKpdgk9c
$ mv Megan McDuffee - Don't Go In There _ Scary Dark Ambient Music-O1wtKpdgk9c.mp3 ambiance.mp3
$ youtube-dl -x --audio-format mp3 https://www.youtube.com/watch?v=-4_CIMDuoLM
$ mv BATS SOUND EFFECT IN HIGH QUALITY--4_CIMDuoLM.mp3 bats.mp3
```

---

NB: Lors de l'application de ce tuto sur une version LTS d'ubuntu, il a fallut que j'effectue des opération supplémentaire:

youtube-dl utilise python et par defaut, uniquement python3 est installé. j'ai donc utilisé la commande suivante: 
```
$ sudo apt install python-is-python3
```
[source](https://askubuntu.com/questions/320996/how-to-make-python-program-command-execute-python-3)

Il me manquait également une librairie ffmpeg
``` 
$ sudo apt-get install ffmpeg
```
[source](https://stackoverflow.com/questions/30770155/ffprobe-or-avprobe-not-found-please-install-one)

---

Notez que les sons ont été téléchargés dans votre home :
```
/home/pi/
```

### Tests des sorties son
Pour tester les sons téléchargés :
```
$ vlc ambiance.mp3
```
Normalement, le son devrait sortir par la sortie audio.

## Serveur web VLC
Afin de pouvoir jouer plusieurs sons en même temps, nous devons clarifier les besoins :
- Une musique ambiante tourne en continue durant toute une scène. Elle ne s'arrêtera que lorsque le besoin de changer de scène se fera ressentir. Néanmoins, la musique doit pouvoir être contrôlable pour être changé, baisser ou augmenter le volume, simplement stopper.
- Des sons court d'ambiance vont être joué de façon impromptu suivant les besoins du MJ. Le son ne sera joué qu'une seule fois juste le temps nécessaire.

Dans ces conditions, la solution s'offrant à nous est le suivant :
Mettre la musique principale sur un serveur web audio VLC et les autres sons seront lancé par ligne de commande en fonction des besoins.

### Pourquoi un serveur WEB
Le Serveur, web VLC, contrairement à son utilisation par ligne de commande, permet de garder la main sur la lecture de la musique en cours par le biais de requeté web.
La liste des requêtes disponible est énuméré dans cette [documentation](https://wiki.videolan.org/VLC_HTTP_requests/)


Pour lancer l'interface web de VLC, il faut exécuter la ligne de commande suivante :

```
$ cvlc -I http --http-password xxx -L -R
```
|Legende|   |
|---|---|
|-I:|Sélection de l'interface. Ici, c'est http|
|--http-password:|Mise en place d'un mot de passe d'accès (ici, c'est xxx, mais c'est à vous de le changer.)|
|-L:|activation de la loop|
|-R:|activation du repeat|


Rendez-vous sur sur le PC Windows et sur votre navigateur preferé pour voir cette interface. Par défaut :
```
192.168.X.XX:8080
```

Un mot de passe vous sera demandé pour accéder à l'interface. Laissez le Username vide et le mot de passe est celui rentré dans la ligne de commande précédente. (ici xxx si vous ne l'avez pas changé)

Si vous souhaitez jouer une musique directement au lancement de l'interface, vous pouvez ajouter la piste souhaitée dans la ligne de commande :
```
$ cvlc -I http --http-password xxx -L -R /home/pi/ambiance.mp3
```

### Mise en place du service
Afin de ne pas avoir la console hors d'usage durant la mise en service du serveur web VLC, il est nécessaire de transformer la commande en service daemon au démarrage du RPI.

[documentation](https://linuxconfig.org/how-to-run-script-on-startup-on-ubuntu-20-04-focal-fossa-server-desktop)

**STEP 1 : Écrire le service**
```
$ sudo nano /etc/systemd/system/vlc-web.service
```
```
[Unit]
After=network.service

[Service]
ExecStart=/usr/local/bin/vlc-web-startup.sh

[Install]
WantedBy=default.target
```
**STEP 2 : Écrire le script**

```
$ sudo nano /usr/local/bin/vlc-web-startup.sh
```

```
#!/bin/bash

cvlc -I http --http-password pwd -q -L -R
```

**STEP 3 : Gérer les droits de lecture**
```
$ sudo chmod 744 /usr/local/bin/vlc-web-startup.sh
$ sudo chmod 664 /etc/systemd/system/disk-space-check.service
```

**STEP 4 : Permettre le lancement de VLC par root**
```
sudo sed -i 's/geteuid/getppid/' /usr/bin/vlc
```

Vous pouvez maintenant redémarrer votre RPI et le serveur se lancera automatiquement au démarrage à la même adresse que noter plus haut.

### Test des requêtes avec Postman
Pour tester notre serveur, nous allons utiliser l'application [Postaman](https://www.postman.com/) depuis notre PC Windows

Durant les tests, n'oubliez pas de remplir les identifiants de connexion dans l'onglet "Authorization" et de sélection "Basic Auth". Laissez Username vide et saisissez votre mot de passe.

Ajouter une musique dans la playlist et jouez la :
```
http://192.168.X.XX:8080/requests/status.xml?command=in_play∈put=/home/pi/ambiance.mp3
```

Votre musique sera jouée maintenant en fond sonore et vous pouvez aussi profiter pleinement de votre shell :)

Toutes les commandes par requête http sont disponible dans cette [documentation](https://wiki.videolan.org/VLC_HTTP_requests/)

## Lancement des sons additionnel
Nous y voici enfin : lancer des sons additionnels au-dessus de la musique d'ambiance.

Maintenant, que tout est optimisé, une simple requête permet de réaliser votre rêve.
```
$ cvlc --no-one-instance --play-and-exit -q /home/pi/bats.mp3 &
```

|Legende|   |
|---|---|
|cvlc:|C'est le client console|
|--no-one-instance:|Permet de lancer plusieurs instance VLC en meme temps|
|--play-and-exit:|Joue le son et quitte le processus VLC automatiquement|
|-q:|N'affiche aucune sortie.|
|/home/pi/bats.mp3:|Le lien vers le son|
|&:|Permet a la commande de ne pas bloquer la console durant l'exécution du processus.|

ENJOY