Skip to main content

Historique: pratique de SoX

Aperçu de cette version: 12



Un début de tentative de description de quelques possibilités de pratique avec l'outil en ligne de commandes SoX
(à noter que je l'écris avec un S et un X en capitales car le nom est un condensé de Sound eXchange)

Il présente, à mes yeux, plusieurs caractéristiques intéressantes :
- Il est é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.
- Il est multiplateforme, c'est appréciable si vous avez un OS particulier chez vous mais que vos amis ou vos studios favoris en utilisent un autre.
- Il est 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
Copy to clipboard
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 GUI+plugins 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.


 attention
Page en cours d'écriture



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 :
Copy to clipboard
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)
Copy to clipboard
echo "60/123.149*8" | bc -l 3.89771739924806535168


Le début la section sur laquelle je désire travailler démarre à 32s 04 (premier riff de basse du couplet), je lance donc :
Copy to clipboard
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 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 :
Copy to clipboard
play 10-Pinball_Wizard.mp3 trim 1412964s 171889s repeat -


Dans un autre ordre d'idées 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 jam session :
Copy to clipboard
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 :
Copy to clipboard
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 min- utes 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 ;D)


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 :
Copy to clipboard
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 :
Copy to clipboard
man soxformat


deux exemples courants,
avec passage de critère de qualité via -C :
Copy to clipboard
sox titi.wav -C8 titi.ogg


un fichier typiquement stéréo haute qualité vers une version mono 8 bits, rééechantillonée 8kHz puis normalisée :
Copy to clipboard
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 :

Copy to clipboard
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


Copy to clipboard
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 loudness,
n'oubliez pas qu'il est possible de tester en direct immédiat en appelant SoX via play, exemple :
Copy to clipboard
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


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 wildard ne concerne que les fichiers d'entrée,
d'autre-part suivant l'OS 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 lots voilà une petite version CLI de l'opération Traitement par lot avec Audacity

Je précise que ce Proof of Concept 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 :
Copy to clipboard
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 :

Copy to clipboard
#!/bin/bash ### sortie en erreur si un signal d erreur systeme ou interrupt (i-e:CtrlC) trap "exit 1" 1 2 3 4 5 9 10 11 12 15 ### 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 :

Copy to clipboard
:/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



Historique

Information Version
Wed 20 mai 2020 14:48 olinuxx + lien interne + déplacement des infos vers la page dédiée 25
Afficher
Sun 24 Jun 2018 18:20 Loki Harfagr 24
Afficher
Sun 24 Jun 2018 17:59 olinuxx coquille 23
Afficher
Sun 24 Jun 2018 11:56 Loki Harfagr 22
Afficher
Sun 20 mai 2018 12:21 olinuxx page intégrée dans la structure des tutos 21
Afficher
Mon 26 Mar 2018 12:50 Loki Harfagr 18 - 20
Afficher
Mon 15 Jan 2018 13:05 Loki Harfagr 17
Afficher
Sun 14 Jan 2018 21:12 olinuxx 15 - 16
Afficher
Sat 13 Jan 2018 19:16 Loki Harfagr 10 - 14
Afficher
Sat 13 Jan 2018 14:41 Loki Harfagr 3 - 9
Afficher
Thu 11 Jan 2018 21:13 Loki Harfagr 1 - 2
Afficher