Mardi 21 avril 2020 (Modifié le Mardi 21 avril 2020)

supysonic

gonic

Texte alternatif

FLOSS alternative to subsonic, supporting its many clients

La seule application qui accepte de fonctionner avec répertoires montés par FUSE. Cependant il faut modifier les autorisations de fusehttps://github.com/sentriz/gonic

Prérequis

  • Jeu de clé pour se lier via ssh au serveur de stockage xoyaz.xyz ssh -p 55036 -i /home/wgadmin/.ssh/xoyaz_ed25519 usernl@xoyaz.xyz
  • Installer sshfs pour les montages fuse sudo apt install sshfs

Caractéristiques

  • la navigation par dossier (en gardant votre arborescence complète intacte)
  • la navigation par balises (à l’aide de taglib - supporte mp3, opus, flac, ape, m4a, wav, etc.)
  • transcodage et mise en cache audio à la volée (nécessite ffmpeg) (merci spijet)
  • balayage assez rapide (avec ma bibliothèque de ~27k pistes, le balayage initial prend environ 10m, et environ 5s après de manière incrémentielle)
  • plusieurs utilisateurs, chacun ayant ses propres préférences de transcodage, ses listes de lecture, ses meilleures pistes, ses meilleurs artistes, etc.
  • last.fm scrobbling
  • similarités entre les artistes et biographies de la dernière api.fm
  • une interface web pour la configuration (configurer last.fm, gérer les utilisateurs, lancer des analyses, etc.)
  • un support pour le tag album-artist, pour ne pas encombrer votre liste d’artistes avec des apparitions d’albums de compilation
  • écrit en go, donc léger et adapté à un pi framboise, etc.
  • plus récent sel et token auth
  • testé sur dsub, jamstash, musique sublime et ondes sonores

gonic → wgvpn.ovh

Installation dans le répertoire utilisateur wgadmin

# dépendances
apt install build-essential golang git sqlite libtag1-dev ffmpeg # for debian like
# pacman -S base-devel git sqlite taglib ffmpeg             # for arch like
# construction , patienter
go get go.senan.xyz/gonic/cmd/gonic
  • Créer un dossier music pour le montage SSHFS mkdir ~/music
  • Autoriser l’accès “root” des supports FUSE
    • Ajoutez user_allow_other au fichier /etc/fuse.conf
    • Exécuter sshfs (ou toute autre commande de montage FUSE) avec l’option -o allow_root
  • Dans notre cas sshfs -o allow_root usernl@xoyaz.xyz:/home/usernl/backup/musique /home/wgadmin/music -C -p 55036 -oIdentityFile=/home/wgadmin/.ssh/xoyaz_ed25519

Proxy - configuration /etc/nginx/conf.d/nav.wgvpn.ovh.conf

# /etc/nginx/conf.d/nav.wgvpn.ovh.conf	
##
# Virtual Host nav.wgvpn.ovh (LMS)
##

server {
    listen 80;
    listen [::]:80;
	
    ## redirect http to https ##
    server_name nav.wgvpn.ovh;
    return  301 https://$server_name$request_uri;
}
	
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nav.wgvpn.ovh;

    include ssl_dh_header;

    access_log            /var/log/nginx/nav.wgvpn.ovh.log;

    proxy_request_buffering off;
    proxy_buffering off;
    proxy_buffer_size 4k;

    # Proxy navidrome server
    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://localhost:4533;
      proxy_read_timeout  120;
    }
	
}

Parefeu - ouverture des ports 80 et 443

sudo ufw allow http
sudo ufw allow https

gonic.sh - bash qui sera exécuté dans une fenêtre tmux (on verra pour un service)

nano ~/gonic.sh
sshfs -o allow_root usernl@xoyaz.xyz:/home/usernl/backup/musique /home/wgadmin/music -C -p 55036 -oIdentityFile=/home/wgadmin/.ssh/xoyaz_ed25519
export PATH=$PATH:$HOME/go/bin
export GONIC_PROXY_PREFIX=/
export GONIC_MUSIC_PATH=/home/wgadmin/music
gonic

Le rendre exécutable

chmod +x gonic.sh ./gonic.sh

Exécuter le bash ./gonic.sh

Texte alternatif

options

env var command line arg description
GONIC_MUSIC_PATH -music-path path to your music collection
GONIC_CACHE_PATH -cache-path optional path to store audio transcodes (default /tmp/gonic_cache)
GONIC_DB_PATH -db-path optional path to database file
GONIC_LISTEN_ADDR -listen-addr optional host and port to listen on (eg. 0.0.0.0:4747, 127.0.0.1:4747) (default 0.0.0.0:4747)
GONIC_PROXY_PREFIX -proxy-prefix optional url path prefix to use if behind reverse proxy. eg /gonic (see example configs below)
GONIC_SCAN_INTERVAL -scan-interval optional interval (in minutes) to check for new music (automatic scanning disabled if omitted)

LMS - Serveur de musique léger

LMS est un logiciel de streaming musical auto-hébergé : accédez à votre collection de musique de n’importe où en utilisant une interface web ! https://github.com/epoupon/lms

Caractéristiques principales

  • Faible besoin en mémoire (l’instance de démonstration fonctionne sur un Raspberry Pi3B+, utilisant moins de 10% de la mémoire totale même lors du transcodage)
  • Gestion des utilisateurs
  • Moteur de recommandation
  • Transcodage audio pour une interopérabilité maximale et des exigences de bande passante réduites
  • File d’attente persistante entre les sessions
  • API subsonic
  • Soutien à la compilation
  • Tags multi-valeurs : artistes, genres, …
  • Tags personnalisés (ex : mood, genre, albummood, albumgrouping, …)
  • Support de MusicBrainzID pour gérer les noms d’artistes et de sorties dupliqués
  • Intégration des systèmes
  • Caractéristiques subsoniques uniquement :
    • Playlists
    • Album/artiste/pistes vedettes
    • Signets

Découverte de la musique

La LMS propose plusieurs moyens de vous aider à trouver la musique que vous aimez :

  • Filtres à base de tags (ex : Rock, Metal et agressif, Electronique et relax, …)
  • Recommandations pour les artistes et albums similaires
  • Mode radio, basé sur le contenu de la pièce de théâtre actuelle
  • Recherche par nom d’album, d’artiste et de piste
  • Musique la plus jouée/récemment ajoutée

Le moteur de recommandation utilise deux sources différentes :

  • Les balises présentes dans les fichiers audio
  • Similitudes acoustiques des fichiers audio, à l’aide d’une carte auto-organisée

Notes sur la carte d’auto-organisation :

  • l’apprentissage de la carte nécessite un temps de calcul important sur les grandes collections (ex : une demi-heure pour des pistes de 40k)
  • les données audio acoustiques sont extraites de AcousticBrainz. Par conséquent, vos fichiers audio doivent contenir l’identifiant MusicBrainz.
  • Pour activer la source de similarité audio, vous devez d’abord l’activer dans le panneau de configuration.

API subsonic

La version API implémentée est la 1.12.0 et a été testée sur Android en utilisant l’application officielle, Ultrasonic et DSub.

Comme le LMS utilise des balises de métadonnées pour organiser la musique, un mode de compatibilité est utilisé pour naviguer dans la collection à l’aide des commandes de navigation dans les répertoires.

L’API Subsonic est activée par défaut.

Note : puisque le LMS stocke les mots de passe hachés et salés, il ne peut pas gérer la méthode d’authentification par jeton définie à partir de la version 1.13.0.

Installation

Paquets Debian Buster
Des paquets Buster sont prévus pour les architectures amd64 et armhf.

En tant que root, faites confiance au fournisseur de paquets debian suivant et ajoutez-le à votre liste de dépôts :

wget -O - https://debian.poupon.io/apt/debian/epoupon.gpg.key | apt-key add -
echo "deb https://debian.poupon.io/apt/debian buster main" > /etc/apt/sources.list.d/epoupon.list

Pour installer ou mettre à jour LMS :

apt update
apt install lms

Le service lms est lancé juste après l’installation du paquet, et est géré par un utilisateur système dédié lms
Veuillez vous référer à la section Déploiement pour d’autres options de configuration.

Déploiement

Note : n’oubliez pas de donner à l’utilisateur de lms un accès en lecture au répertoire musical que vous voulez scanner.

Configuration

Le LMS utilise un fichier de configuration, installé par défaut dans /etc/lms.conf. Il est recommandé d’éditer ce fichier et de modifier les paramètres pertinents (adresse d’écoute, port d’écoute, répertoire de travail, activation de l’API subsonique, chemin de déploiement, …).

/etc/lms.conf
# LMS Sample configuration file

# Path to the working directory
# Must have write privileges in order to create and modify this directory
working-dir = "/var/lms/";

# ffmpeg location
ffmpeg-file = "/usr/bin/ffmpeg";

# Log files, empty means stdout
log-file = "";
access-log-file = "";
# Logger configuration, see log-config in https://webtoolkit.eu/wt/doc/reference/html/overview.html#config_general
log-config = "* -debug -info:WebRequest";

# Listen port/addr of the web server
listen-port = 5082;
listen-addr = "0.0.0.0";
behind-reverse-proxy = false;

# Location for deployment
deploy-path = "/";

# If enabled, these files have to exist and have correct permissions
tls-enable = false;
tls-cert = "/var/lms/cert.pem";
tls-key = "/var/lms/privkey.pem";
tls-dh = "/var/lms/dh2048.pem";

# Path to the resources used by the web interface
wt-resources = "/usr/share/Wt/resources";
docroot = "/usr/share/lms/docroot/;/resources,/css,/images,/js,/favicon.ico";
approot = "/usr/share/lms/approot";

# Acoustic brainz's root API
acousticbrainz-api-url = "https://acousticbrainz.org/api/v1/";

# API
api-subsonic = true;

# Turn on this option to allow the demo account creation/use
demo = false;

# Max entries in the logging throttler (1 entry per client)
login-throttler-max-entries = 10000;

Tous les autres paramètres sont définis à l’aide de l’interface web (gestion des utilisateurs, paramètres d’analyse, paramètres de transcodage, …).

Si un paramètre n’est pas présent dans le fichier de configuration, une valeur par défaut codée en dur est utilisée (la même que dans le fichier default.conf)

paramètres du proxy

Le LMS est livré avec un serveur web intégré, mais il est recommandé de le déployer derrière un proxy inverse. Vous devez définir l’option behind-reverse-proxy à true dans le fichier de configuration lms.conf.

Voici un exemple pour faire fonctionner correctement le LMS sur lms.xoyize.xyz en utilisant nginx :

# /etc/nginx/conf.d/lms.xoyize.xyz.conf	
##
# Virtual Host lms.xoyize.xyz (LMS)
##

server {
    listen 80;
    listen [::]:80;
	
    ## redirect http to https ##
    server_name lms.xoyize.xyz;
    return  301 https://$server_name$request_uri;
}
	
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name lms.xoyize.xyz;

    include ssl_dh_header_ocsp;

    access_log            /var/log/nginx/myserver.access.log;

    proxy_request_buffering off;
    proxy_buffering off;
    proxy_buffer_size 4k;

    # Proxy LMS server
    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://localhost:5082;
      proxy_read_timeout  120;
    }
	
}

On relance le serveur nginx

sudo systemctl restart nginx
ocsp_cache

Le service lms

sudo systemctl start lms

Le site

https://lms.xoyize.xyz

Le dossier musique à scanner

Résultat du scan

Outils d’analyse des tags

En ligne de commande id3v2 et EasyTAG en mode graphique

Usage: id3v2 [OPTION]... [FILE]...
Adds/Modifies/Removes/Views id3v2 tags, modifies/converts/lists id3v1 tags

  -h,  --help               Display this help and exit
  -f,  --list-frames        Display all possible frames for id3v2
  -L,  --list-genres        Lists all id3v1 genres
  -v,  --version            Display version information and exit
  -l,  --list               Lists the tag(s) on the file(s)
  -d,  --delete-v2          Deletes id3v2 tags
  -s,  --delete-v1          Deletes id3v1 tags
  -D,  --delete-all         Deletes both id3v1 and id3v2 tags
  -C,  --convert            Converts id3v1 tag to id3v2
  -1,  --id3v1-only         Writes only id3v1 tag
  -2,  --id3v2-only         Writes only id3v2 tag
  -r,  --remove-frame "FRAMEID"   Removes the specified id3v2 frame
  -a,  --artist       "ARTIST"    Set the artist information
  -A,  --album        "ALBUM"     Set the album title information
  -t,  --song         "SONG"      Set the song title information
  -c,  --comment      "DESCRIPTION":"COMMENT":"LANGUAGE"  
                            Set the comment information (both
                            description and language optional)
  -g,  --genre   num        Set the genre number
  -y,  --year    num        Set the year
  -T,  --track   num/num    Set the track number/(optional) total tracks

You can set the value for any id3v2 frame by using '--' and then frame id
For example: 
        id3v2 --TIT3 "Monkey!" file.mp3
would set the "Subtitle/Description" frame to "Monkey!". 

Navidrome Music Streamer

Last Release Build Docker Pulls Dev Chat Subreddit

Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device. It’s like your personal Spotify!

Any feedback is welcome! If you need/want a new feature, find a bug or think of any way to improve Navidrome, please fill a GitHub issue or join the discussion in our Subreddit. If you want to contribute to the project in any other way (ui/backend dev, translations, themes), please join the chat in our Discord server.

Features

  • Handles very large music collections
  • Streams virtually any audio format available
  • Reads and uses all your beautifully curated metadata (id3 tags)
  • Multi-user, each user has their own play counts, playlists, favourites, etc..
  • Very low resource usage: Ex: with a library of 300GB (~29000 songs), it uses less than 50MB of RAM
  • Multi-platform, runs on macOS, Linux and Windows. Docker images are also provided
  • Ready to use Raspberry Pi binaries available
  • Automatically monitors your library for changes, importing new files and reloading new metadata
  • Themeable, modern and responsive Web interface based on Material UI, to manage users and browse your library
  • Compatible with all Subsonic/Madsonic/Airsonic clients. See bellow for a list of tested clients
  • Transcoding/Downsampling on-the-fly. Can be set per user/player. Opus encoding is supported
  • Integrated music player (WIP)

Navidrome should be compatible with all Subsonic clients. The following clients are tested and confirmed to work properly:

For more options, look at the list of clients maintained by the Airsonic project. Please open an issue if you have any trouble with the client of your choice.

Road map

This project is being actively worked on. Expect a more polished experience and new features/releases on a frequent basis. Some upcoming features planned:

  • Complete WebUI, to browse and listen to your library
  • Last.FM integration
  • Smart/dynamic playlists (similar to iTunes)
  • Support for audiobooks (bookmarking)
  • Jukebox mode
  • Sharing links to albums/songs/playlists
  • Podcasts

Installation

Various options are available:

Pre-built executables

Just head to the releases page and download the latest version for you platform. There are builds available for Linux (amd64 and arm), macOS and Windows (32 and 64 bits). For Raspberry Pi (tested with Raspbian Buster on Pi 4), use the Linux arm builds.

Remember to install ffmpeg in your system, a requirement for Navidrome to work properly. You may find the latest static build for your platform here: https://johnvansickle.com/ffmpeg/

If you have any issues with these binaries, or need a binary for a different platform, please open an issue

Docker

Docker images are available. They include everything needed to run Navidrome. Example of usage:

# This is just an example. Customize it to your needs.

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    ports:
      - "4533:4533"
    environment:
      # All options with their default values:
      ND_MUSICFOLDER: /music
      ND_DATAFOLDER: /data
      ND_SCANINTERVAL: 1m
      ND_LOGLEVEL: info  
      ND_PORT: 4533
      ND_TRANSCODINGCACHESIZE: 100MB
      ND_SESSIONTIMEOUT: 30m
      ND_BASEURL: ""
    volumes:
      - "./data:/data"
      - "/path/to/your/music/folder:/music:ro"

To get the cutting-edge, latest version from master, use the image deluan/navidrome:develop

Build from source

You will need to install Go 1.14 and Node 13.12.0. You’ll also need ffmpeg installed in your system. The setup is very strict, and the steps bellow only work with these specific versions (enforced in the Makefile)

After the prerequisites above are installed, clone this repository and build the application with:

$ git clone https://github.com/deluan/navidrome
$ cd navidrome
$ make setup        # Install tools required for Navidrome's development 
$ make buildall     # Build UI and server, generates a single executable

This will generate the navidrome executable binary in the project’s root folder.

Running for the first time

Start the server with:

./navidrome

The server should start listening for requests on the default port 4533

After starting Navidrome for the first time, go to http://localhost:4533. It will ask you to create your first admin user.

For more options, run navidrome --help

Running as a service

Check the contrib folder for startup files for your init system.

Screenshots

Subsonic API Version Compatibility

Check the up to date compatibility table for the latest Subsonic features available.