sound77: du son de dino en fortran

Et hop, encore une débilité signée tontonTh, éternel codeur de machins improbables. Et il en est fier. Bon, en avant... Installez d'abord ce truc. Ensuite regardez les quelques exemples disponibles: sinus77.f et beep77.f pour avoir une idée de départ. Si vous désirez enhancer votre reliability, une petite digestion de la documentation de la libsndfile et de la libao sont des points positifs.

Attention Ces exemples d'utilisation de la libsound77 relèvent quasiment de l'archéologie: ils ont plus de trois ans, et sont tous en cours de nettoyage afin, justement, d'être publiés dans le grand Ternet mondial. Il faudrait que je prenne le temps de m'y mettre, et de corriger les nombreux défauts.


Les exemples

Il convient de prévenir à l'avance, ce n'est pas du code très blindé. Par exemple, le décodage des paramètres de la ligne de commande est assez approximatif.

$ s77echo infile.wav value outfile.wav
Rajoute un effet d'écho. Le délai est compté en nombre d'échantillons. Il faut sortir la calculette pour compter en temps. Je devrais changer ça, en fait...
$ s77truc infile.wav outfile.wav
je n'ai pas la moindre idée de ce que peut bien faire ce truc, mais ça va bien me revenir un de ces jours, je pense.
$ s77reverb infile.wav NNN outfile.wav
La suite de l'écho. La valeur NNN est, comment dire, à déterminer par l'expérimentation. Mais à vue de nez (UTSL) il y a de fortes chances que ce soit des millisecondes.
$ s77stats fichier.wav
Calcul de quelques chiffres àlc sur le fichier son. Minimaliste.

Les utilitaires

$ int77wav C fichier.wav
conversion d'un flux ascii vers un fichier au format WAV. La lettre 'C' doit être M si le flux est monophonique (format (I10)) ou S si c'est de la stéreo (2I10). A l'heure actuelle la fréquence de sortie est fixée à 44100 Hz, ce qui est vraiment idiot.
$ wav77int source.wav
conversion du contenu d'un fichier .wav 16bits vers un flux de nombres entiers au format I10 ou 2I10.

Avec ces deux petits machins, on peut utiliser certains outils standards du monde Unix pour traiter des fichiers sons, puisque les échantillons sont en texte clair. Par exemple, la commande wav77int stereo.wav | awk '{ printf "%10d%10d\n", $2, $1}' | int77wav S inverse.wav permet d'échanger la droite et la gauche. Les performances ne sont pas au rendez-vous...


Les fonctions

Il y a aussi, éparpillées dans quelques fichiers .f, diverses fonctions d'un intérêt douteux. Je vais donc les présenter dans le désordre, et les patcher au fur et à mesure.

call silence1(fn, nbr)
call silence2(nf, nbr)
Rajoute nbr échantillons de silence à un fichier son mono ou stéréo.
call click01(buff, sz, start, nbre, level)
Rajoute un click de nbre échantillons à partir de start dans le buffer monophonique buff, avec le niveau level. Le buffer est préalablement initialisé à zéro.
call menv02(buff, sz, maxlevel, param)
Calcul d'une enveloppe.
call noise02(buff, sz)
Création d'un bruit de couleur indéterminée.
call exp01('bla bla', buff, sz)
Calculs de quelques chiffres, probablement faux.
call oper01(buff1, buff2, buffd, sz)
Mixage multiplicatif simple de deux buffers déclaré en integer*2, de taille sz. Le résultat sera aussi en integer*2.

blog-o-fortran