{{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