Sox
(page créée le 21 avril 2020)
Sox est un logiciel en ligne de commande pour la manipulation de fichiers sonores. Il fait partie des logiciels “couteaux suisses” de manipulation de fichiers multimédia (avec ffmpeg et imagemagick). Sox est utile pour :
- changer le taux d'échantillonage
- séparer les canaux, convertir de stéréo en mono
- convertir le format (wav, mp3, aiff, etc.)
- assembler des fichiers
- tirer des extraits (avec fondus)
- modifier la vitesse, inverser
- créer des spectrogrammes (sous forme d'image)
- etc.
Sox est composé de 3 commandes : sox, play et rec. La commande principale, sox, permet toutes les possibilités tandis que play envoie le résultat sur la sortie sonore, au lieu de créer un fichier, et rec prend l'entrée sonore à la place du fichier d'origine.
Exemples :
play son_stereo.mp3 pitch 1200 # jouer le fichier en le "pitchshiftant" d'une octave play son_stereo.mp3 reverse # jouer le fichier à l'envers play son.mp3 repeat - # pour jouer en boucle infinie (-) play son.mp3 repeat 16 # pour jouer un son et le répéter 16 fois
Sur linux, pour ne pas avoir d'informations sur la console et “relacher” l'interpréteur de commandes, on peut déclencher play comme ceci
play -q son_stereo.mp3 &
nb : sur linux pour que sox puisse manipuler des fichiers mp3, il faut installer une lib. supplémentaire
sudo apt install libsox-fmt-all
Exemples
Vitesse et sens de lecture
Accélérer / ralentir
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son.wav fast.wav speed 2.0
Inverser
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son.wav reverse.wav reverse
Conversions de format
Convertir en mp3
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son.wav -c 2 -r 44100 -C 192 son.mp3
Dans cet exemple, le son est converti en mp3 stereo avec un taux d'échantillonnage de 44.1Hz et un taux de compression de 192 kbps
Rééchantillonner
Exemple de rééchantillonnage à 44100 Hertz
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son.wav -r 44100 son44100.wav
Opérations sur les canaux
Séparer le canal gauche et le canal droit
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son_stereo.mp3 gauche.wav remix 1 sox son_stereo.mp3 droite.wav remix 2
Convertir de mono vers stereo
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox mono.wav -c 2 stereo.wav
Convertir de stereo vers mono # 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin
sox stereo.wav mono.wav remix 1,2
Assembler deux fichiers mono en un fichier stereo
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox --combine merge gauche.wav droite.wav stereo.wav
Récupérer les informations sur un fichier
Deux commandes différentes pour obtenir des informations :
Pour connaître l'encodage, le taux d'échantillonnage, la quantification, le nombre de canaux, etc.
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox --info son.wav
Renvoie
Input File : 'son.wav' Channels : 1 Sample Rate : 11025 Precision : 8-bit Duration : 00:00:00.78 = 8637 samples ~ 58.7551 CDDA sectors File Size : 8.68k Bit Rate : 88.6k Sample Encoding: 8-bit Unsigned Integer PCM
Pour trouver le nombre d'échantillons, la durée précise, la gamme d'amplitude, etc.
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son.wav -n stat
Renvoie
Samples read: 8637 Length (seconds): 0.783401 Scaled by: 2147483647.0 Maximum amplitude: 0.593750 Minimum amplitude: -0.718750 Midline amplitude: -0.062500 Mean norm: 0.067975 Mean amplitude: -0.003807 RMS amplitude: 0.113050 Maximum delta: 1.101563 Minimum delta: 0.000000 Mean delta: 0.089417 RMS delta: 0.166709 Rough frequency: 2587 Volume adjustment: 1.391
En shell bash, pour récupérer uniquement la durée en secondes, on peut utiliser (source)
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son.wav -n stat 2>&1 | sed -n 's#^Length (seconds):[^0-9]*\([0-9.]*\)$#\1#p'
Spectrogramme en image
Exemple sur un fichier court (moins d'une seconde) en mono
Le son :
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son.wav -n rate 12k spectrogram -r -x 200 -y 200 -o son.wav.png
Exemple sur un son plus long (46 secondes) en stéréo
Le son
Input File : 'son_stereo.mp3' Channels : 2 Sample Rate : 44100 Precision : 16-bit Duration : 00:00:46.06 = 2031026 samples = 3454.13 CDDA sectors File Size : 1.11M Bit Rate : 192k Sample Encoding: MPEG audio (layer I, II or III)
Pour un spectrogramme complet, des 2 canaux sur toute la gamme de fréquence
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son_stereo.mp3 -n spectrogram -x 1000 -y 100 -o son_stereo.mp3_complet.png
On peut aussi restreindre les fréquences représentées, par exemple pour représenter de 0 à 1000 Hz
# 20200421 / SoX v14.4.1 / Debian Stretch 9.5 @ Kirin sox son_stereo.mp3 -n rate 2k spectrogram -x 1000 -y 100 -o son_stereo.mp3_1000Hz.png
Ressources
- doc complète : http://sox.sourceforge.net/sox.html
- exemples : http://linuxmao.org/pratique+de+SoX
- exemples (dont une méthode de panning) : https://www.yesik.it/blog/2018-sox