diff --git a/.gitignore b/.gitignore index 46e3a8d..af99af9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ log.* -*.png +# *.png MANIFEST tarball diff --git a/chap/DNS.tex b/chap/DNS.tex index 82f093c..654e68e 100644 --- a/chap/DNS.tex +++ b/chap/DNS.tex @@ -75,10 +75,10 @@ des serveurs DNS. Par défaut, il questionne les serveurs listés dans \texttt{/etc/resolv.conf}. Pour résoudre récursivement un nom de domaine à partir de la racine : -\$ dig +trace +\texttt{\$ dig +trace } -Pour le reverse d'une adresse IP : -\$ dig +trace -x +Pour obtenir le reverse d'une adresse IP : +\texttt{\$ dig +trace -x } % ------------------------------------------------------------ % \subsection{delv} diff --git a/chap/Fortran.tex b/chap/Fortran.tex new file mode 100644 index 0000000..bad6e2f --- /dev/null +++ b/chap/Fortran.tex @@ -0,0 +1,18 @@ +\chapter{Fortran} \label{chap:Fortran} \index{Fortran} + +Fortran (\textsc{FORmula TRANslator}) est, avec le Cobol\index{Cobol}, +un des premiers langages évolués. Il a été conçu après la seconde +guerre mondiale, en 1954, par +John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM}, + +\section{F77} + +Dernière version à exiger le format '80 colonnes' des cartes perforées, +cette version est aussi (aux yeux de vieux dinos) la plus pure, +à cause d'instructions comme le \textsl{computed goto} ou le +mythique \textsl{comefrom}. Nom officiel : \texttt{ANSI X3.9-1978}. + +\section{Et après} \index{gfortran} + +Puis ce langage du passé a subi une évolution lente vers quelque +chose de bien plus moderne. Les dinos vont devoir s'adapter. diff --git a/chap/MIDI.tex b/chap/MIDI.tex index 1238a29..ad95b43 100644 --- a/chap/MIDI.tex +++ b/chap/MIDI.tex @@ -106,7 +106,8 @@ Client 128 : "TiMidity" [User] Plutôt que de passer par la couche ALSA, il est aussi possible d'attaquer directement le \textit{device}, et de blaster soi-même tous les petits octets directement sur le fil. Voici un petit -exemple en Python\footnote{Oui, je sais, c'est un langage de djeunz, +exemple en +Python\index{Python}\footnote{Oui, je sais, c'est un langage de djeunz, mais bon, ça fait plaisir à mon gamin}, facilement transposable dans un langage plus sérieux : @@ -137,7 +138,6 @@ for valeur in range(30,90): tx.close() \end{lstlisting} - % --------------------------------------------------------- \section{Et en Perl ?} @@ -159,6 +159,12 @@ MIDI::Simple (3pm) - procedural/OOP interface for MIDI composition MIDI::Track (3pm) - functions and methods for MIDI tracks \end{verbatim} +Un petit essai, par exemple extraire la valeur du \textsc{bpm} +d'un fichier \texttt{.mid} ? + +\lstinputlisting[language=perl]{code/midifile.pl} + +Voilà. % --------------------------------------------------------- diff --git a/chap/Perl.tex b/chap/Perl.tex index 8de996e..ba64fa4 100644 --- a/chap/Perl.tex +++ b/chap/Perl.tex @@ -16,11 +16,11 @@ incontesté du Web\index{web} interactif, de par son intégration dans le serveur Apache\index{Apache}, et de modules d'écriture de clients http\index{http}. - Le débutant peut facilement n'utiliser qu'un sous-ensemble du langage, mais ce serait se priver de quelques \textit{patterns} assez efficients. +% ------------------------------------------------------ \section{Le texte} @@ -49,6 +49,13 @@ la ligne de commande feront l'affaire. \lstinputlisting[language=perl]{code/id2h.pl} +% ------------------------------------------------------ + +\section{Gestion des modules} \index{CPAN} + + + +% ------------------------------------------------------ \section{Le \texttt{http}} diff --git a/chap/image.tex b/chap/image.tex index 0dc29bf..3ac8d00 100644 --- a/chap/image.tex +++ b/chap/image.tex @@ -16,7 +16,12 @@ de maitre Brunus}, l'abondance d'options des outils ImageMagick est vraiment énorme, et leurs interactions parfois troublantes\dots -\subsection{\texttt{geometry}} +Il y a plusieurs binaires dans le paquet : \texttt{convert} pour +la plupart des traitements, +\texttt{display} et \texttt{animate} pour visualiser des images, +\texttt{identify} pour en lire les méta-données. + +\subsection{L'option \texttt{-geometry}} C'est une notion importante, car elle est utilisée comme paramètre par beaucoup d'options. C'est avec ça que l'on peut définir des @@ -29,7 +34,7 @@ on va travailler. Voici un exemple concret (tiré du script d'encodage du \textsc{cloître}\index{cloître}) qui montre l'essentiel pour bien débuter. C'est une fonction -écrite en bash\index{bash} qui rajoute un texte sur une image. : +écrite en bash\index{bash} qui rajoute un texte sur une image~: \lstinputlisting[language=sh]{code/tagpic.sh} @@ -42,15 +47,17 @@ options sont un peu ésotériques et parfois inter-dépendantes\dots \item{kerning} \item{colors} \item{txtopts} -\item{-gravity} -\item{-annotate} +\item{gravity} +\item{annotate} \end{itemize} +Quastion : comment mettre une couleur de fond à ce texte ? + \subsection{Faire des GIFs animées}\index{GIF} -Ces images clignotantes sont l'essence même du Web\index{web} -moderne depuis 1992, et \texttt{convert} sait très bien les -générer. +Ces petites images clignotantes sont l'essence même du +Web\index{web} moderne depuis 1992 malgré leurs limitations, +et \texttt{convert} sait très bien les générer. \begin{verbatim} convert -delay 20 -loop 0 a.png b.png c.png foo.gif @@ -70,17 +77,26 @@ POSITION="+R12+0" convert -crop ${DIMENSION}${POSITION} +repage $img $dst \end{verbatim} -\textsl{Use +repage to completely remove/reset the virtual canvas meta-data -from the images.} En gros, on en a besoin quand une opération va +\textsl{Use +repage to completely remove/reset the virtual canvas +meta-data from the images.} +En gros, on en a besoin quand une opération va changer la dimension de l'image. +\subsection{Ressources} +Le futur livre de Brunus. Réclamez les prmiers drafts dans +l'IRC\index{IRC} \texttt{freenode\#paulla} \textit{:)} + +\texttt{http://www.fmwconcepts.com/imagemagick/index.php} % ------------------------------------------------------------------- \section{Gmic}\index{Gmic} -XXX\index{XXX} +\textsl{Perform generic image processing operations, through the G'MIC +language interpreter. gmic: GREYC's Magic for Image Computing.} + +\index{XXX} Existe aussi en plugin pour Gimp\index{Gimp}. @@ -105,14 +121,14 @@ for ((y=0; y<250; y++)) { \subsection{Questions} -Comment faire un resize ? +Comment faire un \textsl{resize} avec NetPBM ? % ------------------------------------------------------------------- \section{Portable Network Graphic}\index{PNG} Voici le problème du soir% -\footnote{\textsl{trollday}Fri Nov 13 00:07:19 CET 2020} : +\footnote{\textsl{trollday} Fri Nov 13 00:07:19 CET 2020} : j'utilise pour lire ce format de fichier la bibliothèque \texttt{pnglite} qui a de gros soucis avec beaucoup de ceux-ci, par exemple ceux qui sont en \texttt{sRGB} crées diff --git a/chap/son.tex b/chap/son.tex index 5a332e0..91a724d 100644 --- a/chap/son.tex +++ b/chap/son.tex @@ -36,16 +36,29 @@ Si vous avez plusieurs cartes son, la sélection du l'option \texttt{-l} qui vous donnera la bonne piste, mais l'option \texttt{-L} qu'il faut utiliser. +\begin{verbatim} +arecord -D plughw:CARD=Snowball,DEV=0 -v -r 22050 foo.wav +\end{verbatim} + +\begin{verbatim} +arecord -D plughw:CARD=H4,DEV=0 -v -c 2 -f S16_LE -r 44100 foo.wav +\end{verbatim} + \subsection{Le reste} Et quand on regarde par la lorgnette du programmeur, on découvre rapidement que l'utilisation d'ALSA n'est pas si simple que ça, essentiellement à cause d'une documentation spartiate. Heurensement, pour certains domaines, il existe des -surcouches plus simple d'emploi : \texttt{libao}\index{libao} - pour les sorties +surcouches plus simple d'emploi : +\texttt{libao}\index{libao} pour les sorties sonores, XXX\index{XXX} pour le reste. +ALSA apporte aussi les primitives et des utilitaires +de gestion des interfaces MIDI\index{MIDI}. Là aussi, +la doc est sommaire. Quelques explications +sur la page \pageref{chap:MIDI}. + %------------------------------------------------------------------ \section{pulseaudio} \index{pulseaudio} @@ -55,7 +68,8 @@ On avait pourtant dit « \textbf{pas de trolls} », mais il va quand même falloir y passer : ce machin prétenduement \textsl{michu compliant}\index{Michu} a parfois, voire même souvent, tendance à se mettre en travers -du chemin des honnètes gens. +du chemin des honnètes gens% +\footnote{Du moins vers l'année 2014}. %------------------------------------------------------------------ \section{Jack} @@ -69,7 +83,8 @@ lui laisser le soin d'en parler. Jack peut aussi servir de source sonore pour darkice\index{darkice}, lequel pourra feeder un -Icecast\index{icecast} +serveur de stream comme Icecast\index{icecast} +(cf page \pageref{chap:streaming}). %------------------------------------------------------------------ @@ -79,14 +94,13 @@ Icecast\index{icecast} \index{libsndfile} Libsndfile est essentiellement une très complète bibliothèque -de lecture/écriture de fichiers sons. +de lecture et écriture de fichiers sons. Elle permet de gérer facilement un nombre considérable de formats de fichiers\footnote{Mais ceci est une autre histoire, que nous verrons peut-être un de ces jours\dots}. -Par contre, elle arrive avec une floppée d'outils en ligne de +Elle arrive avec une floppée d'outils en ligne de commande, dont certains sont assez performants. - Citons, entre autres, \texttt{sndfile-resample} qui est un convertisseur de fréquence d'échantillonage très performant. @@ -160,7 +174,10 @@ play -n synth sine 480 sine 620 remix 1-2 fade 0 0.5 delay 0.5 repeat 5 \subsection{Traitements} -\texttt{sox --norm source.wav normal.wav} pour normaliser un son. +\texttt{sox --norm[=dB-level] source.wav normal.wav} pour +normaliser un son. +\textsl{Automatically invoke the gain effect to guard against +clipping and to normalise the audio}. \texttt{sox left.wav right.wav -M stereo.wav} pour combiner deux voies mono en un fichier stéréo. \texttt{-M} est l'abréviation diff --git a/code/ao_example.c b/code/ao_example.c index 328fc5e..b605de0 100644 --- a/code/ao_example.c +++ b/code/ao_example.c @@ -25,15 +25,11 @@ float freq = 440.0; int i; /* -- Initialize -- */ - fprintf(stderr, "libao example program\n"); - ao_initialize(); /* -- Setup for default driver -- */ - default_driver = ao_default_driver_id(); - memset(&format, 0, sizeof(format)); format.bits = 16; format.channels = 2; @@ -54,7 +50,6 @@ buffer = calloc(buf_size, sizeof(char)); for (i = 0; i < format.rate; i++) { sample = (int)(0.75 * 32768.0 * sin(2 * M_PI * freq * ((float) i/format.rate))); - /* Put the same stuff in left and right channel */ buffer[4*i] = buffer[4*i+2] = sample & 0xff; buffer[4*i+1] = buffer[4*i+3] = (sample >> 8) & 0xff; diff --git a/code/midifile.pl b/code/midifile.pl new file mode 100755 index 0000000..155e072 --- /dev/null +++ b/code/midifile.pl @@ -0,0 +1,3 @@ +#!/usr/bin/perl -w +use MIDI; +0; diff --git a/main.tex b/main.tex index 2130232..a1c4fe5 100644 --- a/main.tex +++ b/main.tex @@ -93,6 +93,8 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots \input{chap/Perl} \input{chap/musique} % \input{chap/puredata} +\input{chap/son} +\input{chap/streaming} \input{chap/MIDI} \input{chap/OSC} \input{chap/backups} @@ -104,7 +106,8 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots % \input{chap/SCSI} \input{chap/X11} \input{chap/manpages} - +\input{chap/Fortran} +\input{chap/Python} \input{chap/dino} \input{chap/textes} \input{chap/MINITEL} @@ -124,7 +127,6 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots \input{chap/DNS} \input{chap/ssh} \input{chap/hardware} -\input{chap/streaming} \input{chap/gadgets} % \input{chap/slang} \input{chap/curses}