Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

AudioHijack - Le son inaudible qui pirate votre assistant IA

Meng Chen, doctorant à l'université Zhejiang, vient de prouver avec son équipe qu'on pouvait complétement détourner un assistant vocal IA avec un simple son que vous prendriez probablement pour un simple parasite. Avec sa bidouille, il a ainsi réussi à pousser les agents vocaux commerciaux de Microsoft et de Mistral à exécuter des actions que personne ne leur avait demandées.

Gloups !

L'attaque s'appelle AudioHijack, et ça consiste à planquer des ordres dans un fichier audio, une vidéo, un clip musical, une note vocale. Comme ça, le modèle qui l'écoutera vous obéira à VOUS, plutôt qu'à l'utilisateur. C'est comme une injection de prompt sauf que celle-ci s'entend à peine.

"Une demi-heure pour entraîner le signal, et comme il ignore le contexte, vous attaquez quand vous voulez, peu importe ce que dit l'utilisateur", résume Chen dans son interview . Reste qu'il faut un accès complet au modèle pour fabriquer le signal, ce que Microsoft et Mistral ne donnent pas. Alors il suffit à l'attaquant de l'entraîner sur un modèle ouvert qu'il contrôle, puis de rejouer le même signal contre le modèle fermé et en général, ça se passe bien parce qu'ils partagent souvent les mêmes briques audio.

Voilà et ça une fois que c'est fait, il suffit de "polluer" une source, et d'attendre qu'un poisson morde à l'hameçon...

Et le menu des possibilités est plutôt copieux vous allez voir. Le modèle peut par exemple prétendre qu'il ne sait pas traiter l'audio, refuser vos demandes, sortir de fausses infos, glisser un lien piégé, changer de personnalité, ou pire, déclencher des outils tout seul. Genre envoyer un mail avec vos données, ou télécharger un fichier depuis un serveur de l'attaquant s'il en a la possibilité technique (coucou MCP). Ainsi, sur les treize modèles testés, la réussite moyenne grimpe entre 79 et 96% selon le méfait.

Mais pour fabriquer ce signal vérolé, l'attaquant doit sentir dans quelle direction "pousser" le son pour rapprocher le modèle de son but, un peu comme suivre une pente vers le bas.

Sauf que ces modèles transforment l'audio en le découpant par exemple. Et la pente peut du coup devenir un escalier, puis du plat, voire une arête cassante... c'est clairement impossible à suivre ! Mais l'équipe de Chen a réussi à reconstituer cette pente à grand coups d'échantillonnage, puis a maquillé le bruit en réverbération.

Et comme notre oreille est trop limitée pour flairer l'anomalie, ça passe tranquille... Je vous avais déjà parlé de l'injection de prompt avec une simple doc empoisonnée qui pilote une IA , mais là, ça pourrait même surgir de la bande son d'une simple vidéo Youtube...

Et pour se protéger de ça, y'a pas grand chose à faire à part faire relire le prompt final... Le plus sûr, c'est donc plutôt de ne pas brancher votre assistant vocal sur vos mails, vos fichiers ou vos paiements, et de regarder plus en détails ce qui se passe s'il refuse soudainement une tâche ou vous sort un lien après avoir écouté un audio douteux...

De leur côté, les modèles fermés d'OpenAI ou d'Anthropic sont plus durs à viser, faute d'accès à l'architecture mais comme ils s'appuient aussi sur des briques audio open source, l'équipe de Meng pense que l'attaque pourrait se faire aussi.

Méfiance donc...

Source

Sortie de SongRec 0.6 : Shazam, ouvre-toi !

La version 0.6 de SongRec, application de bureau permettant la reconnaissance de titres audio sur la base d’échantillons audio ou simplement du microphone, a eu l’honneur de venir au monde en ce début d’année, avec une toute nouvelle interface entérinant la migration de GTK+ 3 à 4. Elle est d’ores et déjà disponible sur Flathub et le Snap Store.

Au menu : une intégration du langage d’interface Adwaita, une option pour minimiser l’application dans la barre de tâches via l’API DBus KSNI, une interface plus claire avec quelques paramètres, la mise à jour des dépendances avec notamment l’utilisation des bindings Rust de Libsoup3 pour le réseau afin de permettre une meilleure intégration au bureau, l’intégration de Weblate pour les traductions, et une candidature pour rejoindre Gnome Circle.

La migration de GTK-3 vers GTK-4

Dépoussiérée, l’interface de SongRec s’offre une cure de jouvence.

Avant la transition…
Avant la transition…

…et après la transition
Après

L’objectif a été de suivre les lignes directrices d’interface humaine de GNOME au mieux, notamment afin de s’aligner sur les critères d’inclusion GNOME Circle.

La nouvelle interface basée sur la plateforme Adwaita est donc mieux intégrée au bureau GNOME 3, et utilise des bibliothèques plus modernes et mises à jour.

L’interface a été refaite avec l’outil de conception d’interface (RAD) Cambalache, successeur du défunt Glade, qui vient tout juste de sortir en version 1.0.

Weblate, pour la traduction c’est + puissant

Une instance de la plateforme de traduction Weblate a été mise en ligne, afin de répondre au mieux aux besoins d’internationalisation plus simple sur le projet. SongRec est ainsi maintenant disponible en 16 langues, qui sont en partie à jour, et peut être traduit sans compte Github.

Auparavant, les fichiers .po étaient traduits manuellement en utilisant le système de pull requests Github. Désormais, une plateforme de traduction auto-hébergée est utilisée.

La simplicité d’installation de Weblate, application basée sur Django et compatible avec uWSGI, est appréciée.

Oh Snap !

SongRec est aussi maintenant disponible, en plus d’une distribution par PPA, dans les dépôts extra d’Arch Linux et sur Flathub, mais aussi désormais via le Snap Store.

L’intégration au Snap Store a été bien moins aisée que celle à Flathub, voire tellement frustrante que cinq ans et demi sont passés entre la première tentative d’intégrer la bibliothèque multi-plateforme Rust CPAL qui utilise pour seul backend sous Linux ALSA (plus précisément libasound et donc les couches de compatibilité associées avec PipeWire et Pulseaudio) et la production d’une solution fonctionnelle pour ce paquet.

Heureusement, CPAL 0.18 qui devrait intégrer la compatibilité native avec PulseAudio et PipeWire devrait sortir incessamment sous peu…

 La notification 🔔

Aussi, sur demande de la base utilisatrice, il est désormais possible de réduire SongRec dans la zone de notifications, en utilisant l’API DBus KSNI, un standard produit par KDE transcendant les environnements de bureau qui tend à remplacer libappindicator et son successeur libayatana-appindicator, portés par Canonical, qui dépendent de GTK-3 et ne sont plus intégrés à GTK-4.

L’autre alternative compatible avec GTK-4 qui permet de réduire les applications en fond, l’API DBus FreeDesktop background portal XDG, semble en effet comporter des bugs et n'être pas tout à fait mature.

La fenêtre de préférences de SongRec
La fenêtre de préférences de SongRec.

Un arrêt maladie bien occupé

La contribution de SongRec est ouverte à tout le monde et soumise au simple respect du code de conduite GNOME. Un canal Matrix, alternative non centralisée à Discord a de plus été mis en place pour permettre une collaboration plus aisée, en dehors des issues Git.

Fait main et artisanale, cette application produite sans IA générative aucune ne demande que vos petites mains pour continuer à fonctionner.

Elle utilise actuellement les services d’Apple, avec des API identifiées sur la base de l’analyse de l’application Android au titre de l’interopérabilité, tout comme les projets VLC ou FFMpeg, français, intègrent leurs propres implémentations des formats du consortium MPEG, sur la base des exceptions de droit d’auteur permises en droit français au titre d’interopérabilité et notamment l’avis du Conseil d’État du 16 juillet 2008, qui confirme la protection du développement de logiciels libres à cette fin.

Le brevet d’origine derrière l’algorithme de création d’empreinte de Shazam, qui en tant que brevet logiciel n’a jamais été valable dans l’UE, est expiré, et son fonctionnement est également documenté depuis un certain temps.

Son fonctionnement est, brièvement, de produire un spectrogramme audio (soit une grille présentant les fréquences sur un axe et le temps sur l’autre) à partir des dernières secondes d’audio captées par l’utilisateur ou l’utilisatrice, et l’amplitude aux intersections. Les pics d’amplitude audio importants sont ensuite identifiés et transmis aux serveurs d’Apple.

Un spectrogramme audio
Un spectrogramme audio - de Wikimedia Commons, par Aquegg, le 21 décembre 2008, domaine public

Ainsi, l’audio complet n’est en aucun cas communiqué aux serveurs distants, et votre vie privée est respectée.

La liste des contributeurs et contributrices est disponible ici.

N’hésitez donc pas si vous souhaitez participer à la maintenance et au développement de cette application sous licence GPL v3 !

Commentaires : voir le flux Atom ouvrir dans le navigateur

Demucs-rs - Séparez vos morceaux en stems depuis le navigateur

Séparer la voix, la batterie ou la basse d'un morceau, ça relevait du rêve d'audiophile il y a encore quelques années. Fallait installer Python, se taper Spleeter, galérer avec les dépendances CUDA... bref, un super truc de barbu. Mais ça, c'était avant, les amis !

Demucs-rs , une réécriture en Rust du modèle HTDemucs v4 de Meta, tourne maintenant directement dans votre navigateur grâce au WebGPU. Batterie, basse, voix, tout le reste..., chaque élément se retrouve ainsi isolé dans son propre fichier WAV. Et y'a rien à installer, puisque tout se passe côté client, sur votre machine.

Pour vous en servir, vous pouvez aller sur la web app , vous glissez-déposez votre fichier MP3 (ou WAV, FLAC, OGG, M4A... ça bouffe à peu près tout), et vous patientez... Le premier lancement télécharge le modèle (~84 Mo pour le standard), donc prévoyez une connexion correcte.

L'interface de la web app - vous glissez votre fichier et c'est parti

Comptez alors quelques minutes selon la durée du morceau. En sortie, vous aurez alors plusieurs fichiers WAV séparés que vous pourrez écouter, jouer en solo ou télécharger individuellement.

Les pistes séparées, prêtes à écouter ou télécharger

Trois modèles sont dispos. Le mode 4 pistes suffit dans 90% des cas. Il y a aussi le modèle 6 stems, ou plutôt htdemucs_6s, qui est pas mal pour du rock ou du jazz. Et pour les obsessionnels de la qualité, y'a le fine-tuned à 333 Mo... mais prévoyez une pause café, parce que ça va être long de fou !

Voilà, comme ça, si vous voulez faire un karaoké maison, vous virez la voix et vous gardez l'instrumental. Ou si votre truc c'est de sampler une ligne de basse d'un vieux morceau de funk ou encore pratiquer la guitare en jouant par-dessus le morceau original sans la partie guitare, c'est entièrement possible !

D'ailleurs, si vous aviez testé Spleeter avec Ableton à l'époque, c'est le même principe mais en BEAUCOUP plus simple !!

Perso, le fait que ça tourne dans le navigateur, c'est top, sans parler du fait que vos morceaux restent sur votre disque.

Maintenant, si la version navigateur vous semble un peu longue, y'a le CLI natif qui exploite Metal sur Mac et Vulkan sur Linux/Windows. Pour l'installer, clonez le repo et lancez make cli (Rust requis) :

git clone https://github.com/nikhilunni/demucs-rs
cd demucs-rs && make cli

Le binaire atterrit dans target/release/demucs, 24 Mo. Le modèle se télécharge au premier lancement.

Côté utilisation, c'est du gâteau :

demucs song.mp3 # 4 pistes dans ./stems/
demucs -s vocals chanson.mp3 # juste la voix
demucs -m htdemucs_6s -s guitar solo.flac # isoler la guitare
demucs -m htdemucs_ft morceau.mp3 # qualité max

En sortie, chaque stem est un fichier WAV. Vous virez le vocals.wav, vous gardez le reste... et tadaaa, karaoké instantané pour votre voix de casserole ! C'est carrément plus rapide qu'en WebAssembly.

Et si vous bossez dans un DAW sur macOS, y'a aussi un plugin VST3/CLAP pour faire la séparation directement dans Logic ou Reaper (sauf que bon, c'est macOS only pour l'instant, quoi).

Après sachez que sur certains passages très chargés, la voix peut baver un peu dans la piste "other" ou inversement mais pour du remix amateur ou du sampling, ça suffit largement !

D'ailleurs, j'sais pas si vous vous souvenez, mais les plugins IA d'Audacity embarquent aussi Demucs v4. Mais là avec Demucs-rs c'est natif et surtout indépendant d'Audacity.

Et bien sûr, tout est open source sous licence Apache 2.0 !

Amusez-vous bien !

Footywhoops – Un synthé codé en Go qui génère des patterns musicaux à la volée

Faire du bruit avec du code, c'est un peu le graal pour tout dev qui aime la musique. On connaît tous les gros trucs en C++ ou les frameworks spécialisés, mais voir débarquer un synthé complet codé en Go, c'est toujours une petite surprise qui se déguste sans modération.

Son nom : Footywhoops .

C'est un couteau suisse sonore que vous pilotez directement depuis votre terminal et qui permet de générer des séquences de batterie, des lignes de basse (un mode "Acid Bass" bien gras avec sub-oscillateur et enveloppes ADSR est de la partie), des arpèges et des mélodies. Le tout peut être calé sur différentes gammes musicales (majeure, mineure, dorienne, blues, etc.) pour éviter de finir avec une cacophonie insupportable. On est un peu dans l'esprit du live coding musical comme ce que propose Strudel ou Dittytoy , mais version ligne de commande.

Sous le capot, c'est du sérieux niveau DSP (Digital Signal Processing) puisqu'on y trouve une réverbération de type Schroeder pour donner de l'espace, plusieurs algorithmes de distorsion (Tanh, Atan, hard clipping) pour salir le signal, et un filtre passe-bas pour sculpter la tonalité. Et pour ceux qui se demanderaient quel est le meilleur langage pour la programmation audio, le C++ reste le roi pour la performance pure, mais Go s'en sort étonnamment bien ici grâce à sa gestion efficace de la concurrence (coucou les goroutines) et l'utilisation de PortAudio pour l'I/O audio. On a d'ailleurs vu d'autres outils sympas en Go récemment, comme SSHM qui utilise le framework Bubble Tea pour son interface terminal.

Le truc est super léger et s'installe en deux minutes si vous avez l'environnement Go prêt sur votre machine. Vous pouvez même enregistrer vos expérimentations directement en WAV (dry ou wet) sans avoir besoin de passer par une DAW (Digital Audio Workstation). D'ailleurs, si vous cherchez des ressources pour faire de la musique sous pingouin, n'hésitez pas à consulter ce catalogue audio pour Linux .

Et si vous avez envie de tester ce petit monstre, voici comment vous lancer.

Pour commencer, vous aurez besoin de Go 1.19 ou plus et des bibliothèques de développement de PortAudio sur votre système.

1. Installation des dépendances

Sur macOS :

brew install portaudio

Sur Ubuntu/Debian :

sudo apt-get install portaudio19-dev

2. Compilation du projet

Récupérez le code et compilez l'exécutable :

git clone https://github.com/system32-ai/footywhoops
cd footywhoops
go build

3. Exemples d'utilisation

Pour lancer une génération automatique de mélodie et de batterie (le mode "standalone") :

./footywhoops -mode synth

Si vous voulez utiliser Footywhoops comme un processeur d'effets (par exemple pour traiter le son de votre micro ou d'une guitare branchée sur votre interface) :

./footywhoops -mode fx -dist 0.8 -reverb 0.5

Vous pouvez évidemment jouer avec plein de paramètres en CLI pour ajuster le son (fréquence du filtre, type de distorsion, taille de la réverb, etc.). Pour voir toutes les options disponibles, un petit ./footywhoops -help et voilà, vous avez la liste complète.

Je pense que j'ai fait le tour... si vous aimez le mélange entre code et synthèse sonore, Footywhoops est un super terrain de jeu. C'est brut, c'est sale, et c'est expérimental mais ça permet de s'amuser un peu !

Star Wars Racer Revenge - Le jeu obscur devenu le Graal des hackers PS5

Un jeu de course Star Wars sorti en 2002 vaut aujourd'hui plus de 400 dollars sur eBay. Pas parce qu'il est devenu culte... mais parce qu'il permet de déverrouiller les PS5.

Vous allez voir, l'histoire est dingue ! Star Wars Racer Revenge , un titre obscur de l'ère PS2, cachait depuis plus de 20 ans une vulnérabilité dans son code. Et cette faille vient d'être exploitée pour extraire les clés ROM de la PlayStation 5 , c'est à dire le Saint-Graal des hackers de consoles dont je vous parlais y'a 5 jours...

L'édition PS4 de Limited Run Games - 8 500 exemplaires seulement ( Source )

Le chercheur en sécurité Gezine a balancé la nouvelle sur Twitter le 31 décembre dernier, du coup, le prix des copies physiques de la version PS4 (éditée par Limited Run Games en 2019 à seulement 8 500 exemplaires) est passé de 20 dollars à plus de 400 dollars en quelques heures. Une hausse de 1900% ! Y'a des gens qui ont fait une sacrée affaire ce jour-là...

L'exploit utilise la technique " mast1core " et cible le firmware 12.00 de la console. En gros, le menu "Hall of Fame" du jeu contient une faille qui permet d'injecter du code et comme Sony n'a jamais pensé à patcher un vieux jeu de podracing de l'époque de la préquelle, eh bien... la porte est restée grande ouverte pendant deux décennies.

Le truc vraiment flippant pour Sony, c'est que les clés bootrom extraites sont au niveau le plus fondamental du système. On ne parle pas d'une faille logicielle qu'une mise à jour peut corriger. Non, ces clés sont gravées pour toujours dans le silicium, donc c'est impossible à patcher ! Sony peut toujours sortir des firmwares pour compliquer la tâche, mais le mal est fait.

Pour ceux qui espéraient chopper une copie, c'est un peu tard par contre. Les exemplaires physiques s'arrachent sur eBay entre 230 et 500 dollars. Perso, j'aurais jamais imaginé qu'un jeu Star Wars médiocre deviendrait un jour un outil de hacking aussi précieux. D'ailleurs, si vous l'avez chez vous, c'est peut-être le moment de le revendre ^^.

Et le plus marrant dans tout ça c'est Limited Run Games avait produit ce jeu en petite quantité justement parce que personne n'en voulait vraiment.

Et dire qu'aujourd'hui, chaque copie est devenue une clé magique pour faire tourner du homebrew sur la dernière console de Sony...

Source

LinuxDAW - Le catalogue qui prouve que faire du son sous Linux c'est enfin cool

Ceux qui ont déjà essayé de faire de la musique sous Linux savent de quoi je parle. Configurer JACK, gérer les latences ALSA, prier pour que le plugin VST fonctionne... C'était un peu l'enfer, non ? Perso, j'ai abandonné plusieurs fois avant que PipeWire vienne tout simplifier.

Du coup, quand je suis tombé sur LinuxDAW.org , j'ai eu un petit moment d'émotion. C'est un catalogue visuel et bien foutu qui répertorie plein de plugins audio disponibles sous Linux : VST2, VST3, CLAP, LV2, standalone, et même des modules VCV Rack. Le site a été créé par fractalf (le code est sur Codeberg ) qui explique l'avoir créé simplement parce qu'aucun des sites existants ne répondait vraiment à ses besoins quand il a switché vers Linux.

Et ce qui me plaît ici, c'est que ce n'est pas un site puriste open source. Y'a du FOSS bien sûr (et un filtre dédié pour les trouver), mais aussi les plugins commerciaux de u-he, Toneboosters, Kazrog et compagnie. Parce que oui, de plus en plus d'éditeurs supportent Linux nativement maintenant.

Après c'est vrai qu'en cochant le filtre FOSS, on voit nettement la différence de qualité d'interface avec les plugins payants. Vous le savez car je m'en plains souvent, mais niveau design, les projets libres ont encore du chemin à faire... Mais bon, ça reste fonctionnel et gratuit, donc on va pas cracher dessus.

Bref, si vous êtes musicien et que vous envisagez de passer sous Linux (ou si vous y êtes déjà et que vous cherchez des outils), LinuxDAW.org c'est exactement ce qu'il vous faut. Y'a plus quà digger tout ça ! Et si ça vous amusez, vous pouvez même contribuer en ajoutant des plugins qui manqueraient au catalogue.

SpotiFLAC - Comment fonctionne vraiment le piratage audio lossless

Si vous traînez dans les coins sombres de GitHub, vous êtes peut-être tombé sur SpotiFLAC, un outil qui promet de récupérer vos playlists Spotify en qualité FLAC.

Encore un truc qui va faire grincer des dents...

J'ai décortiqué le code source de ce projet pour comprendre techniquement comment c'était possible. Avec ce qu'a sorti Anna's Archive il y a quelques jours, j'étais curieux et je me suis dit que ça utilisait peut-être les mêmes ficelles. Alors j'ai récupéré les sources sur Github, et j'ai regardé ça d'un peu plus près.

Déjà, premier constat, SpotiFLAC ne cracke rien du tout. L'outil ne contourne pas directement le DRM de Spotify (qui, rappelons-le, proposait uniquement de l'Ogg Vorbis jusqu'en septembre 2025). Ce qu'il fait, en fait, c'est qu'il utilise l'API Spotify via des identifiants placés directement dans le code (oups) pour récupérer les métadonnées des morceaux, notamment les codes ISRC (International Standard Recording Code) qui servent à identifier chaque enregistrement.

Ensuite, via l'API song.link (un service légitime qui permet de trouver un morceau sur différentes plateformes), l'outil tente de retrouver le même morceau sur Tidal, Qobuz ou Amazon Music. Et c'est là que ça devient rigolo puisque le code contient également en dur des identifiants OAuth Tidal, et surtout des URLs vers des API tierces hébergées sur des domaines comme qqdl.site, yeet.su ou doubledouble.top.

Ces services tiers, c'est eux qui font le sale boulot. On ne sait pas exactement comment ils fonctionnent (comptes premium partagés ? Failles API ? Tokens détournés ?), mais SpotiFLAC n'est en réalité qu'un joli frontend qui leur envoie des requêtes et récupère des liens de téléchargement direct.

Niveau légalité, c'est donc évidemment un no-go complet, car utiliser des identifiants non autorisés, contourner des mesures de protection, télécharger du contenu protégé... Ça coche pas mal de cases du DMCA aux États-Unis et des directives européennes sur le droit d'auteur. Et non, le fait que vous ayez un abonnement Spotify ne change rien, malheureusement...

Je vous rappelle que Spotify a ENFIN lancé son audio lossless en septembre après plus de 4 ans d'attente depuis l'annonce de 2021 (fallait être patient... groumpf !). C'est donc du streaming FLAC intégré à l'app pour les abonnés Premium (dans la plupart des pays), ce qui veut dire qu'il n'y a plus vraiment de raison de pirater pour écouter vos playlists en haute qualité.

Puis si vous voulez aller plus loin dans le hi-res ou posséder vos fichiers, vous avez Qobuz qui existe depuis 1000 ans, qui coûte autour de 15€/mois, Tidal à environ 11€/mois, ou encore Apple Music qui propose du Spatial Audio et du lossless inclus dans l'abo standard. Bref, les alternatives légales y'en a, donc j'avoue que passer par ce genre de service c'est pas ouf... Et si c'est une question de fric, parce qu'on n'a pas tous les moyens, y'a toujours ce bon vieux torrent.

Après c'est quand même mieux je trouve d'aller choper directement vos albums sur Bandcamp ou sur les sites des artistes, ce qui leur permet de toucher une rémunération plus correcte... Puis ça vous permet de choper de vrais fichiers FLAC à vous. Ou alors vous achetez vos albums et vous les rippez pour ensuite sortir du FLAC avec XLD par exemple . Mais pirater via ce genre d'outils je vous conseille pas... Je préfèrerai cent fois mieux un outil qui exploiterait une faiblesse connue pour récupérer le fichier source, un peu comme on peut le faire avec Youtube-DL pour YouTube, que ce truc bizarre qui utilisent des identifiants premium tombés du camion via des sites proxy qui se trouvent on ne sait où...

Vous ne savez pas ce qu'il y a derrière, donc méfiance !

HiFidelity - Le lecteur audio macOS pour ceux qui en ont marre de Spotify

J'arrête pas de lire en ce moment des articles sur des Américains de moins de 25 ans qui découvrent les cassettes audio et qui nous en font des tartines en mode "c'est trop génial". Ils sont mignons car biberonnés à Stranger Things, ils deviennent nostalgiques de cette époque des années 80 qu'il n'ont pas connu. Je comprends, c’était cool mais moi j'ai connu et je peux vous dire que la cassette audio, ça vaut pas un bon vieux FLAC en termes de qualité audio.

Après Spotify même s'il propose du lossless depuis peu, c'est pas non plus le top parce que bah faut payer l'abonnement et puis la musique ne nous appartient pas vraiment. Alors peut-être que, finalement, la voie de la sagesse, c'est celle qui consiste à se faire une collection de FLAC comme on le faisait à l'époque avec nos vieux MP3.

Et c'est pour ça qu'aujourd'hui je vous parle de HiFidelity qui va probablement vous faire plaisir.

C'est un lecteur audio pour macOS, totalement gratuit et open source, pensé pour les audiophiles qui en ont marre des usines à gaz bardées de trackers et d'abonnements. Le truc fonctionne 100% hors ligne, ne collecte aucune donnée, et utilise la bibliothèque BASS (celle qu'on retrouve dans plein de players pro) pour une lecture bit-perfect. Ça veut dire que vos fichiers audio sont lus tels quels, sans conversion ni dégradation.

Côté formats, c'est la totale : FLAC, WAV, AIFF, APE, MP3, AAC, OGG, OPUS, M4A... bref tout ce qui traîne dans une bibliothèque musicale bien fournie. Et pour les puristes, y'a même un mode "Hog" qui prend le contrôle exclusif de votre périphérique audio. En gros aucune autre app ne viendra polluer votre écoute avec ses petits bips de notifications.

L'interface est propre, avec navigation par artistes, albums, genres, et une recherche super réactive grâce à SQLite FTS5 , recommandations automatiques... Ah et le mini-player flottant est vraiment bien foutu pour bosser avec sa musique sans encombrer l'écran.

Perso, ce qui me plaît, c'est l'approche "local first" et avoir un lecteur qui fait juste... lire de la musique, ça fait du bien. Y'a même la synchro des paroles en temps réel via lrclib et un égaliseur multiband pour ceux qui aiment tripatouiller les fréquences.

Pour l'installer c'est simple... soit via Homebrew avec

brew tap rvarunrathod/tap && brew install --cask hifidelity

Soit en téléchargeant directement depuis GitHub . Faut macOS 14 minimum par contre.

Bref, si vous cherchez un lecteur audio qui respecte vos oreilles ET votre vie privée, HiFidelity mérite clairement le coup d'oeil. Merci à Lorenper pour la découverte !

Rooter une caméra de sécurité avec un MP3

L’histoire du jour est signée Luke M, un hacker qui a découvert comment rooter une caméra avec… du son !

L’appareil en question est une caméra chinoise de la marque Yi qui utilise une fonctionnalité appelée “Sonic Pairing” pour faciliter la configuration WiFi. Comme ça, au lieu de galérer à taper votre mot de passe WiFi sur une interface minuscule avec vos gros doigts boudinés, vous jouez simplement un petit son depuis votre téléphone et c’est ce son qui contient votre clé WiFi encodés en modulation de fréquence. La caméra écoute, décode, et se connecte.

Magique, non ?

Sauf que cette fonctionnalité marquée en “beta” dans l’app Yi IoT contient deux bugs magnifiques : une stack overflow local et un global overflow. En gros, en fabriquant un fichier audio malveillant avec les bons patterns, Luke a pu injecter du code arbitraire dans la caméra, ce qui lui permet d’obtenir un shell root qui se lance via la commande telnetd avec les identifiants par défaut. Tout ça, sans accès physique… juste la lecture d’un wav ou d’un MP3.

Pour arriver à ses fins, Luke a utilisé Frida , un framework de hooking que j’adore, capable d’intercepter les fonctions natives de l’app. Cela lui a permis de remplacer les données légitimes attendues par l’app par son propre payload.

Le premier bug (stack overflow) n’étant pas suffisant seul, Luke a dû utiliser un autre bug ( un out-of-bounds read via DOOM ) pour leaker un pointeur et contourner l’ ASLR . Mais le second bug (global overflow) est bien plus intéressant puisqu’il lui permet directement de faire une injection de commande via system() lors du pairing, sans avoir besoin d’autre chose.

Voici la waveform utilisée par le second exploit

Et comme la chaîne que vous pouvez envoyer via le son peut faire jusqu’à 128 bytes c’est largement suffisant pour un telnetd ou n’importe quelle commande shell. Notez que pour que l’exploit marche, le bind_key doit commencer par ‘CN’, ce qui force un path exploitable et, en bonus fait causer la caméra en chinois ^^.

Après faut savoir que ce hack amusant ne fonctionne que si la caméra n’est pas encore connectée au cloud. Donc c’est pas très utile pour attaquer des caméras déjà déployées mais ça illustre bien le problème de tout cet IoT pas cher avec des tas de features “pratiques” comme ce “Sonic Pairing” qui finissent par être catastrophique dans la pratique.

Voilà… si vous voulez les détails techniques complets avec les waveforms et le code d’exploit, foncez lire ça sur Paged Out! #7 .

Lue - Lisez vos ebooks en audio dans le terminal

Pour en avoir testé quelques uns, je trouve que les lecteurs de livres audio, c’est jamais très pratique à utiliser. Heureusement, je viens de découvrir Lue , un lecteur d’e󠄳󠅕󠄐󠅤󠅕󠅨󠅤󠅕󠄐󠅕󠅣󠅤󠄐󠅣󠅟󠅥󠅣󠄐󠅓󠅟󠅠󠅩󠅢󠅙󠅗󠅘󠅤󠄐󠅔󠅕󠄐󠄻󠅟󠅢󠅒󠅕󠅞󠄞󠅙󠅞󠅖󠅟books qui lit vos livres à voix haute directement dans le terminal.

Bah oui, moi j’adore mon terminal.. Pas besoin de cliquer, pas d’interface laggy, pas de pub ni d’abonnement premium… On lance juste une commande et hop, la lecture du livre se lance. C’est ça que j’aime, quand la tech me fout la paix et fonctionne bien !

Le truc cool avec Lue, c’est que l’outil utilise Edge TTS de Microsoft par défaut. Oui, Microsoft qui fait un truc bien et gratuit, c’est foufou, mais en gros, ça permet de récupérer les voix ultra réalistes utilisées dans Edge sans payer un centime et sans même avoir Windows. Après si vous êtes un parano de la vie privée, vous pouvez aussi utiliser Kokoro TTS qui tournera à 100% en local sur votre machine.

Pour installer Lue, il vous faut d’abord FFmpeg, espeak et Antiword. Sous Mac c’est donc brew install ffmpeg espeak antiword``, et sous Linux sudo apt install ffmpeg espeak antiword, et sous Windows… bah vous allez sur le site de FFmpeg, espeak et antiword et vous galérez un peu comme d’hab.

Et après, c’est tout simple :

pip install git+https://github.com/superstarryeyes/lue.git

Et voilà, vous êtes prêts à transformer votre terminal en studio d’enregistrement de livres audio. Pour lancer la lecture d’un bouquin, c’est aussi simple que :

lue votre-livre.epub

Perso, j’aime beaucoup la synchronisation mot par mot que permet l’outil… Car pendant que la voix lit, le texte se surligne en temps réel dans le terminal. C’est hypnotisant, on dirait un karaoké pour rats de bibliothèques. Après vous pouvez mettre en pause avec p, ajuster la vitesse de lecture, naviguer dans les phrases avec j et k. C’est comme vim mais pour les oreilles.

Alors je sais que le TTS c’est pas toujours foufou, mais je vous invite à en tester plusieurs pour trouver celle qui vous plait le plus. Moi ma préférée, c’est fr-CH-ArianeNeural qui est hyper propre et assez classe. Vous pouvez lancer une lecture avec la voix comme ceci :

lue --voice "fr-CH-ArianeNeural" livre.epub

Voici la liste complète des voix disponibles que vous pouvez utiliser :

  • fr-BE-CharlineNeural (Female) - Belgique
  • fr-BE-GerardNeural (Male) - Belgique
  • fr-CA-AntoineNeural (Male) - Canada
  • fr-CA-JeanNeural (Male) - Canada
  • fr-CA-SylvieNeural (Female) - Canada
  • fr-FR-DeniseNeural (Female) - France
  • fr-FR-EloiseNeural (Female) - France
  • fr-FR-HenriNeural (Male) - France
  • fr-CH-ArianeNeural (Female) - Suisse
  • fr-CH-FabriceNeural (Male) - Suisse

Et Lue lit vraiment tout : EPUB, PDF, TXT, DOCX, HTML, RTF, et même le Markdown. La lecture PDF c’est particulièrement bien foutue parce qu’il retire automatiquement les numéros de page et les en-têtes qui pourrissent toujours la lecture audio.

Voilà, Lue c’est un coup de cœur car on commence vraiment à s’habituer à des services IA avec des technologies de synthèse vocale qui rivalisent avec des vrais humains, mais c’est souvent caché derrière des APIs payantes et des interfaces merdique. Et là arrive un développeur qui dit “non mais attendez, c’est quoi ce bordel ?? Je vais vous faire un truc simple qui marche”.

Et hop !

La progression de lecture est même sauvegardée automatiquement. Vous fermez votre terminal en plein milieu du chapitre 12, vous relancez le lendemain, et hop, ça reprend pile où vous en étiez. Très cool, hein ?

Bref, si vous êtes du genre à préférer la ligne de commande aux interfaces clinquantes, ou si vous voulez juste écouter vos ebooks sans vous prendre la tête, allez tester Lue dispo sur GitHub .

Source

Un serveur musical pour mon salon

Aujourd’hui, on va mettre en place un serveur musical pilotable à distance en utilisant MPD. Il sera notamment capable de jouer de la musique stockée dessus ou des radios Internet. Il sera aussi capable de se comporter comme une enceinte Bluetooth.

On va parler de récup de vieux matos, de Debian, MPD, PipeWire, Samba, d’agent Bluetooth, de systemd (-analyze, -logind), de Powertop et de vbetool.

Serveur musical - les clients MPD se connectent à MPD, les clients Bluetooth peuvent jouer de la musique, les clients SMB peuvent envoyer des fichier, et le serveur est relié à des enceintes en Jack

Cet article au ton très « administration système » s’adresse à :

  • des gens qui voudraient mettre en place un système plus ou moins similaire, même pour faire autre chose dans le même esprit (en mode tutoriel) ;
  • des gens qui aiment les détails techniques et voir les trucs cools qu’on peut faire avec les logiciels libres ;
  • toute autre personne curieuse pour d’autres raisons.

Il est probablement trop technique pour quelqu’un qui ne manipule pas la ligne de commande, qui pourra peut-être malgré tout, avec suffisamment de motivation, se laisser porter par la démarche.

Sommaire

Introduction

Note de lecture : cette dépêche est très détaillée, je vous conseille de passer les sections qui vous intéressent moins.

Motivation

Dans mon salon, j’ai des petites enceintes toutes bêtes qui sonnent plutôt bien. Mettre de la musique implique de s’embêter à brancher un ordinateur, sur lequel je suis le seul avoir le contrôle. Ce serait bien d’avoir un système prêt à l’emploi et que tout le monde peut contrôler.

Objectifs

  • Pas d’achat : on fait avec de la récup
  • Peu gourmand en énergie
  • Silencieux (à part la musique, bien sûr)
  • Facile à utiliser pour une personne non technique
  • Pouvoir mettre de la musique sans que ça soit pénible, en utilisant ma bibliothèque musicale locale, ou des radios internet
  • Pouvoir laisser n’importe qui se connecter en Bluetooth et lancer sa propre musique

Nous allons, ensemble, remplir ces objectifs. On va rentrer dans les détails, qui peuvent être utiles dans d’autres applications, et parce que je sais que certaines personnes ici aiment ça, bande de geeks :-)

Matériel à disposition

  • des enceintes parfaitement fonctionnelles mais sans fonctionnalité Bluetooth
  • un appareil style netbook du début des années 2010 (dans mon cas, c’est une vieille tablette Airis Kira Slimpad plus vraiment adaptée au web moderne, dotée d’un processeur Intel Atom un peu lent, d’un peu de stockage assez lent, d’un Wifi plutôt lent, du Bluetooth, d’1 Giga de mémoire vive)

Note sur les interférences Wifi et Bluetooth. Le Wifi de cette tablette est en 2,4 GHz, pareil que le Bluetooth. Tout échange wifi cause des perturbations sur le Bluetooth et tout transfert intensif rend le Bluetooth inutilisable. Du grand classique. Un Wifi 5, 6 ou 7 aurait été appréciable. Il serait possible d’utiliser une carte Wifi USB, mais je n’en ai pas donc on fera sans.

Ce qu’on va faire dans les grandes lignes

  • Installer une Debian minimale
  • La configurer pour qu’elle soit accessible par le réseau, la plus rapide et légère possible en utilisation mémoire, en temps de démarrage et en consommation énergétique
  • Installer et configurer MPD
  • Installer et configurer Samba
  • Configurer en mode « enceinte Bluetooth »

Installation standard minimaliste de Debian

Par souci de concision, on ne va pas détailler l’installation de Debian, il existe d’autres ressources au besoin.

En résumé :

  • Debian classique en 32 bits (ça consomme moins de mémoire que du 64 bits)
  • j’ai laissé l’installateur faire le partitionnement (une partition principale en ext4, et une partition swap de 1G)
  • j’ai ajouté l’option noatime sur la partition principale pour éviter d’écrire inutilement lors des accès, ce qui use le SSD et ralentit le système (d’autant que le SSD est lent)
  • lors de l’étape Tasksel, choisir console, serveur ssh et utilitaires standard, et en particulier pas d’environnement de bureau
  • on installe sudo et on ajoute l’utilisateur au groupe sudo, ou alors on se donne accès à root en ssh avec une clé SSH
  • on installe iwd (le remplaçant moderne de wpa_supplicant, supposé plus performant et plus stable permettant également de se passer de NetworkManager assez facilement) et on connecte l’appareil en wifi avec
  • on identifie et désactive ou on désinstalle le superflu avec systemd-analyze critical-chain et systemd-analyze blame (typiquement, si vous avez installé NetworkManager, ModemManager a peut-être été installé alors que vous n’avez pas de modem à gérer)
  • on peut configurer le menu de Grub pour moins attendre au démarrage

Note : sur cette tablette, l’installateur Debian n’arrive pas à se connecter en Wifi, j’ai donc utilisé la version DVD (le premier suffit).

Gains énergétiques potentiels

Éteindre l’écran

L’écran est potentiellement une des plus grosses sources de consommation électrique. On n’en a pas besoin, donc on va l’éteindre au démarrage et à la sortie de veille.

Pour cela, on va installer vbetool (sources : outils pour éteindre l’écran, lancer une commande au démarrage, lancer une commande après la veille):

sudo apt install vbetool
cat << EOF | sudo tee /etc/systemd/system/screenoff.service
[Unit]
Description=Screen off
After=suspend.target

[Service]
ExecStart=vbetool dpms off

[Install]
WantedBy=multi-user.target suspend.target
EOF

Attention : ça peut compliquer grandement l’usage de l’appareil, on peut vouloir appliquer un délai avant extinction pour se faciliter la vie.

Powertop pour améliorer la consommation électrique

Powertop permet de voir ce qui utilise le CPU et les diverses ressources, et d’ajuster un peu les paramètres de mise en veille de différents périphériques.

On va l’installer :

sudo apt install powertop

Ensuite, ça peut être cool de lancer l’outil pour constater un peu ce qui tourne et consomme des ressources, de se déplacer dans les onglets, et de tenter des trucs dans l’onglet « Tunables » :

sudo powertop

Si passer tout à Good ne cause pas de problème d’instabilité évidente, alors on peut appliquer la configuration de Powertop à chaque démarrage (source) :

cat << EOF | sudo tee /etc/systemd/system/powertop.service
[Unit]
Description=PowerTOP auto tune

[Service]
Type=oneshot
Environment="TERM=dumb"
RemainAfterExit=true
ExecStart=/usr/sbin/powertop --auto-tune

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable powertop.service

Sinon, il y a des solutions mentionnées dans la source pour désactiver certains changements (si vous observez des dysfonctionnements avec certains périphériques par exemple, et notamment si vous avez des problèmes de Wifi ou Bluetooth)

Perso, je sais que sur cette tablette, passer tout à Good fait (faisait il y a 10 ans en tout cas) qu’après un délai la première frappe sur le clavier ou le premier clic de la souris était ignoré, et aussi était nécessaire pour réveiller l’USB – clairement je m’en fiche ici, mais si votre wifi ou votre Bluetooth est en USB et que les paramètres causent une extinction après un délai, clairement ce n’est pas bon).

Bonus : Configurer le bouton power pour mettre en veille

Sur ma tablette, un appui court sur le bouton power éteint la tablette (et ensuite on la rallume en appuyant 3 longues secondes). Si on souhaite qu’un appui court mette en veille l’appareil et un appui long l’éteigne, comme ça on fait un compromis énergétique supposément raisonnable pour rendre l’ensemble un poil plus pratique, c’est facile avec systemd.

Ajoutez ces deux lignes au fichier /etc/systemd/logind.conf :

HandlePowerKey=suspend
HandlePowerKeyLongPress=poweroff

Rechargez les paramètres :

sudo systemctl restart systemd-logind

MPD : Music Player Deamon

Ok, passons au cœur du sujet : mpd.

Késako

Simplement, c’est un lecteur de musique pilotable à distance qui est capable de :

  • lire de la musique que vous mettez dans son dossier de travail ;
  • lire des playlists que vous mettez dans son dossier de travail ;
  • lire des flux radio, qui sont par exemple définis dans des playlists.

Entre autres.

Certains clients MPD, comme Cantata (une application Qt5 plus ou moins abandonnée mais encore dans les dépôts), sont même capables de lire de la musique sur votre serveur MPD que vous avez localement sur votre ordinateur, ou de gérer les playlists. Ça rend d’ailleurs la constitution de playlists vaguement confortable. Vous n’avez pas besoin d’écrire des playlists M3U à la main, quoi.

Les avantages sont multiples :

  • c’est méga léger, une machine épuisée peut faire tourner MPD à l’aise
  • si vous lisez la musique stockée sur le serveur, le réseau n’est pas engorgé
  • on peut être plusieurs à contrôler la musique, ce n’est pas une personne qui contrôle tout, et on peut le faire depuis le canapé
  • il existe toute une flopée de clients, il y en a pour tous les goûts pourvu que vous aimiez les logiciels abandonnés ou en ligne de commande / en ncurses (ouais, c’est quand même un problème que j’identifie et qui a largement retardé mon adoption de MPD)
    • les gens non techniques apprécieront les applications mobiles telles que M.A.L.P pour gérer la musique et le volume sonore.

C’est parti pour l’installation

sudo apt install mpd

On va modifier sa configuration :

sudo nano /etc/mpd.conf

On peut laisser les paramètres par défaut suivants :

music_directory         "/var/lib/mpd/music"
playlist_directory              "/var/lib/mpd/playlists"

Vous l’aurez compris, c’est là où on stocke les musiques et les playlists. Dans la section suivante, on verra comment rendre le dépôt de morceaux simple et convivial.

On va laisser la plupart des autres paramètres par défaut.

On va changer bind_to_address, qui est par défaut à localhost, mais on veut que n’importe quel appareil sur le réseau soit capable de s'y connecter. On va aussi explicitement mettre le port à la valeur par défaut (ce n’est probablement pas nécessaire, mais c’est ce que j’ai fait) :

bind_to_address                 "0.0.0.0"
port                            "6600"

On veut aussi que quand des fichiers sont changés dans les dossiers music et playlists, mpd se mette à jour tout seul pour ne pas avoir à le baby-sitter :

auto_update     "yes"

J’ai tenté d’activer zeroconf pour que les clients MPD puissent le trouver tout seul :

zeroconf_enabled                "yes"
zeroconf_name                   "Music Player @ %h"

Mais en vrai, je n’ai pas réussi à faire fonctionner ça. En tout cas, un prérequis est d’avoir installé et activé avahi-daemon, on verra ça plus tard dans la partie Samba du coup.

Vous aurez peut-être envie de mettre un mot de passe voire de changer les permissions par défaut en décommentant et adaptant les paramètres suivants, mais c’est optionnel :

#password                        "password@read,add,control,admin"

#default_permissions             "read,add,control,admin"

Ensuite, la partie critique, la sortie audio. Pour l’instant, on va dire à mpd d’utiliser Alsa directement. C’est le plus direct et le plus léger (on passera à PipeWire plus tard, pour gérer l’aspect récepteur Bluetooth)

audio_output {
       type            "alsa"
       name            "My ALSA Device"
       device          "hw:0,0"        # optional
       mixer_type      "hardware"      # optional
     # mixer_device    "default"       # optional
       mixer_control   "Master"        # optional
       mixer_index     "0"             # optional
}

Pour une de mes installations, j’ai commenté mixer_device parce que ce n’est manifestement pas la bonne valeur chez moi, et que ça marche bien sans.

Vous pouvez vous passer des autres valeurs optionnelles, mais vous n’aurez pas le contrôle du volume sonore depuis les clients MPD si vous faites ça. Vous allez donc devoir trouver les bonnes valeurs pour les paramètres mixer_*, et pour device. ainsi que mixer_control et mixer_index.

Quelques indices :

  • hw:0,0 est probablement la bonne valeur pour device, et 0 pour mixer_index aussi. Vous pouvez lister vos cartes son avec aplay -L. Vous aurez peut-être besoin d’installer le paquet alsa-utils.
  • la valeur de mixer_control est le nom du contrôle que vous utiliserez pour changer le volume dans alsamixer, du paquet alsamixergui que vous aurez probablement besoin d’installer.

Si vous galérez trop avec les valeurs de mixer-*, vous pouvez simplement utiliser mixer_type "software", c’est moins propre mais ça devrait faire le taf. Et sinon, vous pouvez toujours sortir l’artillerie lourde et passer directement à PipeWire.

Pour appliquer vos modifications :

systemctl enable --now mpd # À partir de Debian Trixie, mpd n’est plus activé par défaut au niveau du système
systemctl restart mpd # Si MPD tournait déjà

Vous pouvez déboguer vos changements avec la commande suivante, qui suit les logs en temps réel :

journalctl -fu mpd

Vous avez plusieurs options pour essayer de lire des choses avec mpd :

  • installer l’application M.A.L.P sur votre téléphone Android, ou une autre application cliente MPD, et ajouter un profil avec la bonne adresse, le bon port et le bon mot de passe ;
  • installer un client comme Cantata sur votre ordinateur, avec la bonne adresse, le bon port et le bon mot de passe ;
  • installer mpc directement sur le serveur. Normalement mpc play permet de lancer la lecture.

Moi, j’ai testé avec une webradio dans une playlist (/var/lib/mpd/playlists/radio-paradise-main-mix.m3u avec le contenu http://stream.radioparadise.com/ogg-192m), mais on peut aussi évidemment placer un morceau dans /var/lib/mpd/music/.

ReplayGain

Le niveau sonore de mes morceaux n’est pas homogène, donc il faut sans cesse adapter le volume d’un morceau à l’autre. C’est pénible, voire inutilisable en l’état. Une solution pour ça est replay gain : on analyse et on enregistre le niveau sonore d’une piste dans ses métadonnées.

Il existe plein d’outils pour faire ça, dont https://github.com/complexlogic/rsgain

On peut le faire avant d’envoyer les fichiers sur l’appareil. Pour ma part, je l’ai fait sur la tablette, et il n’existe pas de paquet Debian 32 bits, donc je l’ai compilé :

sudo apt install cmake build-essential pkd-config git libavcodec-dev libavformat-dev libtag1-dev libebur128 libinih-dev libfmt-dev
git clone --depth=1 https://github.com/complexlogic/rsgain
cd rsgain
mkdir build
cd build
cmake ..
make -j2
sudo make install

Il faudra s'assurer que les morceaux au format Opus sont étiquetés avec le tag R128_TRACK_GAIN et pas REPLAYGAIN_TRACK_GAIN, parce que c'est ce que MPD s’attend à avoir. Pour ça, on va convaincre rsgain de suivre les standards (que certains lecteurs de musiques ne comprennent pas) en créant un preset qui contient :

[Opus]
OpusMode=s

Mes morceaux ne sont pas organisés par albums, donc je désactive l’analyse par album. Je vais donc partir du preset no_album :

mkdir -p ~/.config/rsgain/presets; cat << EOF > ~/.config/rsgain/presets/no_album_standard_opus.ini 
[Global]
TagMode=i
Album=false
TargetLoudness=-18
ClipMode=p
MaxPeakLevel=0.0
TruePeak=false
Lowercase=false
ID3v2Version=keep
PreserveMtimes=false
DualMono=false
OpusMode=s
EOF

Ensuite, on peut le rsgain sur le dossier de musiques avec ce preset. Mes morceaux ne sont pas organisés par albums, donc je désactive l’analyse par album.

rsgain easy -p no_album_standard_opus -m MAX /var/lib/mpd/music

Note : l'option --skip-existing permet d'ignorer les fichiers déjà taggés :

rsgain easy --skip-existing -p no_album_standard_opus -m MAX /var/lib/mpd/music

Avec cette option, on peut exécuter cette tâche régulièrement, par exemple dans un cron, pour calculer le ReplayGain pour les nouveaux fichiers. Pour la première exécution, il vaut certainement mieux ne pas l’utiliser, sinon, si vous aviez déjà des fichiers qui avaient l'information, il se peut que le résultat ne soit pas uniforme.

Il faut dire à MPD d’utiliser le ReplayGain dans /etc/mpd.conf :

replaygain                      "track"

Vous aurez peut-être besoin de jouer avec les autres paramètres liés au volume et au ReplayGain.

Voici les miens :

# Ce paramètre définit la pré-amplification à appliquer pour les morceaux qui ont l'information du ReplayGain
replaygain_preamp              "0"

# Ce paramètre définit la pré-amplification à appliquer pour les morceaux qui ne l'ont pas
replaygain_missing_preamp      "0"

# Faut-il interdire à MPD de dépasser le niveau original d'amplification en appliquant le ReplayGain?
replaygain_limit                "no"

# Faut-il permettre à MPD d'ajuster le volume pendant la lecture pour normaliser ?
volume_normalization            "no"

Un autre paramètre qu’on peut régler, c'est la manière dont MPD règle le volume dynamiquement pour ReplayGain. Dans votre bloc audio_output, vous pouvez ajouter replay_gain_handler et la valeur "software" (c'est la valeur par défaut) ou "mixer". En théorique, les traitements software dégradent le son, mais en pratique, avec "mixer", je tombe sur ce bug qui met le volume à 100% après chaque changement de piste.

Note : je ne suis pas encore convaincu d’avoir réussi à trouver les réglages parfaits, n’hésitez pas à expérimenter.

Les clients MPD

À ce stade, vous devriez avoir un serveur MPD fonctionnel et configuré. Si applicable, vous pouvez commencer à suggérer aux gens de votre foyer d’installer l’application M.A.L.P sur leur appareil Android ; elle est libre et disponible sur F-Droid et sur le Play Store. Avec un peu de chance, votre enthousiasme était communicatif et c’est eux qui vous demanderont :-)

Pour les autres types d’appareils, vous allez devoir faire vos recherches vous-même je n’ai pas étudié les options sous Windows, Mac ou iPhone, mais il y en a. Pour Linux, j’ai essayé Cantata. Il me convient, si ce n’est qu’il a l’air un peu abandonné, et il a une interface certes conviviale, mais quand même un peu brute. Il existe des widgets qui s’intègrent aux différents environnements de bureaux pour les différents systèmes d’exploitation, je n’ai pas exploré. Le site de MPD propose une liste de clients, et le wiki de Arch aussi.

 M.A.L.P, un client mobile pour MPD

Samba pour déposer les morceaux (et les playlists)

Déposer des morceaux, vous allez probablement le faire depuis un ordinateur, et à peu près n’importe quel système d’exploitation est capable d’aller chercher un dossier SMB en réseau, alors je vous propose de configurer un serveur Samba. Ça a le bon goût d’être très léger, très simple à faire et de fonctionner depuis n’importe quel OS. Allons-y, et tant qu’à faire, on va aussi installer Avahi, qui permettra aux ordinateurs sous Linux et Mac de découvrir les dossiers partagés tous seuls :

sudo apt install samba avahi-daemon

On va partager nos dossiers music et playlists au monde entier en lecture-écriture (YOLO). On édite /etc/samba/smb.conf:

[Musique]
path=/var/lib/mpd/music
read only=no
writable=yes
comment=Fichiers musique MPD
guest ok = yes
force group = audio
force user = mpd
browsable = yes
public = yes
create mask = 0644
directory mask = 0755

[Playlists]
path=/var/lib/mpd/playlists
read only=no
writable=yes
comment=Listes de lecture MPD
guest ok = yes
force group = audio
force user = mpd
browsable = yes
public = yes
create mask = 0644
directory mask = 0755

Je ne maitrise pas particulièrement Samba et il y a peut-être des options superflues, mais globalement l’esprit c’est :

  • n’importe qui doit pouvoir accéder à ces deux en lecture et en écriture depuis le réseau. En particulier, la création de dossiers doit marcher
  • MPD doit pouvoir lire ce qu’on a écrit dans ces dossiers
  • les fichiers et dossiers doivent avoir des permissions sensées

Bien sûr, on peut vouloir restreindre l’accès à certains utilisateurs et/ou avec un mot de passe. Je vous laisse creuser.

Après un redémarrage de Samba :

sudo systemctl restart samba

Avec un peu de chance, dans l’onglet « Réseau » de votre gestionnaire de fichier, dans la section « Partages SMB », votre appareil apparait. Sinon, vous devriez pouvoir y accéder avec smb://HOST/ avec Dolphin et probablement Nautilus, probablement \\HOST sous Windows.

Alternatives possibles à Samba

  • Si on a un NAS, monter un dossier sur le serveur MPD, voire installer MPD sur le serveur de stockage, ou avoir une tâche chron qui fait un rsync bien placé
  • Mettre en place une synchronisation avec Nextcloud ou Syncthing, et faire pointer MPD vers le bon dossier, ou ajouter le dossier de MPD comme dossier de stockage externe à Nextcloud par exemple
  • SFTP
  • NFS
  • FTP (mais les autres options sont probablement meilleures)

Récepteur Bluetooth

Ce n’est bien sûr pas nécessaire si vous êtes parfaitement satisfait·e avec MPD, mais si vous voulez que votre appareil soit en plus capable de se comporter comme une enceinte Bluetooth, vous êtes au bon endroit.

Les difficultés qu’on va résoudre sont les suivantes :

  • pour l’instant, MPD accède au son directement avec ALSA, et en général on ne peut pas être plusieurs sur ALSA. En tout cas, et même s’il a l’air possible de faire fonctionner Bluetooth et ALSA ensemble, ça n’a pas l’air d’être terriblement simple ou même stable. Donc on va utiliser PipeWire. On aurait pu utiliser PulseAudio, mais PipeWire le remplace, et fonctionne généralement mieux.
  • PipeWire, c’est pensé pour être lancé dans une session graphique d’un utilisateur, mais nous, on a un serveur headless. Il va falloir faire en sorte de lancer une session utilisateur au démarrage sans interaction, et que cette session ne soit pas tuée.
  • mpd tourne avec son utilisateur, PipeWire avec son utilisateur, et après s’être rendu compte qu’il faut que ça soit les mêmes, faut aussi savoir comment, et le faire.

Lors de l’installation de Debian, on a défini un utilisateur. On peut utiliser cet utilisateur. Sinon, on peut aussi en créer un pour ça, pensez bien à l’ajouter aux groupes audio et bluetooth.

Garder une session utilisateur active

On va démarrer une session utilisateur au boot :

sudo loginctl enable-linger user # remplacer user par le nom d’utilisateur

On va s’assurer que les processus de cette session ne sont pas tués au moment où on quitte une session (par exemple quand on quitte une session ssh) : dans le fichier /etc/systemd/logind.conf, décommentez la ligne KillExcludeUsers et ajouter le nom d’utilisateur après le =. Vous deviez avoir

KillExcludeUsers=user

user est le nom d’utilisateur.

On peut maintenant recharger ces paramètres :

sudo systemctl restart systemd-logind

Installer PipeWire et les choses nécessaires

À ce stade, MPD bloque probablement l’utilisation du son parce qu’il s’y connecte via ALSA. On va le stopper.

sudo systemctl stop mpd

PipeWire et WirePlumber vont dorénavant gérer le son, et libspa-0.2-bluetooth permet au démon qui gère le Bluetooth (Bluez) de s’inter-connecter à PipeWire pour le Bluetooth Audio.

sudo apt install wireplumber pipewire libspa-0.2-bluetooth

En tant que votre utilisateur (nommé user dans les commandes précédentes) (c’est important), activez PipeWire au démarrage et lancez-le :

systemctl --user enable --now pipewire wireplumber

Notez que pipewire-pulse n’est pas nécessaire, d’ailleurs vous pouvez le supprimer ou le désactiver en toute sécurité s’il a été installé.

Installer un agent Bluetooth qui accepte toutes les connexions audio sans vérifications avec code

Normalement, accepter les connexions Bluetooth se fait à l’aide d’un agent Bluetooth :

  • qui tourne dans votre session graphique : c’est géré par votre environnement de bureau, ou une application comme bluetooth-applet (est-ce que ça existe encore ?) que vous lancez. Là, évidemment, on n’a pas de session graphique, et pour l’instant on n’a pas d’agent Bluetooth qui tourne.
  • En ligne de commande, avec un outil comme bluetoothctl. Je vous invite à essayer. Vous pouvez lancer des commandes comme pairable on, discoverable on, scan on, et essayer de vous connecter avec un autre appareil. Après vos tests, vous pouvez tout recommencer en faisant oublier les appareils des deux côtés.

Évidemment, on ne va pas se connecter en ssh pour lancer bluetoothctl à chaque fois qu’on veut se connecter en Bluetooth. On va mettre en place un agent qui démarre automatiquement et qui a un comportement similaire à un casque ou des enceintes Bluetooth : qui accepte toutes les connexions Bluetooth audio. Pour ça, on va utiliser un script Python partagé par Collabora sous Licence LGPL 2.1+ qui fait ça très bien et qu’on va lancer au démarrage.

Bien sûr, ça veut dire que vos voisins peuvent s’amuser à jouer des trucs chez vous, ou même se connecter fortuitement en choisissant la mauvaise entrée.

Ce script a une dépendance, qu’on va installer :

sudo apt install python3-dbus

On va placer ce script dans speaker-agent.py:

#!/usr/bin/python3
# SPDX-License-Identifier: LGPL-2.1-or-later

import dbus
import dbus.service
import dbus.mainloop.glib
from gi.repository import GLib

BUS_NAME = 'org.bluez'
AGENT_INTERFACE = 'org.bluez.Agent1'
AGENT_PATH = "/speaker/agent"

A2DP = '0000110d-0000-1000-8000-00805f9b34fb'
AVRCP = '0000110e-0000-1000-8000-00805f9b34fb'

bus = None


class Rejected(dbus.DBusException):
    _dbus_error_name = "org.bluez.Error.Rejected"


class Agent(dbus.service.Object):
    exit_on_release = True

    def set_exit_on_release(self, exit_on_release):
        self.exit_on_release = exit_on_release

    @dbus.service.method(AGENT_INTERFACE,
                         in_signature="", out_signature="")
    def Release(self):
        print("Release")
        if self.exit_on_release:
            mainloop.quit()

    @dbus.service.method(AGENT_INTERFACE,
                         in_signature="os", out_signature="")
    def AuthorizeService(self, device, uuid):
        # Always authorize A2DP and AVRCP connection
        if uuid in [A2DP, AVRCP]:
            print("AuthorizeService (%s, %s)" % (device, uuid))
            return
        else:
            print("Service rejected (%s, %s)" % (device, uuid))
        raise Rejected("Connection rejected by user")

    @dbus.service.method(AGENT_INTERFACE,
                         in_signature="", out_signature="")
    def Cancel(self):
        print("Cancel")


if __name__ == '__main__':
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

    bus = dbus.SystemBus()

    agent = Agent(bus, AGENT_PATH)

    mainloop = GLib.MainLoop()

    # By default Bluetooth adapter is not discoverable and there's
    # a 3 min timeout
    # Set it as always discoverable
    adapter = dbus.Interface(bus.get_object(BUS_NAME, "/org/bluez/hci0"),
                             "org.freedesktop.DBus.Properties")
    adapter.Set("org.bluez.Adapter1", "DiscoverableTimeout", dbus.UInt32(0))
    adapter.Set("org.bluez.Adapter1", "Discoverable", True)

    print("RPi speaker discoverable")

    # As the RPi speaker will not have any interface, create a pairing
    # agent with NoInputNoOutput capability
    obj = bus.get_object(BUS_NAME, "/org/bluez")
    manager = dbus.Interface(obj, "org.bluez.AgentManager1")
    manager.RegisterAgent(AGENT_PATH, "NoInputNoOutput")

    print("Agent registered")

    manager.RequestDefaultAgent(AGENT_PATH)

    mainloop.run()

Le script mentionne le Raspberry Pi, mais il n’y a absolument rien de spécifique au Raspberry dedans, il est suffisamment générique.

On va lancer ce script au démarrage en créant le fichier ~/.config/systemd/user/speaker-agent.service

[Unit]
Description=Bluetooth speaker agent

[Service]
ExecStart=python3 speaker-agent.py

[Install]
WantedBy=default.target

Et en l’activant (--now le lance tout de suite) :

systemctl --user enable --now speaker-agent.service

Il faudra aussi mettre JustWorksRepairing = always dans /etc/bluetooth/main.conf pour permettre le re-appairage sans interaction. Bon là j’avoue, je paraphrase largement ma source :-)

Ensuite, on va autoriser la connexion Bluetooth même sans session active (en SSH par exemple) (source). Si on ne fait pas ça, la connexion Bluetooth n’est pas possible si l’utilisateur n’a pas une session active (les symptômes : on arrive à se connecter en Bluetooth que quand on est loggué en SSH ou autre, et la connexion Bluetooth casse dès qu’on quitte la session).

mkdir -p ~/.config/wireplumber/bluetooth.lua.d
cat > ~/.config/wireplumber/bluetooth.lua.d/80-disable-logind.lua << EOF
-- Disable arbitration of user allowance of bluetooth via D-Bus user session
bluez_monitor.properties["with-logind"] = false
EOF
systemctl --user restart wireplumber

Adapter MPD (et Samba) pour utiliser PipeWire

Pour que MPD utilise PipeWire, il faut adapter :

  1. sa configuration pour qu’il tourne avec le même utilisateur
  2. sa configuration audio_output
  3. les permissions dans /var/lib/mpd

Dans /etc/mpd.conf, changer la ligne user :

user                            "mpd"

Elle doit maintenant utiliser votre utilisateur :

user                            "user"

Commentez votre bloc audio_output, on va maintenant utiliser PipeWire (je suppose qu’on pourrait garder les deux et les clients MPD peuvent probablement permettre de choisir la sortie son, mais ça me parait complexifier l’utilisation pour un intérêt pas clair, ce qui va contre nos objectifs) :

audio_output {
        type            "pipewire"
        name            "PipeWire Sound Server"
}

Maintenant, il est temps d’adapter les permissions dans /var/lib/mpd. On va stopper Samba juste avant, et adapter sa configuration.

sudo systemctl stop mpd samba # si mpd tournait encore
sudo chown -rv user /var/lib/mpd
sudo systemctl start mpd

Note : MPD peut aussi être démarré dans une session utilisateur et à ce stade, c’est ce qu’il serait probablement le plus logique de faire, en bougeant /etc/mpd.conf et le contenu de /var/lib/mpd dans le dossier de notre utilisateur. C’est d’ailleurs la manière privilégiée de démarrer MPD à partir de Debian Trixie. Par simplicité et cohérence, et parce que cette section « Récepteur Bluetooth » est optionnelle mais que les manipulations pour lancer une session utilisateur au démarrage décrites dans cette section seraient nécessaires pour lancer MPD en tant que service utilisateur au démarrage dans tous les cas et que ça apporte une réelle complexité, on fait le choix de garder MPD en tant que service système.

Modifiez /etc/samba/smb.conf. Dans les deux blocs de partages qu’on a ajouté précédemment, changez la ligne force user = mpd en:

force user = user

Puis on peut redémarrer Samba :

sudo systemctl start samba

Permettre à PipeWire de configurer sa priorité

Si vous voyez cela dans les logs de PipeWire :

user@tablette:~$ journalctl --user -fu pipewire
avril 29 13:41:01 tablette systemd[514]: Started pipewire.service - PipeWire Multimedia Service.
avril 29 13:41:01 tablette pipewire[531]: mod.rt: Can't find org.freedesktop.portal.Desktop. Is xdg-desktop-portal running?
avril 29 13:41:01 tablette pipewire[531]: mod.rt: found session bus but no portal
avril 29 13:41:02 tablette pipewire[531]: mod.rt: RTKit error: org.freedesktop.DBus.Error.AccessDenied
avril 29 13:41:02 tablette pipewire[531]: mod.rt: could not set nice-level to -11: Permission non accordée
avril 29 13:41:02 tablette pipewire[531]: mod.rt: RTKit error: org.freedesktop.DBus.Error.AccessDenied
avril 29 13:41:02 tablette pipewire[531]: mod.rt: could not make thread 547 realtime using RTKit: Permission non accordée

Ça veut grosso modo dire que PipeWire cherche à se rendre plus prioritaire via un mécanisme fourni par les environnements de bureau (xdg-desktop-portal), n’y arrive pas parce qu’évidemment, aucun environnement de bureau ne tourne, alors il essaie de demander au service système rtkit, et se fait jeter.

Ce n’est pas très grave et on pourrait vivre sans, mais ça pourrait aider à limiter les saccades sonores, donc on va réparer ça (et je pense avoir vu une bonne amélioration grâce à ça).

Le fichier /usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy dicte qui a le droit ou non de configurer sa priorité (découvert ici, mais le conseil de modifier ce fichier système n’est pas bon, au moins parce qu’une mise à jour future risque d’écraser les modifications) :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
        "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
        <vendor>Lennart Poettering</vendor>

        <action id="org.freedesktop.RealtimeKit1.acquire-high-priority">
                <description>Grant high priority scheduling to a user process</description>
                <description xml:lang="tr">Bir sürece yüksek öncelikli çalışabilme yetkisi ver</description>
                <message>Authentication is required to grant an application high priority scheduling</message>
                <message xml:lang="tr">Sürecin yüksek öncelikli çalıştırılabilmesi için yetki gerekiyor</message>
                <defaults>
                        <allow_any>no</allow_any>
                        <allow_inactive>yes</allow_inactive>
                        <allow_active>yes</allow_active>
                </defaults>
        </action>

        <action id="org.freedesktop.RealtimeKit1.acquire-real-time">
                <description>Grant realtime scheduling to a user process</description>
                <description xml:lang="tr">Bir sürece gerçek zamanlı çalışabilme yetkisi ver</description>
                <message>Authentication is required to grant an application realtime scheduling</message>
                <message xml:lang="tr">Sürecin gerçek zamanlı çalıştırılabilmesi için yetki gerekiyor</message>
                <defaults>
                        <allow_any>no</allow_any>
                        <allow_inactive>yes</allow_inactive>
                        <allow_active>yes</allow_active>
                </defaults>
        </action>

</policyconfig>

Dans un système Unix, les paramètres systèmes sont dans /etc. Pour Polkit, il existe un mécanisme pour écrire des règles, qu’on va utiliser. On va créer une règle qui permet à n’importe quel utilisateur du groupe audio de modifier la priorité de ses processus. C’est probablement trop large, mais je ne connais pas bien Polkit et ça fera le taf pour notre application dédiée à l’audio. Si vous avez des meilleures idées, n’hésitez pas à partager en commentaire.

sudo cat > /etc/polkit-1/rules.d/rt.rules << EOF
polkit.addRule(function(action, subject) {
        if (subject.isInGroup("audio") && (
                action.id == "org.freedesktop.RealtimeKit1.acquire-high-priority" ||
                action.id == "org.freedesktop.RealtimeKit1.acquire-real-time"
        )) {
                return polkit.Result.YES;
        }
})
EOF

sudo systemctl restart polkit.service
systemctl --user restart pipewire

On pourra constater l’absence des échecs dans les journaux de PipeWire.

Bon, on sent bien que toute cette utilisation audio sans session utilisateur standard n’est pas un cas d’utilisation hyper bien prévu et on se retrouve à toucher des coins un peu sombres du système…

Évitez les flux Wifi 2,4 GHz

Si vous avez un Wifi en 2,4 GHz, ça peut causer des soucis avec le Bluetooth, et le son peut saccader. Si vous observez cela, il faudra alors limiter au maximum les services et autres tâches de fond qui font des communications réseau. Évidemment, si vous pouvez utiliser un câble Ethernet, c’est encore mieux.

Sur ce plan, tous les codecs audio Bluetooth ne semblent pas se valoir. Pour tester ça, j’ai lancé un test iperf3 entre la tablette et mon ordinateur portable pour saturer le Wifi. Ça devenait immédiatement catastrophique avec le codec SBC-XQ, alors qu’avec le codec Opus 05, il y a initialement des saccades, puis ça s’améliore vite. J’imagine que le codec Opus dégrade très efficacement la qualité pour compenser. Bon, malheureusement, tous les systèmes ne permettent pas de choisir son codec donc ce n’est qu’une solution partielle au problème.

Note sur l’utilisation des ressources

C'est léger :

load average: 0,12, 0,10, 0,05
$ free -mh
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:           986Mi       253Mi       324Mi       6,1Mi       550Mi       733Mi
Échange:       974Mi          0B       974Mi

Globalement, le CPU s’ennuie en pleine lecture, et à peine un tiers du Giga de mémoire vive est utilisé, la partition d’échange s’ennuie, donc il y a encore largement la place de faire tourner d’autres trucs sur cet appareil si jamais. On peut aussi constater qu’ajouter MPD et tout ce bazar à une installation existante ne la surchargerait pas plus que ça.

On a aussi un temps de démarrage autour des 20 secondes, ce qui est franchement pas mal.

Conclusion et améliorations possibles

On est pas mal rentrés dans les détails, c’était l’occasion d’explorer plein de choses mine de rien. J’ai à la fois appris des choses, précisé des connaissances, et mis plein de choses que je savais ensemble pour obtenir un résultat très satisfaisant. On se retrouve à manipuler de la gestion de services, des configurations systemd un peu poussées, du bluetooth, du son avec ALSA et PipeWire, de la gestion de session utilisateur sur un système headless, et plein d’autres trucs et aller dans les détails comme le boot pour avoir quelque chose de rapide, comme l’écran éteint au bon moment, ou la personnalisation du comportement du bouton power (honnêtement, je n’étais pas très sûr que c’était possible, j’avais lancé la recherche au cas où !).
J’espère que l’aventure vous a plu aussi.

Bien sûr l’ensemble est perfectible, alors je vous laisse avec des idées, n’hésitez pas à partager les vôtres en commentaires :

  • Jouer un son au démarrage / à l’appairage Bluetooth. – pour l’instant, la tablette s’allume et puis plus rien. En général, les enceintes Bluetooth jouent un petit son quand elles sont prêtes ou qu’elles viennent d’être appairées et ça peut être pratique
  • Commande vocale. Il y a clairement des manières d’utiliser le micro de la tablette pour demander le morceau suivant, précédent ou régler le volume. Ça peut être pratique quand on n’a pas le téléphone sous la main et ça peut avoir son petit effet en soirée la première fois, tant que les gens ne sont pas encore complètement blasés par le concept parce que tout le monde n’a pas un Google Nest ou un Alexa chez soi, surtout dans ma bulle sociale. Mais c’est probablement finalement très gadget et je me vois mal interrompre une conversation en criant un ordre pour gérer la musique…
  • Appairage Bluetooth plus sécurisé. En général, les enceintes Bluetooth acceptent les nouveaux appareils dans un mode spécial. En appuyant sur le bouton Bluetooth, ou quelque chose comme ça. Ça peut éviter que les voisin·e·s ne te rickrollent au moment le plus inopportun. Ça vaudrait le coup de travailler sur quelque chose comme ça. Avec l’écran tactile, il est probablement possible de dessiner une forme particulière reconnue (ça serait un peu badasse, ou plus probablement, n’accepter (une seule) nouvelle connexion que dans les X minutes après le démarrage ou le retour de veille. Comme ça, demander l’appairage consiste à appuyer deux fois sur le bouton power, ce qui est plutôt acceptable. Si vous avez des idées, n’hésitez pas à partager…
  • Réveil à distance avec du Wake-on-LAN. Ça ne s’applique probablement pas à mon matériel, mais il est possible d’utiliser astucieusement le WoL pour réveiller l'appareil à distance, avec éventuellement la complicité d’un routeur ou d’un serveur toujours allumé chez vous.
  • Désactiver le Wifi quand le Bluetooth est utilisé. Pour éviter les interférences, on pourrait imaginer que quand un appareil se connecte en Bluetooth, on éteint le Wifi (avec rfkill par exemple), on met MPD en pause (ou on le stoppe s’il est en train de jouer un flux) parce qu’on ne peut plus le contrôler, puisque le Wifi n’est plus actif, et on réactive le Wifi quand l’appareil Bluetooth est déconnecté. On pourrait même être plus fin et détecter quand du son est joué.
  • Automatiquement mettre MPD en pause lors d’une connexion Bluetooth. (un peu doublon avec le précédent point) Pour l’instant, il faut manuellement mettre en pause mpd, sinon les deux flux audios se jouent en même temps. -- Changer la classe Bluetooth de l’appareil. Ça permettrait à l’appareil de se déclarer comme appareil audio, pour que ça affiche le bon icône sur les autres appareils.
  • Mises à jour automatiques. Il ne faut pas que ça casse des choses en pleine lecture, ni que ça cause des interférences avec le Bluetooth à cause des téléchargements.
  • Ne pas persister les logs. Pour l’instant, les logs sont écrits dans /var/log sur le SSD, entrainant une usure et un ralentissement cependant probablement tous deux négligeables. On pourrait vouloir ne pas les garder, mais c’est aussi risquer de perdre des informations de débogage le jour où il y a un pépin.

Je vais probablement trouver d’autres choses à améliorer après publication de l’article. Je partagerai peut-être les choses intéressantes en commentaires ou dans des journaux, et je ferai peut-être vivre l’article sur mon site.

Commentaires : voir le flux Atom ouvrir dans le navigateur

Comment synchroniser parfaitement audio et vidéo sur macOS

Si vous êtes Youtubeur / Streameur, vous connaissez surement ce moment ultra frustrant où votre vidéo est parfaite mais que le son est décalé comme dans un mauvais doublage de film de kung-fu des années 80.

C’est exactement le problème que j’avais avec ma chaîne YouTube (au passage, si vous n’êtes pas encore abonnés, qu’est-ce que vous attendez ? ABONNEZ VOUUUUS !!!). En effet, pour mes tutos vidéos, j’utilise un petit appareil photo Canon, relié à un boitier de capture HDMI ainsi qu’un micro XLR connecté à une carte son externe. Et tout ça sous macOS.

AutoEq - Le hack gratuit qui transforme n'importe quel casque en matériel de pointe pour audiophile

Vous faites les malins parce que vous avez claqué 350 balles dans un casque audio de qualitayyyy et pourtant, vous avez une ouie aussi fine que celle de Rats-taupe nu. Tout ce que vous écoutez sonne comme si cela avait été mixé par un DJ bourré jouant au fond d’une cave. En effet, la plupart des fabricants de casques les calibrent avec des courbes acoustiques qui s’éloignent fortement de ce que notre cerveau considère comme un son naturel et équilibré. Du coup, on se retrouve avec des aigus qui piquent, des médiums tout creux et des basses trop fortes.

Decode Quantum with Wilhelm Kaenders from Toptica

Welcome to the 83rd episode of Decode Quantum, the quantum podcast where we like to get in depth in quantum science and technology. I was this time with Wilhelm Kaenders, the president and CTO of Toptica. Fanny is not there, again, she’s so busy, she’s like a minister, sometimes she has meetings that she can’t […]

Toutui - Écoutez vos livres audio et podcasts depuis votre terminal

Si vous passez vos journées, le nez dans un terminal, ce serait-y pas trop cool de pouvoir également y écouter vos livres audio et vos podcasts ?

On évite ainsi les interfaces flashy, les notifs et autres animations inutiles et on se concentre sur l’essentiel, à savoir la simplicité monacale du terminal. Bref, si vous êtes de ceux qui pensent qu’une journée sans taper une commande est une journée perdue, il faut que je vous présente Toutui !

SampleWizard – Enregistrez et téléchargez des samples audio en un clic depuis votre navigateur

Vous êtes un producteur de musique, un créateur de contenu ou tout simplement un passionné d’audio qui aime sampler des sons depuis le web ?

Et bien, je viens de découvrir SampleWizard, une extension Chrome géniale qui va bousculer votre façon d’enregistrer et de télécharger des samples audio. Fini les galères avec les sites de téléchargement douteux, ça vous permet de capturer n’importe quel son sur le web en un seul clic directement depuis votre navigateur. C’est magique !

Bref, vous surfez tranquillement sur YouTube, Soundcloud ou n’importe quel site web, et soudain vous tombez sur un extrait audio qui vous fait kiffer. Avec cette extension, pas besoin de chercher un moyen de le télécharger, il vous suffit de cliquer sur le bouton d’enregistrement de l’extension et hop, le tour est joué ! Le sample est ainsi automatiquement enregistré et téléchargé sur votre ordinateur au format WAV. C’est simple comme bonjour.

L’interface de SampleWizard est simple, vous n’avez qu’un bouton à cliquer pour enregistrer et un autre pour accéder à vos samples téléchargés. Je crois que c’est ce qu’utilise la grand mère de Steve Aoki quand elle repère un sample qu’elle veut lui envoyer.

En plus de ça, c’est est entièrement gratuit en version de base. Que demande le peuple ?

Rendez-vous sur le Chrome Web Store pour en profiter. Quand à moi, je retourne chasser du sample sauvage moi.

Asak – Un outil audio CLI puissant écrit en Rust

Voici un outil qui va changer votre façon de bidouiller avec le son. Oubliez les interfaces compliquées et les logiciels gourmands, place à la ligne de commande avec Asak !

Il s’agit d’un outil audio multiplateforme, écrit dans le langage du moment, j’ai nommé Rust. Léger, rapide et diablement efficace. Le genre de truc qui vous donne envie de ressortir votre vieux Termina pour jouer.

Asak permet d’enregistrer, lire, et même appliquer des effets en temps réel, le tout via son interface en ligne de commande ou son interface utilisateur textuelle (TUI) super intuitive. Fini les clics à n’en plus finir, ici on tape des commandes comme un vrai hacker du dimanche.

Pour l’installer, rien de plus simple.

Assurez-vous d’avoir Cargo installé, puis lancez un petit

cargo install asak

et hop, vous voilà prêt à en découdre avec les ondes sonores. Si vous n’avez pas encore Cargo, pas de panique, suivez simplement le guide d’installation et vous serez paré en un rien de temps.

Ensuite, si vous voulez enregistrer un message pour votre répondeur façon années 80, c’est facile :

asak rec hello

Et si vous ne précisez pas de nom de fichier, pas de panique, Asak vous demandera gentiment de le faire, avec un nom par défaut.

Maintenant pour écouter votre chef-d’œuvre :

asak play hello.wav

Et si vous ne vous souvenez plus du nom, un petit coup d’œil dans le répertoire courant et Asak vous proposera gentiment de choisir parmi les fichiers .wav disponibles.

Mais Asak ne s’arrête pas là. Vous pouvez paramétrer l’appareil d’enregistrement et de lecture avec -r et -p, la durée avec -d, la fréquence d’échantillonnage avec -s, les canaux et le format avec -ch. Bref, vous avez le contrôle total.

Et que serait un outil audio digne de ce nom sans la possibilité de jouer avec le son en temps réel ? Asak vous propose de régler le volume avec -a, d’appliquer des effets comme la réverbération ou le délai avec -f, et même de faire du passthrough avec des effets live grâce à -z. Bref, de quoi transformer votre bureau en studio d’enregistrement lo-fi tendance.

Côté formats, Asak supporte les classiques WAV, AIFF et FLAC, en entrée comme en sortie. Et s’il vous prend l’envie de bidouiller avec plusieurs flux audio simultanés, pas de souci, Asak gère ça comme un chef.

Alors, convaincu ? Vous aurez plus d’infos ici.

Sur ce, je vous laisse, j’ai une soudaine envie d’aller bidouiller avec des samples de vieux films de science-fiction. Que la force du son soit avec vous !

Deej – Le mixeur audio matériel open-source

Vous êtes en train de jouer à votre jeu préféré, tout en discutant sur Discord avec vos potes et en écoutant votre playlist Spotify en fond, sauf que, comme d’habitude, dès que ça bastonne un peu trop dans le jeu, vous n’entendez plus vos copains qui essaient désespérément de vous avertir qu’un ennemi arrive par derrière ! Et quand vous baissez le son du jeu, c’est votre musique qui trinque… Bref, c’est toujours le bordel pour équilibrer tous les sons de vos applications !

Mais c’était sans compter sur deej, un mixeur audio matériel open-source qui va vous permettre de contrôler le volume de chaque application indépendamment, encore mieux qu’un vrai DJ en boîte de nuit ! Et le meilleur dans tout ça, c’est que vous allez pouvoir le fabriquer vous-même ! DIY powaah !

Concrètement, deej c’est un boîtier que vous allez pouvoir bidouiller, avec de vrais curseurs physiques (bien old school !) qui vont contrôler le volume de vos applis, un fader pour Spotify, un autre pour votre jeu, un troisième pour Discord… Vous mixez tout ça en live comme un pro, et hop, fini les prises de tête !

Le système est hyper simple : vous avez une carte Arduino, quelques potentiomètres, des fils et un boîtier à fabriquer. Rien de sorcier, même pour un novice en électronique comme moi ! Et si vous avez une imprimante 3D, vous pourrez même télécharger des modèles tout faits sur Thingiverse. Sinon, un bon vieux bout de carton fera l’affaire aussi !

Côté software, c’est super bien pensé aussi. Vous avez un petit programme en Go qui tourne en tâche de fond sur votre PC et qui fait le lien entre votre mixeur et vos applications. Vous pouvez configurer ça facilement via un fichier YAML, pour assigner tel curseur à tel programme. Et si vous êtes un peu geek sur les bords, vous pourrez même bidouiller le code pour ajouter des fonctionnalités.

Fini les alt-tab frénétiques pour baisser le son au bon moment, vous passerez mixage en temps réel. Bref, un projet génial, qui mixe hardware, software, bidouille et open-source. Tout ce que j’aime !

A découvrir également ici pour le tuto.

Merci à Maitre Tofu pour le partage !

Le son des images #IA

Des chercheurs de l’Université du Michigan ont mis au point une technique absolument dingue qui permet de générer des spectrogrammes ayant l’allure d’images capables de produire des sons qui leur correspondent lorsqu’ils sont écoutés. Ils appellent cela des « images qui sonnent ».

Leur approche est simple et fonctionne sans entraînement spécifique. Elle s’appuie sur des modèles de diffusion text-to-image et text-to-spectrogram pré-entraînés, opérant dans un espace latent partagé. Durant le processus de génération, les deux modèles « débruitent » des latents partagés de manière simultanée, guidés par deux textes décrivant l’image et le son désirés.

Le résultat est bluffant ! Ça donne des spectrogrammes qui, vus comme des images, ressemblent à un château avec des tours, et écoutés comme des sons, font entendre des cloches. Ou des tigres dont les rayures cachent les motifs sonores de leurs rugissements.

Pour évaluer leur bidouille, les chercheurs ont utilisé des métriques quantitatives comme CLIP et CLAP, ainsi que des études de perception humaine. Leur méthode dépasse les approches alternatives et génère des échantillons qui collent finement aux prompts textuels dans les deux modalités. Ils montrent aussi que coloriser les spectrogrammes donne des images plus agréables à l’œil, tout en préservant l’audio.

Cette prouesse révèle qu’il existe une intersection entre la distribution des images et celle des spectrogrammes audio et en dépit de leurs différences, ils partagent des caractéristiques bas niveau comme les contours, les courbes et les coins. Cela permet de composer de façon inattendue des éléments visuels ET acoustiques, comme une ligne qui marque à la fois l’attaque d’un son de cloche et le contour d’un clocher.

Les auteurs y voient une avancée pour la génération multimodale par composition et une nouvelle forme d’expression artistique audio-visuelle. Une sorte de stéganographie qui cacherait des images dans une piste son, dévoilées uniquement lorsqu’elles sont transformées en spectrogramme.

Pour recréer cette méthode chez vous, il « suffit » d’aller sur le Github du projet et de suivre les instructions techniques.

Source

Créatures ou IA : consultez, manipulez & annotez les images des bibliothèques, musées… grâce à IIIF

L’initiative IIIF, pour International Image Interoperability Framework, est née de la constatation que la diffusion d’images patrimoniales sur le web était « trop lente, trop coûteuse, trop décousue, trop complexe ». IIIF apporte une solution pérenne et élégante à ces difficultés en conciliant accessibilité, interopérabilité et sobriété. Il intéresse les GLAM (collections, bibliothèques, archives, musées, etc.) ainsi que les acteurs de l’enseignement et de la recherche.

Concrètement, IIIF créé un cadre technique commun grâce auquel les fournisseurs peuvent délivrer leurs contenus sur le web de manière standardisée, afin de les rendre consultables, manipulables et annotables par n’importe quelle application compatible.

International Image Interoperability Framework

Sommaire

Origine de IIIF

En 2010, constitution d’un groupe de réflexion et d’expérimentation sur l’interopérabilité des manuscrits médiévaux numérisés à l’initiative de l’université de Stanford. Ses travaux ont conduit à l’élaboration d’un modèle de données Shared Canvas basé sur le modèle d’annotation du W3C.

À la même époque, de grandes bibliothèques nationales et des universités ont travaillé à la définition d’un mécanisme d’échange des images pour aboutir en 2012 à la publication de la version 1 de l’API Image de l'International Image Interoperability Framework (IIIF).

Le Consortium IIIF a été créé en 2015 par onze institutions : la British Library, Artstor, Die Bayerische Staatsbibliothek, la Bibliothèque nationale de France, Nasjonalbiblioteket (Norvège), Wellcome Trust, et les universités d’Oxford, Stanford, Cornell, Princeton et Yale. Il compte actuellement 69 membres.

Qu’est-ce que IIIF ?

Un aspect spectaculaire de IIIF réside dans la visualisation fluide des images et le zoom profond, cf. Sagami River, Kyoto (1660?-1670?). Princeton University, mais IIIF ne se résume pas à ça, loin de là.

_Sagami River, Kyoto (1660?-1670?) affiché par le visualiseur libre UniversalViewer

IIIF désigne à la fois le cadre technique partagé d’un ensemble de protocoles ouverts et une communauté humaine qui les implémente, développe des logiciels et in fine expose des contenus audiovisuels interopérables.

Ce standard de fait est utilisé par de plus en plus d’institutions culturelles — collections, bibliothèques, musées, archives, etc. — et scientifiques — universités, labos, muséums, etc. Ses fonctionnalités s’étendent maintenant à l’audio et à la vidéo ; la prise en compte de la 3D est en cours.

Pour l’heure, IIIF est surtout utilisé pour la diffusion d’images numériques. Ce sont ainsi des centaines de millions d’images qui deviennent véritablement découvrables, consultables, comparables, manipulables, citables, annotables et mixables par n’importe quelle application compatible capable de se « brancher » sur les entrepôts des uns et des autres.

Sans téléchargement de fichiers images, ces ressources de « première main » sont immédiatement utilisables par les professionnels comme par les amateurs. Elles intéressent aussi les chercheurs, les enseignants et les élèves, et les médiateurs culturels, scientifiques et artistiques. IIIF facilite grandement la diffusion, la réutilisation et la valorisation de toutes ces ressources disséminées.

Principe général d’interopérabilité de IIIF : trois applications différentes sont branchées à trois entrepôts IIIF (source : Biblissima+ — Licence Ouverte / Open License 2.0)
Principe général d’interopérabilité de IIIF : trois applications différentes sont branchées à trois entrepôts IIIF (source : Biblissima+ — Licence Ouverte / Open License 2.0)

Visualisation d’un document

Photo de Bob Fitch, Martin Luther King Jr. & Joan Baez (1966), visualisée avec le logiciel libre Tify

Copie d’écran du logiciel libre Tify présentant une photographie de Martin Luther King et de Joan Baez (Bob Fitch, 1966). Ce document est fourni par un serveur IIIF opéré par l’université de Stanford.

Visualisation de plusieurs documents

La magie IIIF c’est la capacité de jongler avec les références des ressources, par exemple, pour les réunir dans des bibliothèques virtuelles ou encore pour servir de points d’entrée aux robots et autres IA afin d’analyser les documents.

Léonard Limosin est un peintre, émailleur, dessinateur et graveur français du XVIe siècle. Deux de ses œuvres sont présentées ci-après dans le visualiseur libre IIIF Mirador.

Vues d’œuvres de Léonard Limosin avec le logiciel libre Mirador

Sur cette page, vous pouvez explorer chaque image et zoomer, les comparer, lire leurs métadonnées, passer en plein écran ou agencer différemment les fenêtres. L’interface de Mirador vous permet aussi d’accéder à d’autres références en cliquant sur le bouton rond bleu puis en sélectionnant les documents préenregistrés.

Vous avez aussi la possibilité d’en ajouter d’autres via le bouton bleu Ajouter une ressource en bas à droite, ensuite en insérant l’URL d’un manifeste IIIF. En faisant une recherche sur Léonard Limosin vous trouverez différentes collections comportant certaines de ses œuvres. Certaines les exposent au standard IIIF. Dans ce cas, pour chaque notice il s’agit de récupérer le lien d’un manifeste IIIF (explicite ou associé au logo IIIF). Exemple, avec cette Crucifixion au Fitzwilliam Museum (Cambridge).

Le logiciel libre Omeka dispose de fonctionnalités IIIF et permet de créer des bibliothèques virtuelles de ressources IIIF.

Apports de IIIF

D’après IIIF en 5 minutes.

Pour les usagers

L’accès à des images de haute qualité ainsi qu’à leurs métadonnées, large choix de visualiseurs libres :

Ces outils, et d’autres encore, offrent une large palette d’interfaces riches et universelles pour :

Il existe de nombreux dispositifs pour utiliser ces ressources de « première main » et corpus dans un environnement éducatif et de recherche.

Pour les diffuseurs

  • bénéficier d’une manière standardisée, cohérente et efficace, de présenter et de partager leurs collections,
  • améliorer leur visibilité, l’accessibilité à leurs données et développer des espaces de collaboration et de recherche,
  • faciliter la gestion des ressources numériques en garantissant un accès homogène et pérenne,
  • promouvoir la participation des usagers en mobilisant des outils avancés pour l’exploration et l’utilisation des ressources,
  • proposer des projets de transcription, de crowdsourcing ou de sciences participatives en fournissant des documents annotables,
  • réduire et mutualiser les coûts en utilisant un standard ouvert, des services et des logiciels éprouvés.

Pour les développeurs

Il existe de nombreux logiciels et composants compatibles avec les API de IIIF, beaucoup sont libres. La page officielle Awesome IIIF recense les principaux ainsi qu’un grand nombre de ressources documentaires et de services.

IIIF est entièrement basé sur les standards et l’architecture du Web (principes REST et du Linked Data, Web Annotation Model du W3C, JSON-LD) ce qui facilite le partage et la réutilisation des données.

Le découplage entre la couche serveur et la couche cliente, la modularité des composants logiciels, la ré-utilisabilité des ressources offrent une grande souplesse et réduit la dépendance à un logiciel ou un prestataire.

La communauté des usagers et des développeurs est active.

Comment ça marche ?

Le manifeste est un élément essentiel de IIIF. C’est un document au format JSON-LD qui représente généralement un objet physique numérisé tel qu’un livre, une œuvre d’art, un numéro de journal, etc. Il peut également rassembler des éléments de provenances diverses. Il décrit l’ensemble du document, ses métadonnées, sa structure et référence les images et les médias qu’il embarque.

Les liens des manifestes IIIF sont plus ou moins faciles à trouver dans les notices des catalogues. Une méthode simple consiste à rechercher le logo IIIF ou à explorer les informations fournies par les visualiseurs. Le site officiel de IIIF alimente un annuaire non exhaustif des sites et, site par site, fournit généralement un mode d’emploi pour récupérer les manifestes.

Techniquement, IIIF comporte deux API principales, l’API Image et l’API Presentation qui fonctionnent de concert.

API Image

L’API Image fournit des informations basiques sur l’image ainsi que les pixels de l’image entière ou de zones à la demande.

Elle se présente avec les éléments suivants :

  • une URL d’accès aux informations techniques d’une image, abcd1234 est un exemple d’identifiant :
    http://www.example.org/image-service/abcd1234/info.json
  • une URL à construire à la carte pour récupérer et manipuler tout ou partie de l’image en précisant la zone, la taille, l’orientation, la qualité et le format de l’image à produire.

schéma de l’URL API Image

Voilà ce que ça donne en pratique avec l’image de test. Attention ! LinuxFR met en cache les images, si vous souhaitez effectuer les manipulations, copiez et modifiez les paramètres des url ci-après.

Le fichier info.jsonest le suivant :

  • https://stacks.stanford.edu/image/iiif/ff139pd0160/K90113-43/info.json

  • rendu homothétique de l’image entière avec une largeur de 300px

    https://stacks.stanford.edu/image/iiif/ff139pd0160/K90113-43/full/300,/0/default.jpg

    image entière rendue homothétique avec une largeur de 300px

  • détail de la même image

    https://stacks.stanford.edu/image/iiif/ff139pd0160/K90113-43/1680,1100,1300,1300/300,/0/default.jpg

    détail

  • rotation et transformations

    https://stacks.stanford.edu/image/iiif/ff139pd0160/K90113-43/1680,1100,1300,1300/150,/45/default.jpg

    détail

    https://stacks.stanford.edu/image/iiif/ff139pd0160/K90113-43/1680,1100,1300,1300/150,/0/bitonal.jpg

    détail
    https://stacks.stanford.edu/image/iiif/ff139pd0160/K90113-43/1680,1100,1300,1300/150,/0/gray.jpg

    le rendu en niveaux de gris ne fonctionne pas avec ce serveur IIIF.

Pour en savoir plus consultez les spécifications de l’API Image (version 3.0 actuellement).

L’API Presentation

En complément à l’API Image, l’API Presentation fournit les propriétés d’un document IIIF : métadonnées, structures, annotations, etc.

Principales composantes d’un Manifeste IIIF

Principales composantes d’un Manifeste IIIF (source : Biblissima+ — Licence Ouverte / Open License 2.0)

Il existe de nombreux visualiseurs pour afficher ces documents et les informations associées. On distingue alors dans différentes zones le rôle de chacune des deux API principales.

API Image

Source : Biblissima+ — Licence Ouverte / Open License 2.0.

API Presentation

Source : Biblissima+ — Licence Ouverte / Open License 2.0.

À noter que le visualiseur optimise le trafic en ne demandant au serveur que la partie de l’image à afficher

Pour en savoir plus consultez les spécifications de l’API Presentation (version 3.0 actuellement).

Les autres API

Voir la page des spécifications, extensions, traductions et travaux en cours.

  • Authorization Flow (version 2.0) - décrit un système de contrôle d’accès.
  • Change Discovery (version 1.0) - fournit les informations nécessaires pour découvrir et utiliser les ressources IIIF.
  • Content Search (version 2.0) - définit le mécanisme d’interopérabilité permettant d’effectuer des recherches dans les annotations textuelles associées à un objet.
  • Content State (version 1.0) - permet de référencer tout ou partie d’un manifeste IIIF et de décrire des modalités d’accès.

Au-delà de l’image : l’audio, la vidéo et la 3D

Les références à des ressources audio et vidéo sont prises en compte dans la version 3.0 de l’API de présentation IIIF. À noter qu’il n’existe pas pour l’audio et pour la vidéo d’équivalents de l’API Image, en effet, cet aspect est pris en charge par les navigateurs. Exemple : audio et vidéo d’un morceau musical associés à la partition.

Il y a une forte demande pour la prise en compte de la 3D par IIIF. Un groupe de travail rassemble les institutions et les personnes intéressées. Il anime un dépôt Github qui rassemble les documents et expérimentations du groupe.

IIIF et IA

IIIF est de plus en plus utilisé par des dispositifs d’apprentissage et de reconnaissance automatique en raison de la facilité d’accès aux images entières ou à des zones, dans les définitions et qualités nécessaires. Il est aussi possible d’imaginer des IA qui génèrent automatiquement des manifestes annotés.

La société française Teklia s’est spécialisé dans ce domaine. Elle vient d'annoncer le passage sous licence libre de sa plateforme Arkindex.

Harvard Art Museums a créé AI Explorer qui mobilisent un certain nombre d’IA pour décortiquer des reproductions d’œuvres et des photographies.

Le Consortium IIIF a mis en place un groupe de travail et il existe une formation en ligne sur le sujet.

Commentaires : voir le flux Atom ouvrir dans le navigateur

Vibe – Une app de transcription audio compatible macOS, Windows et Linux

Vibe est un nouvel outil open source de transcription audio multilingue qui va vous faire vibrer ! Terminé le temps où vous deviez vous contenter de sous-titres approximatifs ou attendre des plombes pour obtenir une transcription potable.

Pour cela, il utilise l’IA Whisper, développé par les génies d’OpenAI et dont je vous ai parlé à maintes reprises. Ce modèle de reconnaissance vocale dernier cri est capable de transcrire un nombre ahurissant de langues avec une précision bluffante, ce qui permet de faire de Vibe une véritable solution audio polyvalente bourrée de fonctionnalités.

Vous pouvez par exemple transcrire des fichiers audio et vidéo par lots, prévisualiser le résultat en temps réel, exporter dans une flopée de formats (SRT, VTT, TXT…), et même personnaliser les modèles selon vos besoins. Il fonctionne entièrement hors ligne, donc pas de risque que vos données sensibles se retrouvent dans les griffes des GAFAM et ça tourne sous macOS, Windows et Linux. Pour cela, il vous suffit de vous rendre sur la page des releases GitHub et de télécharger la version qui correspond à votre OS.

Le support pour Apple Silicon est optimisé ce qui offre une performance accrue et pour Windows, la version 8 ou plus sera nécessaire, mais bon, je pense que vous êtes tous ou presque déjà sous Windows 10/11. Les utilisateurs Linux, quand à eux, peuvent installer Vibe via un fichier .deb, et les utilisateurs d’Arch Linux peuvent utiliser debtap pour convertir le paquet en fonction de leurs besoins.

Côté performance, c’est du gâteau puisque comme vous vous en doutiez, les ordinateurs Mac ont droit à une petite optimisation GPU qui booste les résultats. Mais même sur un vieux coucou Windows, Vibe est capable de s’adapter à vos ressources sans broncher via à ses réglages avancés. Et pour les Linuxiens, sachez que le support de l’audio système et du micro est prévu pour bientôt.

Bref, c’est à tester si vous êtes dans le business du sous-titre ou de la transcription.

Source

Re:AMP – Le retour de Winamp codé en Swift pour macOS

Vous vous souvenez de la belle époque de Winamp ? On est tous nostalgiques, je pense… Et bien bonne nouvelle si vous êtes sous macOS, Re:AMP est là pour vous servir !

Ce portage de Winamp en Swift permet d’avoir un lecteur audio moderne et performant au look bien rétro. Comme ça, vous allez pouvoir vous éclater comme un djeun des années 90 car il supporte une tonne de formats audio. Bref, ce player vous permettra de retrouver cette ambiance si particulière qu’on a connu au début des années 2000.

Et les développeurs de Re:AMP ne sont pas des manches puisqu’ils ont fait un boulot de dingue pour que tout soit stable et optimisé. Du coup, ça tourne comme sur des roulettes en plus d’être gratuit.

Mais attendez, j’ai gardé le meilleur pour la fin. Vous vous souvenez du Winamp Skin Museum ? Mais siiii, ce site mythique qui regroupe des milliers de skins pour Winamp ! Et bien ces skins (format .wsz) au look souvent douteux sont compatibles avec Re:AMP, histoire de bien avoir mal à la tête !

Vous pourrez comme ça retrouver vos habillages préférés et replonger encore plus dans la nostalgie. Perso, je me suis mis le thème Simpsons bien pixel :

Bref, si vous êtes un passionné de musique et un nostalgique de Winamp, vous ne pouvez pas passer à côté de ce truc à télécharger ici !

Source

MoOde – Le lecteur audio Raspberry Pi préféré des audiophiles

Vous cherchez un lecteur audio open source de qualité pour votre Raspberry Pi ? Ne cherchez plus, moOde audio est là pour vous !

Ce lecteur audio totalement gratuit et distribué sous licence GPL permet d’avoir un véritable serveur musical sur votre Rpi pour en faire profiter toute la famille. C’est un peu comme Volumio dont je vous ai déjà parlé, mais en beaucoup plus abouti. En plus, les gars derrière moOde sont des vrais. Pas de pubs intrusives, pas d’abonnements à la noix, zéro cookies ou tracking à la Google. Toutes vos données restent bien au chaud sur votre Raspberry Pi, et ne sont refilées à personne d’autre. Bon, après si vous voulez les soutenir, vous pouvez toujours faire un petit don…

Pour installer moOde, c’est facile. Vous chopez l’img et vous allez suivre le guide d’installation qui est juste là. En gros, vous préparez votre image avec le Raspberry Pi Imager, vous pouvez même configurer le SSH et le WiFi direct, et après vous balancez le tout sur votre carte SD. C’est du classique pour les utilisateurs de Raspberry Pi. Rien de plus simple !

La dernière version, la 8.3.9, est dispo pour les modèles 3B, 3B+, 3A+, 4, 400, les Compute Module 3, 3+ et 4, et même le petit dernier le Zero 2 W et elle tourne sur une debian Bullseye 64 bits. Autant dire que ça va envoyer du lourd côté performances audio.

D’ailleurs, parlons-en de l’audio. moOde gère une flopée de périphériques compatibles avec les Raspberry Pi. Que vous ayez une enceinte Bluetooth ou quelque chose de plus « filaire » comme un DAC USB (Digital Audio Converter), une carte d’extension Hat ou carrément un streamer réseau, y a de fortes chances que ça fonctionne direct. Et niveau réglages, les audiophiles vont être aux anges puisqu’il y a de quoi faire du réglage fin sur votre son comme jamais !

Le top du top, c’est l’interface web. Super bien foutue, responsive, elle s’adapte parfaitement à votre appareil, que ce soit un pc, une tablette, un smartphone ou même une TV. Pas besoin d’installer quoi que ce soit, un simple navigateur suffit. Vous pourrez lancer la lecture d’un album, écouter la radio, taguer vos morceaux, accéder à des partages de fichiers via SMB et NFS, balancer le son en AirPlay ou avec Spotify Connect, faire du multiroom synchronisé et profiter de fonctionnalités audiophiles comme le support des formats hi-res, un égaliseur paramétrique, et divers algorithmes de rééchantillonnage. Pour les devs, y a même une API REST pour faire mumuse.

Et si vous avez besoin d’aide ou que vous voulez causer son entre passionnés, le forum moOde est là pour vous. Les devs sont ultra réactifs et la communauté est au taquet. Vous pouvez même choper les dernières news sur le développement du player.

Côté technique, si vous voulez mettre les mains dans le cambouis, un guide du développeur est dispo. Vous pourrez gérer les paquets et générer vos propres images.

Ah et j’allais oublier, les gars de moOde vous ont même concocté un petit DAC NOS (Non-Oversampling) à monter vous-même : le ProtoDAC. Il paraît que le son est d’enfer, surtout si vous utilisez des composants de qualité. Les plans et le guide sont dispos, vous avez juste à commander vos PCB et sortir votre fer à souder.

Bref, vous l’aurez compris, moOde c’est que du bon fait par des pro du son pour les audiophiles geeks qui aiment faire les choses eux-mêmes. Alors, n’attendez plus, foncez sur le site, chopez l’img et transformez votre Raspberry Pi en un lecteur audio de compèt’ !

Merci à François pour le partage !

Stable Audio 2.0 – L’IA qui ne remplacera pas les musiciens

Bonne nouvelle, les David Guetta de demain, ça ne sera pas vous ! Il vous suffit de balancer quelques mots dans une IA, et hop, elle vous pond un morceau de musique entier, avec une qualité discutable ! Mais pour faire souffrir ses voisins, c’est pas mal et l’exploit technique est intéressant quand même. C’est exactement ce que propose Stable Audio 2.0, la nouvelle version du générateur musical de Stability.ai.

Vous lui donnez des instructions en langage naturel, genre « Compose-moi un morceau de rock épique avec un solo de guitare déchirant sur le thème de l’espace« , et bim, l’IA se met au boulot ! En quelques secondes, elle vous sort une piste audio complète de 3 minutes, en stéréo 44.1 kHz s’il vous plaît.

Voici ce que j’ai fait rien que pour vous :

Stable Audio 2.0 ne se contente pas de générer de la musique à partir de zéro. Vous pouvez aussi lui filer vos propres samples audio et lui demander de les transformer comme bon vous semble. Par exemple, vous prenez un extrait de votre morceau préféré de Metallica, vous le refilez à l’IA en lui demandant de le remixer façon dubstep avec une touche de jazz manouche, et voilà, c’est parti mon kiki !

Bon, je vous vois venir avec vos grands chevaux : « Oui mais Korben, et les droits d’auteur dans tout ça ?« . Eh bien figurez-vous que les petits gars de Stability AI ont pensé à tout. Pour entraîner leur modèle, ils ont utilisé une base de données de sons sous licence provenant d’AudioSparx, en donnant la possibilité aux artistes de se retirer du projet s’ils le souhaitaient. Et pour éviter que des petits malins utilisent des samples protégés, ils ont intégré une technologie de reconnaissance de contenu qui empêche l’utilisation de matériel copyrighté. Bien vu les gars !

Alors, vous en pensez quoi ? Perso, je trouve que c’est une sacrée avancée pour les créatifs en herbe comme pour les pros de la musique même si on est encore trèèèès loin d’un rendu propre. Pour le coup, je préfère Suno. Mais ça peut donner de l’inspiration. Ça ne remplacera jamais le talent et la sensibilité d’un vrai musicien mais ça reste un bon logiciel dans la boîte à outils des artistes

Pour tester Stable Audio 2.0, c’est sur le site officiel. C’est gratuit pour 20 crédit et hyper simple à prendre en main, vous m’en direz des nouvelles !

Nava – La lib Python pour jouer du son dans votre code

J’aime bien faire un peu de Python de temps en temps et il m’arrive parfois de vouloir jouer un son dans mes scripts pour signaler qu’un traitement est fini ou tout simplement mettre un peu de fun. Jusqu’à présent j’utilisais des libs comme Pygame, Playsound ou encore Pydub mais ces trucs-là ne sont pas forcément bien supportés par tous les OS, ou nécessitent des dépendances comme FFMpeg.

Toutefois, une lib baptisée Nava vient de faire son apparition et c’est la simplicité même. Elle fonctionne sur tous les OS (Linux, macOS, Windows), et n’utilise aucune dépendance ou logiciel tiers. Vous pouvez lui faire lire du WAV et du MP3 et la lecture se lance immédiatement.

Pour l’installer, rien de plus simple :

pip install nava

Et ensuite, il suffit de l’appeler dans votre code et de lui indiquer le morceau à jouer.

from nava import play
play("son.mp3")

Vous pouvez même lancer une lecture en asynchrone pour ne pas bloquer votre script. Dans l’exemple ci-dessous, on lance un time sleep qui peut donc couper la lecture du son au bout de 4 secondes et qui comme vous le voyez, n’est pas bloqué puisque nava est lancé en mode asynchrone avec le paramètre async_mode=True :

import time
from nava import play, stop
sound_id = play("son.wav", async_mode=True)
time.sleep(4)
stop(sound_id)

Voilà, j’espère que ça vous sera utile 🙂

❌