JoeSing
Un karaoké personnel via Spotify : il suit le morceau que vous écoutez et affiche les paroles synchronisées mot par mot, pensé pour la télé du salon.
Le problème
Le karaoké à la maison se fait mal : des vidéos au son médiocre avec de la publicité, ou des pistes à acheter. Qui a Spotify Premium a déjà le catalogue ; il ne manquait que les paroles, synchronisées et lisibles à trois mètres.
En 2026, Spotify limite les applications indépendantes à cinq comptes et ne permet plus de vérifier le Premium depuis le profil. La contrainte est devenue le design : chaque utilisateur enregistre sa propre application Spotify et colle son Client ID, le quota est donc le sien et le Premium se vérifie de lui-même à la connexion.
Comment ça marche
Structure
Le navigateur ne parle jamais à Spotify : un processus PHP interroge Spotify une fois par compte et garde l'état en base de données, et tous les écrans lisent là. On n'interroge que les comptes qui ont un écran ouvert, plus souvent vers la fin du morceau.
Parcours d'usage
Un assistant en quatre étapes guide la création de l'application Spotify, avec l'adresse de retour à copier d'un clic. Ensuite il suffit de lancer la lecture sur Spotify : JoeSing reconnaît le morceau, charge les paroles et les affiche en plein écran, avec des styles personnalisables.
Choix techniques
OAuth avec PKCE, sans jamais demander le Client Secret ; jetons chiffrés en AES-256-GCM. La position dans le morceau est recalculée à chaque image à partir de la dernière mesure du serveur, pour que l'erreur ne s'accumule pas. Les paroles viennent de LRCLIB : synchronisées quand elles existent, statiques à défaut.
Limites connues
Il faut Spotify Premium et un peu d'aisance pour créer l'application sur le portail développeurs. L'offre Pro se paie par virement, confirmé à la main : pas de paiement par carte.
Chiffres
| Lignes de PHP, environ | 18 000 |
|---|---|
| Lignes de JavaScript, environ | 7 400 |
| Tables dédiées | 22 |
| Classes du module | 23 |
| Vérifications automatiques, environ | 450 |
Stack
- PHP 8
- MariaDB
- JoeCMS
- JavaScript
- Spotify Web API
- LRCLIB
- systemd