{{tag>audio sox code shell em}}
====== 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 ([[https://stackoverflow.com/a/4534477|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 : {{:ressource:logiciel:sox:son.wav|}}
# 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
{{:ressource:logiciel:sox:son.wav.png?direct&200|}}
Exemple sur un son plus long (46 secondes) en stéréo
Le son {{:ressource:logiciel:sox:son_stereo.mp3|}}
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
{{:ressource:logiciel:sox:son_stereo.mp3_complet.png?direct&1000|}}
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
{{:ressource:logiciel:sox:son_stereo.mp3_1000Hz.png?direct&1000|}}
===== 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