DEV Community

Remy Jacquand
Remy Jacquand

Posted on • Updated on

Gestion du son dans une salle d'escape game

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 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

Enter fullscreen mode Exit fullscreen mode

Sélectionnez les éléments suivants :


3 Interface Options > P2 SSH > YES

Enter fullscreen mode Exit fullscreen mode

Le service est maintenant actif. Récupérez l'adresse IP.

$ ifconfig
Enter fullscreen mode Exit fullscreen mode

Et passez sur le PC Windows.

Sur Windows

Testons la connexion ssh avec Powershell:

$ ssh pi@XXX.XXX.X.XX
Enter fullscreen mode Exit fullscreen mode

Le Mot de passe par défaut est :

raspberry
Enter fullscreen mode Exit fullscreen mode

Si la connexion n'aboutit pas, vérifiez vos connexions et RTFM

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

Dans Powershell:

ssh-keygen.exe
Enter fullscreen mode Exit fullscreen mode

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:
Enter fullscreen mode Exit fullscreen mode
$ cat .ssh/id_rsa.pub | ssh pi@XXX.XXX.X.XX 'cat >> .ssh/authorized_keys'
$ pi@XXX.XXX.X.XX's password:
Enter fullscreen mode Exit fullscreen mode

Vous pouvez maintenant vous connecter sans rentrer de mot de passe.

$ ssh pi@XXX.XXX.X.XX
Enter fullscreen mode Exit fullscreen mode

Si un problème persiste -> RTFM

VLC

Procèdons à l'installation de VLC sur le RPI

RPI


$ sudo apt-get install vlc

Enter fullscreen mode Exit fullscreen mode

... Classique

VLC sera utilisé entierement par la console. En voici là doc des commandes avancées

Téléchargement des musiques d'exemple

La Lib 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
Enter fullscreen mode Exit fullscreen mode

Pour les essais, nous allons travailler avec les musiques et sons suivants :

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

source

Il me manquait également une librairie ffmpeg

$ sudo apt-get install ffmpeg
Enter fullscreen mode Exit fullscreen mode

source


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

/home/pi/
Enter fullscreen mode Exit fullscreen mode

Tests des sorties son

Pour tester les sons téléchargés :

$ vlc ambiance.mp3
Enter fullscreen mode Exit fullscreen mode

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

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

$ cvlc -I http --http-password xxx -L -R
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

STEP 1 : Écrire le service

$ sudo nano /etc/systemd/system/vlc-web.service
Enter fullscreen mode Exit fullscreen mode
[Unit]
After=network.service

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

[Install]
WantedBy=default.target
Enter fullscreen mode Exit fullscreen mode

STEP 2 : Écrire le script

$ sudo nano /usr/local/bin/vlc-web-startup.sh
Enter fullscreen mode Exit fullscreen mode
#!/bin/bash

cvlc -I http --http-password pwd -q -L -R
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

STEP 4 : Permettre le lancement de VLC par root

sudo sed -i 's/geteuid/getppid/' /usr/bin/vlc
Enter fullscreen mode Exit fullscreen mode

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 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
Enter fullscreen mode Exit fullscreen mode

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

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 &
Enter fullscreen mode Exit fullscreen mode
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

Oldest comments (0)