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