PROJET AUTOBLOG


Le blog de Seboss666

Site original : Le blog de Seboss666

⇐ retour index

Un bracelet connecté qui ne téléphone pas maison ? C’est possible !

jeudi 17 août 2017 à 18:30

Oui, moi qui n’hésite pas à vous rabâcher en permanence que votre vie privée n’est pas à vendre, m’intéresse malgré tout depuis un moment à des moyens de surveiller mon activité physique, surtout dans le cadre d’un processus pour commencer à perdre du poids. Pourquoi parler de vie privée ? La quasi-totalité des objets dit connectés, sont surtout connectés à leur fabricant qui s’occupe de siphonner toutes les données qu’ils collectent via leurs appareils sur votre compte (certes pour vous fournir un service, mais ce n’est pas seulement pour ça), et c’est ce que je cherche à éviter à tout prix. Heureusement, un petit village résiste encore et toujours à l’envahisseur il existe une application qui conserve les données en local sur le téléphone et est compatible avec certains bracelets du marché.

Je tiens à remercier Luernos pour m’avoir d’abord présenté cette possibilité lors d’un after du Premier Samedi du Libre, ainsi que le rafraîchissement de ma mémoire via Twitter quand je me suis lancé.

L’application en question s’appelle GadgetBridge, est est disponible sur F-Droid. Elle est compatible avec les bracelets de marque Xiaomi (chinois), et les défuntes montres Pebble. Ne pouvant pas acheter une montre depuis le rachat par Fitbit, j’ai regardé de quoi les bracelets du constructeur chinois sont capables. Les fonctions sont limitées suivant les modèles, et je me suis concentré sur le modèle le plus récent, le Mi Band 2, qu’on trouve notamment sur Amazon à moins de 30 euros. Au programme, lecture du rythme cardiaque, capteur de mouvement pour l’activité physique, déportation des notifications et affichage de l’heure. Tout ça sur un écran minuscule éteint la plupart du temps, ce qui devrait permettre de concentrer toute l’attention de la batterie sur la capture des mouvements.

Premier contact : pas parfait, bidouille nécessaire

Le premier appairage entre le bracelet et l’application a eu lieu au deuxième essai. A comparer à mon ancien manager qui avait acheté le même bracelet et galéré 1h30 pour faire la même chose avec son téléphone et l’application officielle. On apprend alors que dans sa configuration par défaut, le firmware est apparemment très vieux, et va donc devoir être mis à jour pour être pleinement fonctionnel. D’autant plus que le support de l’application varie d’une version à l’autre du firmware. Ne serait-ce que pour les infos cardiaque si on en croit le wiki.

C’est là que les choses se sont un peu compliquées, mais à bidouilleur, bidouilleur et demi. Le firmware à jour se trouve dans le fichier APK de l’application Mi Fit. Rien de surprenant, mais étant donné qu’on cherche justement à s’en passer, c’est un peu gênant. L’application se trouve sur le Play Store, j’ai donc cherché un moyen de le télécharger sur mon pc pour extraire uniquement les fichiers nécessaire. Après une petite recherche, c’est gplaycli qui va me servir. C’est un utilitaire qui est compatible uniquement avec Python 2.7 (le portage semble en cours vers Python 3), j’ai donc sur mon poste utilisé la commande suivante pour l’installer :

pip2 install gplaycli

Il faut ensuite créer manuellement le fichier /etc/gplaycli/gplaycli.conf (dossier à créer également) :

[Credentials]
gmail_address=
gmail_password=
#keyring_service=gplaycli
android_ID=3d716411bf8bc802
language=fr_FR
token=True
token_url=https://matlink.fr/token/email/gplaycliacc@gmail.com
retries=10

[Cache]
token=~/.cache/gplaycli/token

J’ai collé mes identifiants Google, et j’ai pu ensuite récupérer le fichier :

[seboss666@seboss666-ltp ~/dev ]$ gplaycli -d com.xiaomi.hm.health
Download complete

L’id se récupère avec l’URL en faisant une recherche sur le Play Store en version web. En relisant le tableau j’ai un problème : la dernière version de l’application contient la dernière version du firmware et ce n’est pas ce que je recherche puisque d’après ce même tableau le dernier firmware en date sent un peu le moisi (enfin je suis certain qu’il fonctionne très bien avec l’application officielle, mais ça…).

Finalement, je suis contraint de me tourner vers APKMirror pour récupérer la version 2.3.0. Dommage, au moins ai-je une solution qui fonctionne pour récupérer des APK depuis le Play Store si besoin.

Bref, la mise à jour du Mi Band 2 se fait ensuite en deux temps d’après la doc : d’abord flasher le 1.0.0.53, puis ensuite le 1.0.1.39, ainsi que les polices qui vont avec pour les notifications textes. C’est diablement simple, on envoie les fichiers .fw correspondants sur le téléphone via USB, et depuis un explorateur de fichier on a le choix de l’ouvrir avec l’utilitaire de mise à jour de firmware. On patiente un peu et roulez jeunesse. L’ajout des polices se fait même à chaud. Si le support des mises à jour s’affiche en beta, j’ai effectivement pu constater que parfois, l’application ne détecte pas correctement que le flash est terminé, bien que la connexion aie été réinitialisée. En dehors de ça, c’est tout à fait fonctionnel.

L’utilisation les premiers jours

Sinon, qu’est-ce que j’en pense ? Eh bien, déjà j’ai une sale tendance à gonfler comme un ballon de baudruche arrivé le soir, ce qui fait que le bracelet me serre à mort, il est donc fréquent de le réajuster. La partie « activité » s’enclenche dès qu’on bouge un poil, j’ai pu le constater en essayant la section « activité en temps réel » de GadgetBridge. Rien que le fait de boire de l’eau fait un peu bouger le capteur, à comparer quand j’aurai vraiment fait quelque chose de violent d’un point de vue activité.

Concernant la lecture du rythme cardiaque, j’ai l’impression qu’elle se fait à l’envers tellement j’ai des résultats bizarres. Déjà, elle n’est pas continue, il faut appuyer sur le bracelet et basculer sur la fonction, attendre quelques secondes et lorsqu’il vibre, le résultat est affiché. Mais souvent, il me dit que le rythme est plus élevé alors que je suis au repos comparé à un instant où je peux transpirer pas mal (du style, après avoir enchaîné ménage, vaisselle, lessive, car oui quand on est gros et qu’on a plus l’habitude, ça suffit à faire transpirer). J’ai au départ pensé à un problème avec mes poils, mais la lecture était pire en plaçant le capteur sur l’intérieur du poignet. Je suis donc clairement déçu sur ce point et c’est pourtant l’une des mesures que je comptais suivre et qui a justifié l’achat à la base (ça semble confirmé d’après ce thread Quora). La lecture en continu nécessite une application dédiée qu’évidemment je ne suis pas prêt d’installer puisque les conditions qui m’interdisent d’installer l’application de base s’appliquent toujours. Évitez également de mesurer plusieurs fois dans la même minute, le timestamp se limite à cette granularité, le graphe devient tout chelou s’il y a plusieurs valeurs au même moment. Dommage.

Petit résumé du sommeil avec la répartition, comparé à l’activité en journée

La seule chose pour l’instant qui semble relativement fiable, et là j’ai aucune raison du pourquoi, c’est le sommeil. Les données différencient sommeil profond de sommeil léger, et malgré quelques trous dans la lecture, ça semble correspondre pas mal. Je pense qu’il faudra du temps pour avoir une base de comparaison de ces données. A noter que le bracelet peut rester déconnecté du smartphone un moment sans perdre de données, ce qui est toujours pratique, j’ai eu très sporadiquement une déconnexion du bracelet sans raison particulière.

Parmi les points positifs restants, les notifications sont sympas aussi pour éviter d’avoir à sortir systématiquement son smartphone de sa poche. Il y a les notifications de base pour les appels, les SMS, les mails (que je n’utilise pas), et un support des notifications génériques (besoin d’autoriser l’accès), ce qui permet d’afficher l’application qui envoie une notification.

Un autre point fort est la batterie, après l’avoir reçu le mardi et chargé à bloc, le samedi soir j’étais à 91%. Il est possible que ça soit moins efficace en cas d’activité soutenue et répétée, ou si on s’amuse à demander en permanence la récupération des data sur le téléphone. Mais c’est tout de même un très bon point. (update après deux semaines, encore 59% de charge, vraiment bon).

Un autre point fort qui retombe dans la technique pure, les données de GadgetBridge sont exportées dans une base sqlite3, il est donc ensuite possible de la parcourir et potentiellement visualiser ces données en dehors de l’application (je n’ai pas encore trouvé de tels outils, mais potentiellement un grafana pourrait aider). Donc j’en reparlerai sûrement dans quelques semaines.

Verdict ?

Les solutions sont rares, mais pouvoir mesurer son corps sans qu’une société étrangère ne récupère toutes ces informations pour son compte est possible. Cependant, comme on pouvait s’y attendre la qualité n’est pas nécessairement super top, je ne parle pas de l’application qui est visuellement propre et fait le taf, mais bien du matériel, à moins de 30 balles le bracelet c’est pas évident. La qualité de fabrication est de mon point de vue irréprochable, mais côté précision, c’est pas la joie. Tout comme certains acceptent d’utiliser des logiciels libres dont la qualité n’est pas toujours irréprochable, il est dommageable de ne pas disposer de ces solutions matérielles à une qualité comparable.

Évidemment, si vous connaissez d’autres dispositifs qui sortent d’ailleurs qu’un obscur projet KickStarter (ou apparenté évidemment), je parle d’une solution accessible grand public de qualité qu’on peut présenter comme une alternative viable, surtout en ce qui concerne la collecte de données, hésitez pas à partager en commentaires. Dans tous les cas attendez-vous à un retour dans quelques semaines.

Petite parenthèse culturelle : Leo Moracchioli

lundi 14 août 2017 à 18:30

Une fois n’est pas coutume, j’ai envie de vous parler d’un artiste multicasquettes, découvert par un ami plus métalleux que moi qui plutôt que de suivre des conférences sur la vie privée et la sécurité, cherche toujours de nouvelles musiques à écouter.

Contrairement à ce que son nom indique, Leo est norvégien. Ce musicien, qui sait manifestement jouer d’un nombre indécent d’instruments, tient depuis quelques années une chaîne YouTube à l’éffigie du studio qu’il a monté, Frog Leap Studios, qui sert à la fois de réceptacle à ses petites « vlog » qu’au cœur de son activité principale : les reprises de chansons au format « Métal ».

Et tout y passe, de la Macarena à Britney Spears en passant par Sia, Coolio, Pharell Williams, Mickael Jackson, ZZ Top, La reine des neiges (en fait j’adore sa version de la chanson plutôt que l’originale), Le roi Lion, ou encore Jamiroquoi, Nicki Minaj, Aqua, Blur, Ace of Base… Rien ne semble lui résister, même si comme pour tout artiste, certains morceaux sont bien plus inspirés que d’autres. Les clips valent autant que les musiques elles-mêmes, dans lesquels participent parfois des amis musiciens, mais aussi sa femme, bassiste (comme c’est surprenant), et également sa fille, trop choupinou.

C’est également un grand collectionneurs de guitares, il est même allé jusqu’à se fabriquer la sienne, et franchement, allez voir, ça a trop de la gueule ce qu’il a fait. Malgré tout, comment fait-il pour se payer ses guitares, bien que très occasionnellement on lui en offre carrément une ? Eh bien, en dehors de l’audience YouTube, ses morceaux sont disponibles pratiquement partout, comme en atteste la page d’accueil du site. La disponibilité est cependant un peu aléatoire, j’ai pu en attester sur Amazon. Les options les plus recommandables sont dès lors Patreon, ou mieux, la nouvelle boutique qu’il vient d’ouvrir ou la majorité de l’argent tombe dans sa poche à lui. C’est ce que j’ai fait et continuerai à faire pour les prochains albums.

C’est d’ailleurs un de ses morceaux que j’ai utilisé pour la petite comparaison de formats audio, vous voyez que la qualité est au rendez-vous. Faut juste avoir de l’espace (rappel, les 14 archives pèsent un petit 7.6Go). Vous avez donc normalement les billes si vous vous payez ses morceaux et que vous manquez cruellement de place (sinon demandez, j’ai toujours pas avancé mon dépôt persos de scripts en vrac).

Voilà. Ne vous attendez pas à un million d’articles de ce genre, au delà de la musique c’est surtout les moyens de le récompenser pour son taf excellent qui m’ont motivé à partager (j’ai d’ailleurs probablement déjà partagé certaines chansons sur Twitter). Après, comme on dit, « ne jamais dire fontaine je ne boirais pas de ton eau »…

Bonne écoute et à bientôt 😉

Quelques astuces diverses, septième

vendredi 11 août 2017 à 18:30

J’aime mon métier. On est jamais une semaine sans faire quelque chose de nouveau, de bricoler certaines commandes, de gagner du temps dans l’absolu, de devoir contourner une limitation bizarre. Bref, vous l’avez compris, y’a toujours des choses à apprendre, et il serait idiot de ne pas partager tout ça.

Nettoyer les fichiers temporaires de Rsync

Après un rsync foireux (sans utiliser –append-verify), beaucoup de fichiers partiels sont restés sur le serveur de destination. Ce sont de simples fichiers cachés, pour les nettoyer, c’est pas compliqué :

find /dir/to/search/ -type f -iname ".*" -ls

Attention toutefois si des fichiers cachés légitimes se trouvent dans ces dossiers (.htaccess par exemple).

Synchroniser uniquement les permissions d’une arborescence depuis un backup

J’ai eu l’occasion de devoir uniquement réparer les permissions d’une arborescence après un chmod 755 malencontreux sur tous les dossiers d’un client (cassant des dépots Git, des traitements automatisés…). Contrairement à ce qu’on pense, ce n’est pas rsync qui va faire le taf à partir du backup :

$ cd /mnt/backup/www
$ find . ! -type l -exec chmod -v --reference='{}' /www/'{}' \;
$ find . ! -type l -exec chown -v --reference='{}' /www/'{}' \;

Bien évidemment j’ai compris ça après avoir fait mon rsync…

Python/virtualenv : faire en sorte qu’un venv puisse exploiter les modules « globaux »

Un problème que j’ai découvert avec virtualenv, c’est que si on installe un module via le gestionnaire de paquets, donc accessible via tout le système, ce n’est pas le cas pour vos environnements virtuels Python, du moins par défaut. Pour corriger ce petit souci, il faut mettre à jour son environnement avec la commande suivante :

virtualenv --system-site-packages <nom_du_venv>

Évidemment l’alternative est d’installer le module au sein du virtualenv 😀

Utilisateur en lecture seule pour mysqlump

Un collègue a pensé que le SELECT était suffisant pour un utilisateur en lecture seule destiné à faire des dumps. Il n’était pas si loin :

mysql> GRANT SELECT, LOCK TABLES ON 'user'@'host';

diff au travers d’SSH

Quand vous devez comparer le contenu de deux fichiers, diff est un des outils les plus pratiques pour identifier les points à corriger. Il y a par contre quelques subtilités quand les deux fichiers en question ne se trouvent pas sur le même serveur :

Avec une clé SSH sans passphrase :

diff foo <(ssh myServer 'cat foo')

Si besoin d'un mot de passe :

vimdiff /path/to/file scp://remotehost//path/to/file
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"

Vérifier la date d’un certificat SSL/TLS avec OpenSSL

Soit vous utilisez votre navigateur, mais c’est lent (chargement complet du site, plusieurs clics pour afficher le contenu du certificat), un peu plus rapide avec une extension comme Calomel SSL Validation, sinon, inévitablement OpenSSL revient sur le tapis :

[seboss666@SebLBNvm ~ ]$ echo | openssl s_client -servername blog.seboss666.info -connect blog.seboss666.info:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jul  7 00:00:00 2017 GMT
notAfter=Sep  5 23:59:59 2019 GMT

Relancer automatiquement la connexion MySQL pour votre API en Python

Je suis en train de réécrire l’API pour collect que j’avais commencé à l’époque, toujours en Python, mais avec Flask au lieu de Bottle, et en conservant la base MySQL plutôt que MongoDB. Mais une chose à laquelle je ne m’attendais pas, c’était que la connexion pourtant persistante que mon application crée lors du lancement finit par être coupée (par MySQL probablement). Et par défaut, il ne la rétablit pas, pour ça, il suffit d’ajouter une petite ligne au début de votre code :

base = mdb.connect('127.0.0.1', 'user', 'pass', 'base')
base.ping(True)

Drupal : lister les modules installés avec Drush

Le site d’un client m’envoyait les logs Drupal dans /var/log/messages (très, très dégueulasse on est d’accord), en lui demandant de changer ce paramètre l’agence nous dit qu’il n’y a rien à faire côté Drupal. Pas de bol, après un grep dégueu j’ai identifié le module coupable . Mais il y a plus propre avec drush :

[www-data@client-p-web01:~/www/current/src]$ drush @sites pm-list --yes --type=module --status=enabled |grep syslog
Core Syslog (syslog) 7.56

Forcer le type d’un fichier particulier avec Nginx

Quand on peut pas installer le module more_headers, et qu’nginx force application/octet-stream, un simple add_header ne suffit pas, il faut jouer un peu plus :

location /download/ {
types { }
default_type text/plain;
}

Whitelister le dossier .well-known pour Let’s Encrypt sur Nginx

Nginx toujours. Un client a empêché que ses certificats Let’s Encrypt soient renouvelés en ajoutant des règles de sécurité. Combiné avec une redirection forcée vers HTTPS, c’est une catastrophe. Pour empêcher Nginx de me renvoyer lors du challenge ACME, j’ai dû adapter un peu la configuration :

server {
    listen 80;
    server_name domain.tld;
    root /var/www/;

    location ~ ^/(?!\.well-known) { return 301 https://$server_name$request_uri; }

}

Je vous laisse vous torturer l’esprit pour comprendre la regex 😛 Le résultat est là : pas de redirection HTTPS lors du challenge ACME, et le renouvellement a pu se faire.


Comme d’habitude, si vous avez vous aussi des bricoles rapidos comme ça à partager, les commentaires complètent très bien 🙂 (ou au pire envoyez par mail, j’inclue dans un prochain billet en vous citant)

Petites différences entre WAV, FLAC, MP3

mercredi 9 août 2017 à 18:30

Avant d’aborder le sujet plus global de la compression de données, j’aimerai vous partager rapidement quelques détails sur les raisons qui ont fait du MP3 le champion de l’audio numérique grand public depuis maintenant près de 20 ans, et ce même si d’autres ont tenté de le remplacer à plusieurs reprises.

Petit rappel sur les formats

Le WAV est un format non compressé d’audio. D’un point de vue purement technique, c’est du PCM. Le FLAC, c’est un format compressé mais sans pertes, libre de brevets. Le MP3 est en revanche un format compressé, initialement affublé d’une tétrachiée de brevets qui ne l’ont pas empêché de se retrouver dans tous les appareils du marché pendant maintenant 20 ans. Initialement parce que depuis quelques mois, les derniers brevets sont arrivés à expiration et donc maintenant plus aucune restriction n’existe pour son utilisation dans tout types de produits.

Petit rappel sur l’échantillonnage et le bitrate

Dans le domaine de l’audio numérique, la fréquence d’échantillonnage correspond au nombre de fois qu’on capture un son en une seconde. Plus la fréquence est élevée, plus le son capturé est proche dans son évolution de ce qu’on entend avec nos oreilles. Il faut aussi tenir compte de la taille de l’échantillon : en informatique, on code avec des bits, séries de 0 et de 1. plus il y a de bits pour un échantillon, plus la quantité d’informations est importante, et plus fidèle sera le son.

Chaque marche représente un échantillon, plus on a d’échantillon, plus on est proche de la courbe d’origine

Exemple, le CD audio que l’on connaît maintenant depuis plus de 30 ans utilise une fréquence d’échantillonnage de 44100 Hz sur 16 bits (soit 44100 échantillons par seconde).

Vient enfin le concept de bitrate, qui dans le cas du MP3 est lié à la compression : un débit de bits plus faible indique une compression plus forte, ce qui veut dire une perte d’information plus grande. Voilà pourquoi je considère les plateformes grand public comme des destructeurs, puisque trop souvent le MP3 se limite à maximum du 256kbps (même si de rares vendeurs proposent jusqu’à 320kbps).

Voilà, on a les bases, on peut y aller.

Attaquons les choses sérieuses : la comparaison

Le morceau que j’ai utilisé provient d’un artiste dont je vous parlerai plus longuement dans un billet dédié. Sa version non compressée fait 50Mo :

-rw-r--r-- 1 seboss666 seboss666 50M 17 juin   2015 './Never Gonna Give You Up Metal.wav'
[seboss666@seboss666-ltp ~/tmp ]$ ffmpeg -i Never\ Gonna\ Give\ You\ Up\ Metal.wav 
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
 built with gcc 7.1.1 (GCC) 20170630
 configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3
 libavutil 55. 58.100 / 55. 58.100
 libavcodec 57. 89.100 / 57. 89.100
 libavformat 57. 71.100 / 57. 71.100
 libavdevice 57. 6.100 / 57. 6.100
 libavfilter 6. 82.100 / 6. 82.100
 libavresample 3. 5. 0 / 3. 5. 0
 libswscale 4. 6.100 / 4. 6.100
 libswresample 2. 7.100 / 2. 7.100
 libpostproc 54. 5.100 / 54. 5.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'Never Gonna Give You Up Metal.wav':
 Metadata:
 encoded_by : REAPER
 date : 2015-06-17
 creation_time : 01-00-44
 time_reference : 788894
 Duration: 00:03:16.34, bitrate: 2116 kb/s
 Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s32 (24 bit), 2116 kb/s

La rapide petite analyse nous indique donc du PCM, avec une fréquence de 44100Hz sur 24 bits, soit un peu mieux que notre bon vieux CD audio. J’aurais pas craché sur du 96kHz mais on va pas chipoter non plus, 14 albums pour 70$ sans compression, même sans tenir compte du taux de change, la qualité est déjà bien au dessus de ce qu’on peut trouver sur les plateformes grand public.

Malgré un espace confortable de 16Go, je ne compte pas engorger la clé USB utilisée pour mon autoradio avec autant d’espace consommé. Les archives ZIP pèsent à elles seules 7,6Go, Rajoutez une trentaine de Mo par album une fois extrait. Vous comprenez maintenant d’où vient l’idée de l’article ?

Pour parvenir à mes fins j’ai réadapté certains vieux scripts, et notamment celui pour le passage du FLAC au MP3 qui a maintenant de la bouteille mais qui fait toujours autant le travail. Commençons justement par la conversion en FLAC, avec une petite subtilité. Lors de mes recherches sur les options que je pourrai appliquer, j’ai cherché comment conserver au maximum la qualité originale, ne sachant pas notamment si l’encodage de 24bit allait être conservé. Eh bien oui, si on utilise les options suivantes :

ffmpeg -i "$FILE" -map_metadata 0 -af aformat=s32:44100 "${FILE%.*}.flac";

Dans les infos originales, on a déjà ce s32 affublé d’un « 24bit » juste à côté. Donc ça donne quoi ?

-rw-r--r-- 1 seboss666 seboss666 42M 30 juil. 08:43 './flac/Never Gonna Give You Up Metal.flac'

Seulement 8M de gagné, c’est pas foufou, mais rapporté à 12×14 morceaux, ça fait 1,3Go de gagné. Un joli début donc. Admettons que j’accepte de sacrifier une partie de la qualité, en repassant sur un encodage en 16bit. Déjà pourquoi ferais-je une chose pareille ? Ne serait-ce que parce que je n’ai pas d’appareil d’une qualité suffisante me permettant d’apprécier toute la clarté du son, que de toute façon une de mes oreilles commence légèrement à décliner par rapport à l’autre (à moins que ça ne soit directement mon cerveau, ce qui n’est pas exclus non plus); et si la qualité CD convient à une grande majorité de personnes depuis 30 ans, et que toutes les tentatives grand public pour le remplacer ont échoué (au point qu’on voit revenir le Vinyle en force), et si les gamins de maintenant arrivent à supporter un MP3 compressé à mort lu par leur smartphone sur le casque Beats horriblement cher qu’ils ont extorqués à leurs parents, on est pas près d’élever le niveau. 16bit seraient donc suffisants pour le commun des mortels.

On remarquera donc l’ironie de la chose puisqu’on va utiliser un format dit sans perte mais on va mécaniquement perdre de l’information. Pour ça, il faut légèrement modifier l’option aformat :

ffmpeg -i "$FILE" -map_metadata 0 -af aformat=s16:44100 "${FILE%.*}.flac";

Oui c’est aussi simple et puissant que ça. Voyons dès lors le résultat :

-rw-r--r-- 1 seboss666 seboss666 25M 30 juil. 08:44 './flac_16bit/Never Gonna Give You Up Metal.flac'

Ah ouais. Là on se rapproche d’une taille raisonnable, mais au prix d’une information moins précise.

L’information moins précise, on va l’obtenir de toute façon avec le MP3, avec les mêmes réglages que mon script original, simplement en disant qu’on cherche du WAV au lieu du FLAC, ce qui nous donne le fichier suivant :

-rw-r--r-- 1 seboss666 seboss666 7,5M 29 juil. 08:54 './mp3/Never Gonna Give You Up Metal.mp3'

Bon ben là ça met tout le monde d’accord. A noter qu’on a tout de même conservé le 44100 Hz et qu’on est repassé sur 16 bits :

Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s

Et à l’écoute, en fonction des outils (casque, carte son, logiciel de lecture/égaliseur, autoradio), le résultat reste plus que correct. On comprend mieux dès lors pourquoi, même affublé de brevets, le format a explosé d’abord de manière illégale (pour ceux qui ne connaissent pas l’histoire, il n’y avait AUCUNE plateforme de vente numérique de musique lorsque Napster est apparu en 1999), puis sur les plateformes en ligne une fois la lubie des DRM dépassée (avant que l’évolution des débits ne permette l’apparition et l’expansion du streaming, retirant le contrôle de l’écoute des mains des consommateurs).

Quel format choisir dès lors ?

Celui que vous voulez ! Tout dépendra de vos contraintes, qu’elles soient liées à l’espace disque (les smartphones ne sont pas spécialement bien équipés de ce côté-là), à l’appareil sur lequel vous allez jouer la musique (mon autoradio ne supporte tout simplement pas le FLAC), au dispositif de restitution (enceintes, casques), bref, vous avez compris. Pour ma part, je garde plusieurs versions : les WAV d’origine, dans leur archive que je vais tout de même passer au format 7z, ce qui me permet là aussi d’économiser environ 80Mo par album (et encore cette valeur est tirée d’un test avec les options par défauts de 7z en ligne de commande), et les FLAC 16bit. A l’occasion, si j’ai besoin d’un support supplémentaire, je fais la conversion rapidement, et le tour est joué 🙂


Bonus : les formats qui ont tenté de supplanter le MP3

Ce n’est pas une liste exhaustive (faites un ffmpeg -codecs |grep D.A pour vous en convaincre), mais lorsque le MP3 a commencé à rencontrer son succès auprès du grand public, les vendeurs de musique ont mis des années à proposer leur catalogue en ligne de manière légale, d’abord affublé de restrictions (DRM, pour Digital Rights Management, ou MTP en français, Mesure Technique de Protection – en bref, un dispositif destiné à vous empêcher de faire ce que vous voulez de ce que vous avez acheté). En parallèle, des alternatives open-source/libre ont également vu le jour avec parfois des objectifs différents (c’est le cas du FLAC qui contrairement au MP3, ne perd en théorie pas d’informations).

Il y a d’abord l’AAC, conçu par l’institut Fraunhofer à partir de 1997, qui était déjà l’initiateur du MP3 (car il faut savoir que ce dernier remonte à bien longtemps avant sa montée en popularité du début des années 2000). C’est notamment le format qu’essaie de privilégier Apple dans son univers, et il est vrai que les promesses de qualité égale à poids plus faible sont alléchantes. Apple ayant fait du Apple (à savoir du Apple-compatible only) avec notamment les DRM les premiers temps, et personne d’autre ne l’ayant considéré, le format n’a jamais pu décoller, et reste marginal à l’heure actuelle. Malgré tout, les travaux pour le faire évoluer et entrer dans le monde de la HD et du streaming continuent.

Toujours dans le domaine du propriétaire/breveté de partout, Microsoft a tenté le coup avec le WMA, qui n’apporte strictement rien que ce soit en terme de qualité, de performance, ou d’ouverture (idem, ils ont forcé à mort le DRM avec l’argument « ça marche sur windows », mais seulement avec le lecteur Windows Media qui n’était déjà pas le plus populaire des lecteurs audio sous Windows à la fin des années 90). Je ne vais que très rapidement évoquer un autre format vite tombé en désuétude, le RealMedia, qui se lisait avec le RealPlayer, et était l’un des premiers formats à pouvoir se lire en streaming durant les années 90 (bien avant les solutions d’aujourd’hui donc).

Côté libre, on a le Vorbis, qui a taux de compression égal est censé fournir un fichier de taille plus légère et d’une meilleure qualité (ça, on sait que c’est compliqué à évaluer). C’est généralement valable la plupart du temps, mais le souci, c’est son support matériel presque entièrement absent du marché quand à l’époque de la montée en puissance du MP3 FraunHofer proposait directement des modèles d’implémentation dans des puces de décodage dédiées (de la programmation physique quoi). Le même Vorbis a été choisi par Google pour gérer la partie audio du Webm, aux côtés du VP8 puis du VP9 pour la vidéo. J’ai évoqué le FLAC, qui a du succès, mais qui pourtant ne vise pas le même objectif puisqu’il n’y a pas de perte de qualité au prix d’une consommation disque furieuse. Reste l’Opus, qui est principalement destiné à des applications de flux (streaming, soit vidéo, soit au sein de logiciels de communications), mais qui peut également faire l’affaire. Pareil, malgré l’absence de brevets, tout comme pour le Vorbis, on voit peu de support de la part des constructeurs, et rares sont les applications de lecture en dehors d’un certain VLC à le supporter hors navigateurs Web évidemment.

C’est dommage, le MP3 c’est bien, mais ça a déjà 25 ans, on a su mettre le Divx/XviD à la retraite (enfin presque), il serait temps de s’attaquer à nos oreilles maintenant que nos yeux sont rassasiés.

Rapide retour sur Juillet

dimanche 6 août 2017 à 10:30

Très très rapide le retour, vous allez voir.

Visites toujours en chute

En même temps c’est toujours comme ça l’été, et j’ai toujours pas trouvé comment virer le blocage de l’image utilisée, ni comparé avec les logs bruts (si on peut faire avaler 1 an de logs à goaccess ça serait cool, encore faut-il que je regarde de près comment il fonctionne).

Ajoutez à ça encore des problèmes de renouvellement Let’s Encrypt qui m’ont fait perdre quelques jours à cause d’un Ipv6 capricieux et vous avez un cocktail parfait pour une sacrée descente.

Technique : presque RAS

J’ai activé les mises à jour auto pour les plugins en plus du cœur de WordPress (pas encore passé sur le 4.8, toujours pas réinstallé mon dev à la maison). Voilà, c’est tout. La VM Debian 9 arrivera quand elle sera prête, surtout quand on trouvera la motivation. Objectif premier, tenter de résoudre les pépins de disque, et améliorer un peu la réactivité de l’ensemble (l’occasion aussi de faire un gros gros clean dans les confs nginx/php qui sont héritées d’ISPConfig).

Qu’est qu’on peut attendre d’Août ?

Bonne question. Si vous avez la réponse prévenez-moi.

Voilà, j’avais prévenu, c’est court, très court, trop court. Comme le temps disponible que j’ai pour écrire ou finaliser des articles en ce moment.