Configuration#

Radiotomate est configuré par des fichiers YAML. L'installeur génère des fichiers qui vous permettent de démarrer, cette section liste toutes les options possibles. Les fichiers contiennent aussi des commentaires (les lignes commençant par #) pour vous aider à le lire. Si vous n'avez jamais utilisé YAML, cela vaut probablement la peine de passer quelques minutes sur un tutoriel YAML.

Radiotomate utilise deux fichiers de configuration :

  • radiotomate_data/radiotomate.yaml pour les paramètres généraux
  • radiotomate_data/Beets/config.yaml pour la bibliothèque musicale.

Nous commençons par les paramètres généraux.

Configuration du flux#

La génération du flux est configurée par le nœud playout_process_config. Cette section liste toutes les options disponibles avant de donner un exemple complet.

Configuration des sorties#

Radiotomate peut diffuser indéfiniment une fois qu'il a de la musique et des jingles, mais vous devez configurer diffuser ce flux sonore. Cela se fait dans le nœud outputs, qui doit contenir une séquence de mappings. Chaque mapping définit une sortie, dont le nœud driver doit être

  • pulseaudio pour les cartes son,
  • ou icecast.

Cartes son#

Si votre machine n'a qu'une seule carte son, définir driver: pulseaudio devrait suffire et vous permettra de configurer la sortie avec votre interface de mixage habituelle.

Si vous avez plusieurs cartes son, vous pouvez définir explicitement le nom de la sortie dont vous avez besoin en ajoutant un nœud device avec le driver. Utilisez pactl list pour trouver les noms des cartes.

Il existe aussi driver: alsa, mais cela suppose que la configuration de votre conteneur permet au conteneur "playout" d'accéder aux cartes alsa. Si vous y parvenez, veuillez nous le signaler afin que nous puissions le documenter.

Sorties Icecast#

Envoyer vers Icecast nécessite davantage de paramètres, au minimum host, port, mount et password. Si le serveur Icecast est sur la même machine, définissez host à host.containers.internal (localhost ou 127.0.0.1 ne fonctionneront pas car nous exécutons Radiotomate dans des conteneurs).

Vous devez également choisir un encoder et définir sa quality. Vous pouvez utiliser les encodeurs suivants :

  • mp3cbr, pour un MP3 à débit constant, selon quality. Nous conseillons quality: 192, mais les valeurs habituelles entre 128 et 320 sont possibles.
  • mp3vbr, pour un MP3 à débit variable. Nous conseillons quality: 2, vous pouvez choisir n'importe quelle valeur entre 0 (meilleur) et 9 (pire).
  • flac pour du FLAC 16 bits. Dans ce cas quality définit le niveau de compression, choisissez une valeur entre 0 (faible, rapide) et 8 (meilleure, consomme plus de CPU).
  • vorbiscbr pour de l'Ogg Vorbis à un débit constant défini par quality. Nous conseillons quality: 160, mais les valeurs habituelles entre 128 et 320 conviennent.
  • vorbisvbr pour de l'Ogg Vorbis à débit variable, selon quality. Nous conseillons quality: 0.3, mais vous pouvez définir des valeurs entre 0.1 (pire) et 0.9 (meilleur).
  • wav pour un flux PCM brut. quality est ignoré.

Options du flux de direct#

Les sous-nœuds préfixés par input_ configurent l'entrée de flux en direct :

    input_name: "stream"
    input_min_buffer: 5.
    input_max_buffer: 30.

input_name est l'équivalent du point de montage Icecast. Les deux autres options définissent la durée (en secondes) qui doit être mise en tampon avant que l'entrée soit considérée comme active. Ce tampon implique que Radiotomate introduira un délai entre le flux d'entrée et l'émission. Utiliser les paramètres par défaut ci-dessus signifie que les programmes seront en retard de 5 à 30 secondes. Ce tampon sert à compenser les éventuelles pertes de connexion. Si vous avez habituellement des connexions de bonne qualité, vous pouvez envisager de réduire ces valeurs, mais nous vous conseillons de le faire progressivement.

Cette entrée sera connectée au port défini par la configuration des conteneurs, par défaut 6800.

Délai minimal entre deux jingles#

Lorsque l'auto-DJ est actif il insère des jingles régulièrement, entre les chansons. Ce paramètre définit le nombre minimal de secondes entre deux jingles :

    jingles_delay: 780.

Espacement par artiste#

autodj_artist_distance est la durée minimum (en secondes) laissée par l'auto-DJ entre deux pistes d'un même artiste. Ce comportement est détaillé dans la section auto-DJ.

Son de démarrage#

start_sound est le chemin vers le fichier que Radiotomate doit jouer au démarrage.

    start_sound: /home/username/radiotomate_data/default_start_sound.wav

Il doit être situé dans le dossier racine. Vous pouvez remplacer le fichier par défaut par un jingle spécifique, ou le désactiver en le laissant vide ou en supprimant ce fichier, mais nous vous conseillons d'émettre un son spécifique au démarrage.

Chemin du journal#

Le chemin du journal spécifique au lecteur ("playout") est défini par :

    log_path: /home/username/radiotomate_data/playout.log

Ce fichier doit être dans un dossier où le processus de lecture peut écrire, nous conseillons donc de le garder dans le dossier racine.

Jeton inter-processus#

Ce bloc contient également un secret utilisé par les applications de Radiotomate lorsqu'elles communiquent entre elles :

    token: b58f90045b88f583e061a9c35a82ecd1cac4f708664e266ff024cbee2ea101a2

En production, cette valeur doit être définie via la variable d'environnement RT_TOKEN (généralement configurée dans le manifeste du pod) ; le champ token n'est lu que lorsque la variable est absente, ce qui est pratique pour le développement et les tests. Vous devez vous assurer que ce secret n'est pas lisible de l'extérieur — en particulier, veillez à le supprimer lorsque vous demandez de l'aide.

Un exemple complet#

Voici un playout_process_config complet qui définit 3 sorties :

playout_process_config:
    outputs:
        - driver: pulseaudio
          device: "alsa_output.pci-0000_80_01.0.analog-stereo"
        - driver: icecast
          encoder: mp3cbr
          quality: 192
          host: "host.containers.internal"
          port: 9000
          mount: "radio.mp3"
          password: "topsecret"
        - driver: icecast
          encoder: vorbisvbr
          quality: 0.1
          host: "backup.myradio.fm"
          port: 9876
          mount: "radio.ogg"
          password: "anothersecret"
    jingles_delay: 780.
    input_name: "stream"
    input_min_buffer: 5.
    input_max_buffer: 30.
    start_sound: /home/username/radiotomate_data/default_start_sound.wav
    autodj_artist_distance: 3600
    log_path: /home/username/radiotomate_data/playout.log
    token: b58f90045b88f583e061a9c35a82ecd1cac4f708664e266ff024cbee2ea101a2

Retard maximal au démarrage#

Nouvelle option dans les versions à venir :

Parfois une cartouche est programmée pour être jouée mais ne peut pas démarrer car un flux en direct est en cours. Ce paramètre doit définir un délai maximal après lequel Radiotomate abandonnera la lecture de cette cartouche.

Historique et relais des métadonnées#

Radiotomate garde une trace de ce qui a été diffusé, en stockant les métadonnées de chaque piste et l'heure exacte à laquelle elle a été diffusée. Tout cela est ensuite disponible dans l'onglet « Historique ». Les paramètres sous le nœud metadata_log vous permettent de choisir ce qui est stocké, et si le système doit relayer ces métadonnées vers un service externe. Par exemple :

metadata_log:
    extra_fields:
        - genre
        - year

    relay_to:
        - url: "https://website.radio/playlist/add_item"
          add_field:
              SECRET_KEY: "secret value"
              SOURCE_NAME: "radiotomate"
          add_header:
              Authorization: "Basic YWxhZGRpbjpvcGVuc2VzYW1l"
        - url: "https://website.radio/playlist/add_item"
          add_header:
              Authorization: "Basic YWxhZGRpbjpvcGVuc2VzYW1l"

Par défaut, Radiotomate ne stocke que les métadonnées artist et title ainsi que des informations internes. Si vous souhaitez conserver des champs supplémentaires, par exemple pour extraire régulièrement des statistiques, vous pouvez les lister dans extra_fields.

Pour chaque url dans relay_to, Radiotomate enverra une requête HTTP POST vers l'URL indiquée à chaque fois que le lecteur démarre une nouvelle piste. Il transmet les mêmes champs que ceux stockés dans le journal des métadonnées (y compris ceux listés dans extra_fields), chacun étant envoyé comme un champ de formulaire. Comme vous devez probablement sécuriser cet endpoint, la configuration vous permet de définir des en-têtes HTTP supplémentaires avec add_header, ou des champs de formulaire supplémentaires avec add_field. add_field et add_header sont optionnels et peuvent être entièrement omis si vous n'en avez pas besoin ; vous pouvez aussi utiliser les deux pour une même URL.

Racine#

Le nœud data doit contenir un nœud root indiquant le chemin vers le dossier racine. Il contiendra les sons téléchargés.

data:
    root: /home/username/radiotomate_data

L'installeur placera tout (y compris le fichier de configuration) dans ce dossier, cette option permet des configurations plus complexes.

Configuration de la base de données#

Le nœud db est un objet de configuration de moteur SQLAlchemy. Si vous souhaitez modifier cette partie, nous vous renvoyons à leur documentation, mais dans la plupart des cas vous souhaitez simplement conserver l'url définie par l'installeur. Pour déboguer, vous pouvez définir echo à true pour rendre visible les requêtes à la base.

db:
    url: "sqlite+aiosqlite:////home/martin/radiotomate/radio_data/radiotomate.db"
    echo: false

Paramètres de l'interface#

Le noeud interface ressemble à:

interface:
    cookie_salt: f301a56bd981633d596617529cd65676d79888051d6a45659781c899df4fe40b
    locale: fr
    interface_name: "Radiotomate"
    minimum_password_length: 20
    music_default_query: "added:-1m.."

locale définit la langue utilisée dans l'interface. Vous pouvez choisir entre en (Anglais) et fr (Français).

cookie_salt est une valeur secrète qui sécurise les cookies identifiant les sessions des utilisateurs dans l'interface Web publique. En production, cette valeur doit être définie via la variable d'environnement RT_COOKIE_SALT (généralement configurée dans le manifeste du pod) ; le champ cookie_salt n'est lu que lorsque la variable est absente, ce qui est pratique pour le développement et les tests. S'il a été publié par erreur, changez cette valeur rapidement et redémarrez Radiotomate (les utilisateurs devront se reconnecter).

interface_name définit le nom affiché en haut à gauche dans l'interface Web. Vous pouvez mettre le nom de votre radio.

minimum_password_length définit le nombre minimal de caractères requis pour les mots de passe des utilisateurs. Laissez-les longs et utilisez des phrases de passe, car un compte utilisateur compromis peut pirater tous vos programmes !

music_default_query définit la requête par défaut dans l'onglet "musique". Utilisez la syntaxe de requête de Beets.

Configuration de la journalisation du scheduler et de l'interface#

Le nœud logging définit où et comment les programmes scheduler et interface journalisent. C'est une configuration du module Python "logging". Vous pourriez vouloir changer leur chemin ou leur level, qui peut être défini à ERROR, WARNING, INFO ou DEBUG (du plus silencieux au plus verbeux).

Bibliothèque musicale#

Dans Radiotomate, la bibliothèque musicale est en réalité gérée par Beets, qui a son propre fichier de configuration. Par défaut, il est situé dans radiotomate_data/Beets/config.yaml.

Supprimer les paramètres définis par l'installeur pourrait perturber l'auto-DJ. Mais vous pouvez activer des plug-ins ou définir des options supplémentaires dans ce fichier. Vous pourriez être intéressé par le réglage de la dropbox ou du niveau de volume sonore, indiqués ci-dessous.

La dropbox musicale#

L'installeur de Radiotomate activera et démarrera le plug-in drop2beets. Il surveille les nouveaux fichiers dans un dossier : tout fichier musical déposé dedans sera automatiquement intégré à la bibliothèque après une dizaine de secondes. Vous pouvez partager ce dossier sur le réseau local de votre radio (avec Samba ou NFS) pour faciliter l'insertion de musique depuis d'autres postes de travail (si vous souhaitez changer ce dossier, vous devrez également mettre à jour la configuration du conteneur exécutant la surveillance de la dropbox ; il est probablement plus facile de configurer Samba pour partager directement le dossier par défaut).

Par défaut, le dossier est radiotomate_data/MusicDropbox/. Le plug-in vous permet d'écrire des fonctions personnalisées pour tagger les fichiers. Par exemple, vous pouvez forcer le genre ou la language d'une piste selon le sous-dossier dans lequel elle a été déposée. Cf. la documentation de drop2beets.

Régler le niveau sonore de la radio avec replaygain#

Lorsqu'il reçoit un fichier sonore, Radiotomate calcule son volume moyen. À l'avenir, le fichier sera joué avec un gain corrigé (sans ré-encodage), pour garantir que votre flux ait un volume assez constant.

Ceci est effectué via le plug-in replaygain de Beets. Ce calcul se déroule en arrière-plan. Il prend au plus quelques secondes, mais le son sera considéré comme indisponible jusqu'à ce qu'il soit calculé. Ne tentez donc pas d'ajouter un son à une cartouche qui jouera 3 secondes plus tard 😉

Notez que Radiotomate réutilise ceci pour les cartouches sonores également, donc les jingles et les émissions pré-enregistrées sont aussi ajustés selon ce niveau cible. Cela signifie que l'option targetlevel de Beets définit le niveau sonore de toute la radio.

Configuration des conteneurs et du pod#

Si vous souhaitez déplacer des dossiers après l'installation, vous devrez probablement aussi mettre à jour la configuration des conteneurs.

Par défaut, les conteneurs de Radiotomate s'exécutent dans un pod en tant que quadlets. Tout est défini depuis un manifeste de pod compatible avec Kubernetes situé par défaut dans radiotomate_data/radiotomate_pod_manifest.yaml.