Description de quelques possibilités de pratique avec l'outil en ligne de commandes SoX.
Il présente, à mes yeux, plusieurs caractéristiques intéressantes :
Je recommande chaudement à ceux qui aimeraient expérimenter au delà des quelques exemples qui vont suivre de consulter le manuel (
Il va de soi que je ne présenterai ici que des exemples de ce que j'utilise couramment lorsque je n'ai pas la possibilité ou le besoin ou l'envie de déranger la cavalerie IGU + greffons comme Ardour, Reaper, ou même le relativement frugal Audacity.
NOTE : une option importante contre le tir dans le pied est
Le programme
Exemple, test de paramétrage d'une compression multibande générique :
Comme lecteur simple cela peut aussi permettre à un instrumentiste de travailler sur une boucle, petit exemple : calcul de la durée de deux mesures au tempo du morceau étudié (pour cet exemple Pinball Wizard, version 1969 tempo=123.149)
Le début de la section sur laquelle je désire travailler démarre à 32s 04 (premier riff de basse du couplet), je lance donc :
À noter que la précision au 100ème de seconde n'est pas garantie puisque la précision réelle maximale sera calée à la trame' ("frame ) près ce qui sera donc variable suivant la fréquence d'échantillonnage, pour être plus finement précis il est possible d'indiquer les quantités temporelles en échantillon grâce au suffixe
Dans un autre ordre d'idée, il est possible d'utiliser un générateur d'ondes, par exemple si vous voulez punir vos voisins du dessus qui ont bêtement oublié de vous inviter hier soir à leur session bœuf :
(instructions additionnelles : connecter au système audio 2x400W, monter le volume et sortir discrètement)
Un autre lien symbolique vers SoX se nomme
Un exemple intéressant d'utilisation est donné dans le manuel (
Ce qui permet de numériser le contenu d'une cassette audio (ou DAT, ou une bande ou une K7-8 pistes, etc... en démarrant automatiquement dès qu'un signal supérieur de 1/1000 au bruit de fond est perçu, un fichier séparé (ici en format Vorbis Ogg) est créé chaque fois qu'un silence relatif d'au moins 2 secondes est perçu, le processus s'arrêtera automatiquement après 10 minutes de silence relatif (paramètre
Les fichiers créés auront été nommés
Le paramètre
Comme indiqué au début SoX reconnaît nativement la plupart des formats qui pourraient être utiles en audio, pour vérifier ce qui est utilisable sur la machine que vous avez à disposition s'en remettre à la commande :
Pour les détails quant à leur variés noms et paramètres possibles, voir :
Deux exemples courants, avec passage de critère de qualité via -C :
Un fichier typiquement stéréo haute qualité vers une version mono 8 bits, ré-échantillonnée 8kHz puis normalisée :
Deux variantes d'exciter via le compresseur multibandes
À partir de ces exemples, vous pourrez tester vos propres variations ou ajouts de paramètres de compression et sonie ("loudness" ), n'oubliez pas qu'il est possible de tester en direct immédiat en appelant SoX via
Dans les cas d'empilement orgiaque d'effets, l'utilisation d'un fichier d'instructions via
Lire le manuel pour contempler et admirer, parfois avec une certaine crainte devant l'absolu, les nombreux effets disponibles !
(l'effet
Même si en appel direct SoX permet de traiter plusieurs fichiers simultanément, il y a des restrictions d'une part, l'utilisation du wildcard ne concerne que les fichiers d'entrée, d'autre part le système d'exploitation et le "shell" utilisés peuvent avoir des interprétations spécifiques du globbing qui peuvent être particulièrement cruelles si vous êtes justement sur un ordinateur d'emprunt (studio, cousin, voisin, etc...).
Il est donc plutôt conseillé pour le traitement par lot de construire rapidement un script ou un one-liner correspondant au besoin.
Comme exemple simple de la facilité de traitement par lot, voilà une petite version CLI de l'opération Traitement par lot avec Audacity.
Je précise que cette validation de principe n'est pas là pour dénigrer la version Audacity, mais juste en tant qu'information générale, pouvant éventuellement servir dans un environnement privé d'un affichage Xorg (ou autre) suffisant pour autre chose qu'une console (j'admets que de nos jours ça peut se faire rare ).
D'autre-part le script ci-dessous ne traite que le cas décrit dans la page qu'il commente, pour d'autres opérations (exemple compressions, transformations) il faudra évidemment modifier les lignes de paramétrage des appels à SoX.
Note, le traitement est réalisé en 32 bits, l'import et l'export choisis ici étant en 16 bits il y a effectivement un dithering impliqué, il est bien sûr possible d'exporter vers tout autre format acceptable par SoX :
Le script :
Exemple d'utilisation :
Un petit exemple d'utilisation hors-bord via un mini script (que j'utilise effectivement!).
Le but du script est de servir comme métronome basique, il prend de zéro à deux arguments :
par défaut le tempo est fixé à 120 et la note du clic à G1, cette note donne un son à l'ancienne (pour un son proche des métronomes électroniques je trouve la note C8 bien adaptée).
Pour l'utiliser, copier le code ci-dessous dans un fichier accessible au path, par exemple
Code du script :
Table des matières
Introduction
Il présente, à mes yeux, plusieurs caractéristiques intéressantes :
- écrit en C, la lecture du code source est donc assez aisée même si le foisonnement de fonctionnalités peut rendre la tâche complexe,
- multi-plateforme, c'est appréciable si vous avez un système d'exploitation particulier chez vous mais que vos amis ou vos studios favoris en utilisent un autre,
- en ligne de commandes, dans un environnement sombre comme un backline de scène plutôt sombre ou un studio déjà surchargé de scintillements divers, pouvoir travailler sur une console bicolore bien contrastée peut sauver une préparation ou une réparation de dernière minute
- ses possibilités d'import/export sont variées et plutôt complètes. Pour voir les formats reconnus sur votre installation utilisez la commande :
sox -h | sed -n '/^AUDIO FILE FORMATS/p'
Je recommande chaudement à ceux qui aimeraient expérimenter au delà des quelques exemples qui vont suivre de consulter le manuel (
man sox
) ou, s'il n'est pas installé ou installable, de consulter la documentation en ligne
(seul petit problème, il n'y a pas, à ma connaissance, d'autre version de la documentation en une autre langue que l'anglais).Il va de soi que je ne présenterai ici que des exemples de ce que j'utilise couramment lorsque je n'ai pas la possibilité ou le besoin ou l'envie de déranger la cavalerie IGU + greffons comme Ardour, Reaper, ou même le relativement frugal Audacity.
NOTE : une option importante contre le tir dans le pied est
--no-clobber
, qui vous préviendra en cas d'écrasement possible d'un fichier existant. Il est conseillé de l'inclure dans la variable globale SOX_OPTS
ou d'utiliser un alias pour l'appel à Sox.Jouer des fichiers audio
Le programme
sox
est également appelable via le lien symbolique play
, dans ce cas il sert non plus d'outil de traitement en vue d'un export mais simplement de lecteur, je souligne simplement car ce mode de lecture simple permet toutefois d'utiliser toutes les fonctions de SoX ce qui permet entre autres de préparer et tester divers effets, paramétrages, transformations, pratique .Exemple, test de paramétrage d'une compression multibande générique :
play toto.wav compand 0.07,0.3 6:-40,-30,-20,-14,-9,-2,-0 -1 -2 0.15
Comme lecteur simple cela peut aussi permettre à un instrumentiste de travailler sur une boucle, petit exemple : calcul de la durée de deux mesures au tempo du morceau étudié (pour cet exemple Pinball Wizard, version 1969 tempo=123.149)
echo "60/123.149*8" | bc -l 3.89771739924806535168
Le début de la section sur laquelle je désire travailler démarre à 32s 04 (premier riff de basse du couplet), je lance donc :
play 10-Pinball_Wizard.mp3 trim 32.04 3.89 repeat -
À noter que la précision au 100ème de seconde n'est pas garantie puisque la précision réelle maximale sera calée à la trame' ("frame ) près ce qui sera donc variable suivant la fréquence d'échantillonnage, pour être plus finement précis il est possible d'indiquer les quantités temporelles en échantillon grâce au suffixe
s
(pour Sample''
) ce qui, pour l'exemple pris ici (fréquence 44100), s'écrirait :play 10-Pinball_Wizard.mp3 trim 1412964s 171889s repeat -
Dans un autre ordre d'idée, il est possible d'utiliser un générateur d'ondes, par exemple si vous voulez punir vos voisins du dessus qui ont bêtement oublié de vous inviter hier soir à leur session bœuf :
play -n -c1 synth sin %-3 sin %-7 sin %-11 sin %-29 fade h 0.1 0.5 0.3 repeat -
(instructions additionnelles : connecter au système audio 2x400W, monter le volume et sortir discrètement)
Enregistrer des fichiers audio
Un autre lien symbolique vers SoX se nomme
rec
.Un exemple intéressant d'utilisation est donné dans le manuel (
man rec
), j'y ai déjà eu recours avec plus ou moins de petites variantes mais du fait que le manuel décrivait exactement la fonction que j'attendais je n'ai rien noté dans mes antisèches ! C'est pourquoi je me contente ici de montrer l'intérêt de lire ce manuel en en citant juste cet extrait : rec -r 44100 -b 16 -e signed-integer -p \ silence 1 0.50 0.1% 1 10:00 0.1% | \ sox -p song.ogg silence 1 0.50 0.1% 1 2.0 0.1% : \ newfile : restart records a stream of audio such as LP/cassette and splits in to multiple audio files at points with 2 seconds of silence. Also, it does not start recording until it detects audio is playing and stops after it sees 10 minutes of silence.
Ce qui permet de numériser le contenu d'une cassette audio (ou DAT, ou une bande ou une K7-8 pistes, etc... en démarrant automatiquement dès qu'un signal supérieur de 1/1000 au bruit de fond est perçu, un fichier séparé (ici en format Vorbis Ogg) est créé chaque fois qu'un silence relatif d'au moins 2 secondes est perçu, le processus s'arrêtera automatiquement après 10 minutes de silence relatif (paramètre
1 10:00 0.1%
).Les fichiers créés auront été nommés
1song.ogg ... 33song.ogg
. Il est possible d'étoffer un peu ce comportement par défaut en changeant simplement le nom de base de la sortie, par exemple à la place de song.ogg
mettre concert-bongabonga-20150713-%3n.flac
.Le paramètre
-p
est un indicateur de file pipe, le flux est transité en mode raw
, pour les atroces détails ou précisions voir le manuel Convertir des fichiers audio
Comme indiqué au début SoX reconnaît nativement la plupart des formats qui pourraient être utiles en audio, pour vérifier ce qui est utilisable sur la machine que vous avez à disposition s'en remettre à la commande :
sox -h | sed -n '/^AUDIO FILE FORMATS/p' AUDIO FILE FORMATS: 8svx aif aifc aiff aiffc al amb au avr caf cdda cdr cvs cvsd cvu dat dvms f32 f4 f64 f8 fap flac fssd gsm gsrt hcom htk ima ircam la lpc lpc10 lu mat mat4 mat5 maud mp2 mp3 nist ogg paf prc pvf raw s1 s16 s2 s24 s3 s32 s4 s8 sb sd2 sds sf sl sln smp snd sndfile sndr sndt sou sox sph sw txw u1 u16 u2 u24 u3 u32 u4 u8 ub ul uw vms voc vorbis vox w64 wav wavpcm wv wve xa xi
Pour les détails quant à leur variés noms et paramètres possibles, voir :
man soxformat
Deux exemples courants, avec passage de critère de qualité via -C :
sox titi.wav -C8 titi.ogg
Un fichier typiquement stéréo haute qualité vers une version mono 8 bits, ré-échantillonnée 8kHz puis normalisée :
sox toto.aiff -b8 -c1 mono.wav rate 8k norm
Appliquer des effets ou des transformations sur des fichiers audio
Deux variantes d'exciter via le compresseur multibandes
compand
que j'utilise souvent pour avoir rapidement un rendu pour le Net :sox fichieroriginal.formatconnu -C 8 "fichierNet.SOXEXCITE.ogg" compand 0.07,0.3 6:-40,-30,-20,-14,-9,-2,-0 -1 -2 0.15
sox fichieroriginal.formatconnu -C 8 "fichierNet.SOXEXCITELOUD.ogg" loudness -2 75 compand 0.07,0.3 6:-40,-30,-20,-14,-9,-2,-0 -1 -2 0.15
À partir de ces exemples, vous pourrez tester vos propres variations ou ajouts de paramètres de compression et sonie ("loudness" ), n'oubliez pas qu'il est possible de tester en direct immédiat en appelant SoX via
play
, exemple :play fichieroriginal.formatconnu compand 0.07,0.3 6:-40,-30,-20,-14,-9,-2,-0 -1 -2 0.15
Dans les cas d'empilement orgiaque d'effets, l'utilisation d'un fichier d'instructions via
--effects-file lestrucskejeve
est possible et recommandée Lire le manuel pour contempler et admirer, parfois avec une certaine crainte devant l'absolu, les nombreux effets disponibles !
(l'effet
reverse
est utilisé ci-dessous dans la section Traitements_par_lots)Traitements par lots
Même si en appel direct SoX permet de traiter plusieurs fichiers simultanément, il y a des restrictions d'une part, l'utilisation du wildcard ne concerne que les fichiers d'entrée, d'autre part le système d'exploitation et le "shell" utilisés peuvent avoir des interprétations spécifiques du globbing qui peuvent être particulièrement cruelles si vous êtes justement sur un ordinateur d'emprunt (studio, cousin, voisin, etc...).
Il est donc plutôt conseillé pour le traitement par lot de construire rapidement un script ou un one-liner correspondant au besoin.
Comme exemple simple de la facilité de traitement par lot, voilà une petite version CLI de l'opération Traitement par lot avec Audacity.
Je précise que cette validation de principe n'est pas là pour dénigrer la version Audacity, mais juste en tant qu'information générale, pouvant éventuellement servir dans un environnement privé d'un affichage Xorg (ou autre) suffisant pour autre chose qu'une console (j'admets que de nos jours ça peut se faire rare ).
D'autre-part le script ci-dessous ne traite que le cas décrit dans la page qu'il commente, pour d'autres opérations (exemple compressions, transformations) il faudra évidemment modifier les lignes de paramétrage des appels à SoX.
Note, le traitement est réalisé en 32 bits, l'import et l'export choisis ici étant en 16 bits il y a effectivement un dithering impliqué, il est bien sûr possible d'exporter vers tout autre format acceptable par SoX :
sox -h | sed -n '/^AUDIO FILE FORMATS/p' AUDIO FILE FORMATS: 8svx aif aifc aiff aiffc al amb au avr caf cdda cdr cvs cvsd cvu dat dvms f32 f4 f64 f8 fap flac fssd gsm gsrt hcom htk ima ircam la lpc lpc10 lu mat mat4 mat5 maud mp2 mp3 nist ogg paf prc pvf raw s1 s16 s2 s24 s3 s32 s4 s8 sb sd2 sds sf sl sln smp snd sndfile sndr sndt sou sox sph sw txw u1 u16 u2 u24 u3 u32 u4 u8 ub ul uw vms voc vorbis vox w64 wav wavpcm wv wve xa xi
Le script :
#!/bin/bash ### sortie en erreur si un signal d erreur systeme ou interrupt (i-e:CtrlC) trap "exit 1" EXIT ### le parametre du script doit etre un fichier non vide [ -s ${1} ] || exit 2 ### abandon si quelque erreur set -e ### si le repertoire "cleaned" n'existe pas on le cree, si le nom est deja utilise le script abandonnera en erreur ### (cela pourrait etre pris en compte en etoffant un peu ce script mais ce n'est pas l'objet de ce PoC) [ -d ./cleaned ] || mkdir ./cleaned echo "patience..." ### chaque ligne du fichier parametre est considere comme un "[path|nom]" de fichier accessible ### (cela pourrait etre affine en etoffant un peu ce script mais ce n'est pas l'objet de ce PoC) cat ${1} |\ while read toto; do sox ${toto} -r 44100 -e signed -p silence 1 0.01t 0.065% reverse 2>/dev/null |\ sox -p -b 16 ./cleaned/${toto//*\//} silence 1 0.25t 0.065% 2>/dev/null printf "." done ### printf "\nFini !\n"
Exemple d'utilisation :
:/tmp>: ls WAV/*wav > wavlist :/tmp>: cat wavlist WAV/BoomPtahShak_HotMonksParade_r1_session_2016-05-11_1855.wav WAV/BoomPtahShak_HotMonksParade_r1_session_2016-10-12_1738.wav WAV/session.wav :tmp>: ./_PoC-cleanse_and_reverse.sh wavlist patience... ... Fini ! :tmp>: soxi {WAV,cleaned}/*wav | awk '/^Input/||/^Duration/' Input File : 'WAV/BoomPtahShak_HotMonksParade_r1_session_2016-05-11_1855.wav' Duration : 00:05:40.00 = 14994000 samples = 25500 CDDA sectors Input File : 'WAV/BoomPtahShak_HotMonksParade_r1_session_2016-10-12_1738.wav' Duration : 00:05:41.00 = 16368000 samples ~ 25575 CDDA sectors Input File : 'WAV/session.wav' Duration : 00:05:24.01 = 14288783 samples = 24300.7 CDDA sectors Input File : 'cleaned/BoomPtahShak_HotMonksParade_r1_session_2016-05-11_1855.wav' Duration : 00:05:29.52 = 14531934 samples = 24714.2 CDDA sectors Input File : 'cleaned/BoomPtahShak_HotMonksParade_r1_session_2016-10-12_1738.wav' Duration : 00:05:29.17 = 14516227 samples = 24687.5 CDDA sectors Input File : 'cleaned/session.wav' Duration : 00:05:22.03 = 14201520 samples = 24152.2 CDDA sectors
Métronome
Un petit exemple d'utilisation hors-bord via un mini script (que j'utilise effectivement!).
Le but du script est de servir comme métronome basique, il prend de zéro à deux arguments :
TICK [valeur_du_tempo [note_du_clic]]
par défaut le tempo est fixé à 120 et la note du clic à G1, cette note donne un son à l'ancienne (pour un son proche des métronomes électroniques je trouve la note C8 bien adaptée).
Pour l'utiliser, copier le code ci-dessous dans un fichier accessible au path, par exemple
/usr/local/bin/TICK
et le rendre exécutable.Code du script :
#!/bin/sh ### ### click/metronome de secours, TICK tempo [note] ### ex (son classique): TICK 134 ### ex (son "electronic"): TICK 165 C8 ### ### par defaut, tempo 120 et son "classique" T=${1:-120} S=${2:-G1} ### calcul de la valeur des parametres delai et fade, en relation necessaire avec le tempo ### le fade representera le temps intervalle et le delai le moment du "cut" F1=$(echo "60/${T}" | bc -l) TK=$(echo "0.99*60/${T}" | bc -l) ### Et voila ;-) play -n synth pl ${S} delay ${TK} fade 0 ${F1} norm -6 repeat 999999999