Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

Exemples d'utilisation SoX


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).




Introduction


Il présente, à mes yeux, plusieurs caractéristiques intéressantes :
  1. é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,
  2. 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,
  3. 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 wink
  4. 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 Image (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 wink.

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 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 Image ) 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'' Image ) 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... wink 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 twisted


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" Image ), 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 wink

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 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 wink).

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


Collaborateur(s) de cette page : Loki Harfagr et olinuxx .
Page dernièrement modifiée le Lundi 15 janvier 2018 13:05:05 par Loki Harfagr.
Le contenu de cette page est licencié sous les termes licence.

Documentation [Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

sub26nico, 18:26, mar. 20 Feb 2018: salut et bienvenue à jlcord :-)
sub26nico, 13:23, dim. 18 Feb 2018: Salut et bienvenue à Abdelaid :-)
sub26nico, 01:59, dim. 18 Feb 2018: Salut et bienvenue à omalley :-)
sub26nico, 18:07, ven. 16 Feb 2018: Et des promos aussi sur certains plugins Harrison : [Lien]
pierrotlo, 18:00, ven. 16 Feb 2018: SAlut tous, je viens de recevoir un Behringer Model D. pas de soucis en mode USB avec Linux (MIDI)
sub26nico, 17:55, ven. 16 Feb 2018: Mixbus4 à 19$ : [Lien]
sub26nico, 16:09, ven. 16 Feb 2018: Salut et bienvenue à tiseon :-)
sri_raoul, 13:44, ven. 16 Feb 2018: Un Theremin open source, qui peut servir de controleur midi: [Lien]
sub26nico, 02:27, ven. 16 Feb 2018: Salut et bienvenue à surian :-)
sri_raoul, 21:41, jeu. 15 Feb 2018: Merci su26nico pour l'info Airwindows. Je ne connaissais pas. Assez inattendus ces greffons!
sub26nico, 14:58, jeu. 15 Feb 2018: A voté pour la joute n°13 !
sub26nico, 20:46, mer. 14 Feb 2018: Le greffon Harrison XT-EQ est gratuit pendant une période très limitée : [Lien]