Il n’échappera à personne que je fais par ailleurs de la musique et que je la publie sur un de mes sites (http://habett.net). Pour avoir par ailleurs mis de la musique sur soundcloud j’observe que les formes d’ondes sont bien utiles pour comprendre et apprécier la structure du morceau. Reste que les waveforms de soundcloud sont extrêmement peu parlantes. J’ignore leur algorithme mais il est vraiment lénifiant et donne un résultat tellement peu expressif que je me suis très rapidement dit que je pouvais faire beaucoup mieux.
L’outil pour y procédé vas être un script bash avec quelques dépendances : sox, gnuplot et imagemagick. Le paramètre est le nom du fichier .wav à traiter sans son extension. Vous pouvez observer que je fais en fait deux waveforms que je combine à la fin dans un composite, pour obtenir un représentation différentielles des fréquences utilisées par la musique en question, waveform plus sombre pour les basses et claire pour les aigus dominants.
#!/bin/sh WAV=${1%.wav} sox "$WAV" /tmp/test.wav lowpass 500 sox /tmp/test.wav --rate 1k /tmp/test.dat rm /tmp/test.wav grep -v '^;' /tmp/test.dat >/tmp/test.clean perl -pe 's/.*/0 1 1\n0.0001 -1 -1/ if $. == 1' /tmp/test.clean > /tmp/test.norm rm /tmp/test.dat rm /tmp/test.clean CMD="set terminal png transparent size 6400,1600; set noxtics;set tmarg 0;set bmarg 0;set lmarg 0;set rmarg 0;set noytics; set noborder;set nogrid;set nokey;set output '/tmp/test.png';plot '/tmp/test.norm' with impulses notitle lt -1" echo $CMD | gnuplot rm /tmp/test.norm convert /tmp/test.png -scale 1600x400 "$1.low.png" rm /tmp/test.png sox "$WAV" /tmp/test.wav highpass 300 sox /tmp/test.wav --rate 1k /tmp/test.dat rm /tmp/test.wav grep -v '^;' /tmp/test.dat >/tmp/test.clean perl -pe 's/.*/0 1 1\n0.0001 -1 -1/ if $. == 1' /tmp/test.clean > /tmp/test.norm rm /tmp/test.dat rm /tmp/test.clean echo $CMD | gnuplot rm /tmp/test.norm convert /tmp/test.png -negate -scale 1600x400 "$1.high.png" rm /tmp/test.png composite -compose difference "$1.low.png" "$1.high.png" "$1.png" rm "$1.low.png" rm "$1.high.png"