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 

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

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

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

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'

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

  • ressource/logiciel/sox/start.txt
  • Dernière modification: 2021/06/03 15:07
  • par emoc