Compare commits
18 Commits
d96238bca4
...
a1f7d1e0f2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a1f7d1e0f2 | ||
![]() |
2dd4896b6c | ||
![]() |
b252bf73a2 | ||
![]() |
7ed54fc123 | ||
![]() |
48b66b3034 | ||
![]() |
2bb29f37e3 | ||
![]() |
b67ce482bf | ||
![]() |
b98ae9d629 | ||
![]() |
615289b57e | ||
![]() |
02054433b4 | ||
![]() |
5723a754a8 | ||
![]() |
7e591fc958 | ||
![]() |
3bda7ea69b | ||
![]() |
a1b0ffdabb | ||
![]() |
16e1d7707a | ||
![]() |
716345e270 | ||
![]() |
a1df488c58 | ||
![]() |
9f129f64d9 |
@ -175,9 +175,10 @@ XXX\index{XXX}
|
||||
Pour faire simple, on accède à chaque unité de donnée l'une après l'autre,
|
||||
comme quand on déroule une bande 6250bpi. Ces unités peuvent être
|
||||
(restons simple pour commencer) des lignes entières de texte.
|
||||
Dans l'ancien temps\footnote{F77 rulz the world}, le format de ces
|
||||
lignes devait être précisement structure, avec des largeurs de champs
|
||||
fixés.
|
||||
Dans l'ancien temps\footnote{F66 rulz the world} des cartes
|
||||
à trous, le format de ces
|
||||
lignes devait être précisement structurées, avec des largeurs de champs
|
||||
dans la ligne fixés.
|
||||
|
||||
% --------------------------------------------------------
|
||||
|
||||
@ -186,7 +187,51 @@ fixés.
|
||||
XXX\index{XXX}
|
||||
|
||||
C'est pas pareil : d'abord les enregistrements sont tous de la même
|
||||
taille
|
||||
taille. Ensuite, on y accède par son rang, son numéro d'ordre dans le
|
||||
fichier. Dès que j'ai fini de planter les deux arbres en attente,
|
||||
je vous propose un exemple simple et aussi artificiel que les
|
||||
autres exemples de ce ouvrage.
|
||||
|
||||
% --------------------------------------------------------
|
||||
|
||||
\section{Read et Write}
|
||||
|
||||
Ces deux opérations (la lecture et l'écriture) sont contrôlables
|
||||
par plusieurs choses~: les paramètres à l'ouverture,
|
||||
du fichier, à XXX\index{XXX},
|
||||
et surtout les chaines de format.
|
||||
Bienvenue dans le monde du légendaire champ "Hollerith".
|
||||
|
||||
\subsection{Les chaines de format}
|
||||
|
||||
%
|
||||
% attention, il y a un hack pour l'affichage du mot "format" !
|
||||
% Attention, dans "{\small{\textsc{format}}}", les accolades
|
||||
% exterieures sont indispensables. Affaire à suivre...
|
||||
%
|
||||
La chaine de {\small{\textsc{format}}} contrôle la façon dont les
|
||||
données (nombres, textes ou booleans)
|
||||
seront présentées à l'affiche ou à l'impression.
|
||||
Une bonne connaissance, et une longue pratique des chaines de
|
||||
{\small{\textsc{format}}} est
|
||||
indispendable pour arriver à l'harmonie ultime bien que rigoureuse,
|
||||
de vos interminables listings de chiffres abscons.
|
||||
Nous verrons ensuite comment les utiliser pour faire de la saisie
|
||||
presque (mais pas complètement) utilisable en milieu
|
||||
\textsl{enduser}\index{enduser}.
|
||||
|
||||
Il y a deux manières de les utiliser~: en ligne de l'instruction
|
||||
d'écriture/lecture, ou séparément en tant que chaine de caractères.
|
||||
Pour la clarté de lecture, c'est la seconde que je vais utiliser.
|
||||
|
||||
%
|
||||
%
|
||||
%
|
||||
% INSERT BIG "TODO" HERE.
|
||||
%
|
||||
%
|
||||
\lstinputlisting{code/fortran/printty.f90}
|
||||
|
||||
|
||||
% --------------------------------------------------------
|
||||
|
||||
@ -216,7 +261,7 @@ end module
|
||||
|
||||
Rien de bien compliqué~:
|
||||
Un module peut être vu comme une boite qui contient (\texttt{contains})
|
||||
des procédures (\texttt{function} ou \texttt{subroutine},
|
||||
des procédures (\texttt{function} ou \texttt{subroutine}),
|
||||
et qui sera utilisé avec ce genre de petit programme~:
|
||||
|
||||
\begin{lstlisting}
|
||||
@ -228,9 +273,17 @@ program t
|
||||
end program
|
||||
\end{lstlisting}
|
||||
|
||||
La première ligne, \texttt{use dummy}, permet d'accéder aux fonctions disponibles
|
||||
dans le module dummy.
|
||||
Elle doit être suivie d'un \texttt{implicit none}, pour une raison à éclaircir.
|
||||
Et ensuite nous pouvons appeler notre procédure.
|
||||
|
||||
Mais les modules permettent de faire bien d'autre choses.
|
||||
|
||||
% --------------------------------------------------------
|
||||
\section{Random et Aléa}
|
||||
|
||||
Tentative de sranding faite à la rache.
|
||||
La dernière ligne va vous étonner.
|
||||
|
||||
\begin{lstlisting}
|
||||
@ -246,15 +299,22 @@ La dernière ligne va vous étonner.
|
||||
dummy = rand()
|
||||
\end{lstlisting}
|
||||
|
||||
Mais il y a d'autres manières plus rigoureuses d'utiliser les nombres
|
||||
pseudo-aléàtoires avec le fortan moderne.
|
||||
|
||||
% --------------------------------------------------------
|
||||
% new Thu 24 Nov 2022 02:27:05 AM CET
|
||||
|
||||
\section{Options de gfortran} \index{gfortran}
|
||||
|
||||
Comme d'habitude avec gcc\footnote{The Gnu Compiler Collection}, les
|
||||
Comme d'habitude avec gcc\footnote{Giant Complicated Compilords}, les
|
||||
options sont innombrables. J'ai essayé d'en dégager les plus importantes,
|
||||
mais ce ne sont probablement pas les seules.
|
||||
|
||||
Pour commencer, la plus obligatoire de toutes ces options est sans contexte
|
||||
le protecteur de base \texttt{-Wall} qui vous protégera de nombreux
|
||||
maléfices.
|
||||
|
||||
% --------------------------------------------------------
|
||||
|
||||
\section{Images}
|
||||
@ -339,7 +399,7 @@ immédiatement garnir de données pertinentes~:
|
||||
\end{verbatim}
|
||||
|
||||
Une fois en possession de ces données conceptuelles, que l'on peut
|
||||
aisément voire comme un cheminement, nous allons demander
|
||||
aisément voir comme un cheminement, nous allons demander
|
||||
au crayon de se promener sur notre feuille virtuelle en suivant
|
||||
ce chemin, et enfin de s'arreter de dessiner~:
|
||||
|
||||
|
@ -63,6 +63,10 @@ Vous voilà prévenus, la suite bientôt\dots
|
||||
|
||||
% ================================================================
|
||||
|
||||
\section{Les sockets Unix} \index{socket}
|
||||
|
||||
Les sockets de la famille AF\_UNIX sont utilisés pour
|
||||
les communications locales entre applications sur une même machine.
|
||||
|
||||
% ================================================================
|
||||
|
||||
|
@ -129,14 +129,16 @@ C'est simple, non ?
|
||||
|
||||
%-------------------------------------------------------------------
|
||||
|
||||
\section{Le Windowmanager}
|
||||
\section{Le WindowManager}
|
||||
|
||||
Aka \textbf{WM}.
|
||||
Aka \textbf{WM}\index{WM}.
|
||||
|
||||
%
|
||||
% https://jichu4n.com/posts/how-x-window-managers-work-and-how-to-write-one-part-i/
|
||||
%
|
||||
|
||||
Twm, Fvwm, Mwm... nous avons le choix.
|
||||
|
||||
%-------------------------------------------------------------------
|
||||
|
||||
\section{XCB}\index{XCB}
|
||||
|
@ -7,6 +7,6 @@
|
||||
|
||||
% =======================================================================
|
||||
|
||||
\section{xpaint} \index{xpaint }
|
||||
\section{xpaint} \index{xpaint}
|
||||
|
||||
% =======================================================================
|
||||
|
@ -19,7 +19,7 @@ gnuplot> splot "cam.indoor" using 2:4:3, "cam.indoor" using 5:7:6
|
||||
|
||||
Un exemple réel, issu d'un projet d'élevage d'algues
|
||||
bio-luminescentes dans un frigo bricolé par une jeune stagiaire
|
||||
fort sympathique.
|
||||
fort sympathique avec l'aide du Tetalab\index{tetalab}.
|
||||
|
||||
Le fichier des données contient cinq champs séparés par des espaces
|
||||
ou des tabulations.
|
||||
|
@ -1,7 +1,28 @@
|
||||
\chapter{scripting}
|
||||
|
||||
XXX
|
||||
Qu'est-ce que le \textsl{scripting} ?
|
||||
C'est l'art de coller entre eux divers outils logiciels
|
||||
afin de réaliser une tache donnée.
|
||||
Le "collage" est fait par un \textbf{script},
|
||||
lequel est un fichier texte, écrit dans divers
|
||||
langages (plus ou moins spécifiques) et qui sera lu et exécuté
|
||||
par un interpréteur.
|
||||
|
||||
Je ne vais pas revenir sur l'art du shebang, si vous ne
|
||||
le connaissez pas, c'est expliqué page \pageref{shebang}.
|
||||
En bref, c'est la manière dont le script sélectionne
|
||||
le bon interpréteur lors de son lancement.
|
||||
|
||||
Quels sont les langages courrament utilisés pour faire du
|
||||
script ? Il y a une bonne poignée de réponses à ça.
|
||||
La première étant souvent « Use The Shell ! »,
|
||||
et la seconde « tu as songé à awk ? »,
|
||||
ce qui est tout aussi sensé.
|
||||
Le shell étant dégrossi page \pageref{chap:shell},
|
||||
passons directement au langage Awk.
|
||||
|
||||
|
||||
% ===============================================================
|
||||
\section{Awk} \index{Awk}
|
||||
|
||||
Awk est un langage de programmation crée
|
||||
@ -45,7 +66,7 @@ des espaces et/ou des tabulations.
|
||||
|
||||
Ces données sont les coordonnées \textsc{x,y,z} et le rayon d'une
|
||||
petite collection de bubulles. Pratiquement, une représentation
|
||||
sommaire d'une sphère de povray\footnote{SDL keyword: \texttt{sphere}}.
|
||||
sommaire d'une sphère de povray.
|
||||
|
||||
Le fichier à générer est en trois partie : l'en-tête, la liste
|
||||
des bubulles\index{bubulle} et l'en-pied, ce qui est bien raccord
|
||||
@ -63,21 +84,26 @@ deux d'entre eux étant précédés d'une « instruction ».
|
||||
|
||||
Le premier bloc, avec le mot-clef \textsc{BEGIN}, est exécuté
|
||||
avant la lecture de la première ligne des données en entrée.
|
||||
Ce qui est le bon moment pour initialiser des variables.
|
||||
Nous l'utilisons pour créer l'en-tête d'un descripteur
|
||||
d'objet pour Povray.
|
||||
|
||||
Le second bloc (sans label) est exécuté pour chaque ligne lue.
|
||||
Et c'est ici que nous trouverons la magie.
|
||||
La ligne lue depuis l'entrée a été découpée selon le
|
||||
séparateur FS, et les tranches sont connues sous les noms
|
||||
de \$1, \$2, ... \$N (la ligne entière étant \$0)
|
||||
que nous utilisons dans la génération de la bubulle.
|
||||
|
||||
Et le troisième bloc (\textsc{END}) sera exécuté à la fin, après
|
||||
la lecture et le traitement du dernier enregistrement,
|
||||
qui sera dans notre cas la dernière ligne.
|
||||
qui est dans notre cas la dernière ligne.
|
||||
|
||||
Et à l'exécution~:
|
||||
|
||||
\begin{verbatim}
|
||||
tth@redlady:~/Devel/TetaTricks/code/awk$ ./mkunion.awk < dataset
|
||||
#declare Bubules = object
|
||||
#declare Bubulles = object
|
||||
{
|
||||
union {
|
||||
sphere { <17.000000, 9.000000, 4.000000>, 1.500000 }
|
||||
@ -85,14 +111,93 @@ union {
|
||||
sphere { <0.000000, 0.000000, 0.000000>, 1.000000 }
|
||||
}
|
||||
}
|
||||
// 3 bubulles
|
||||
\end{verbatim}
|
||||
|
||||
% ===============================================================
|
||||
\subsection{Mais ce n'est pas tout !}
|
||||
|
||||
% XXX to be continued XXX
|
||||
Ce premier exemple nous a montré comment, avec quelques
|
||||
lignes de code facile à comprendre, transformer des
|
||||
données et faire quelques calculs avec ces données.
|
||||
Nous avons vu le découpage de la ligne d'entrée, mais
|
||||
ce n'est pas tout, je suis passé très vite sur ce sont
|
||||
ces "labels" dont j'ai parlé.
|
||||
|
||||
Ce ne sont absolument pas des labels, ni des mot-clefs,
|
||||
mais quelque chose de bien plus puissant.
|
||||
C'est le mécanisme qui permet de sélectionner les lignes
|
||||
sur lesquelles nous voulons appliquer un traitement.
|
||||
|
||||
Nous avons déja vu \textsc{BEGIN} et \textsc{END},
|
||||
pour lancer du code avant-le-début et/ou après-la-fin.
|
||||
Mais nous pouvons mettre des bouts de code donnant un résultat
|
||||
booléen, oui/non, qui conditionnera l'exécution du
|
||||
bloc de code ainsi
|
||||
préfixé\footnote{J'ai l'impression de pas être très clair ?},
|
||||
ce qui nous donnera des possibilités de filtrage
|
||||
surpuissantes.
|
||||
|
||||
Par exemple, nous ne voulons pas de bubulle trop
|
||||
petite, il suffit de précéder le second bloc de l'exemple
|
||||
déja vu par un test sur la taille qui est dans
|
||||
le quatrième champ du fichier d'entrée~:
|
||||
|
||||
\begin{verbatim}
|
||||
$4 > 0.999 {
|
||||
printf(" sphere { <%f, %f, %f>, %f }\n", \
|
||||
$1, $2, $3, $4 )
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
Vous comprenez maintenant les deux plus importantes choses
|
||||
que l'on peut trouver dans Awk (/me fan).
|
||||
|
||||
XXX to be continued \index{XXX}
|
||||
|
||||
% ===============================================================
|
||||
\subsection{Définir une fonction}
|
||||
|
||||
Bien, nous savons maintenant générer des bubulles avec un
|
||||
filtrage sur la taille, mais nous voudrions maintenant procéder
|
||||
à des calculs sur les données que nous lisons.
|
||||
Deux choix s'offrent à nous, soit faire ça directement dans
|
||||
le deuxième bloc, soit utiliser un sous-programme dédié.
|
||||
Pour des raisons aussi bien didactiques que de bon sens,
|
||||
nous allons opter pour la seconde solution.
|
||||
|
||||
Mais voyons d'abord la syntaxe d'une fonction, avec en prime
|
||||
une petite astuce: si vous voulez utiliser Awk dans devoir
|
||||
lui fournir de données en entrée, c'est simple, mettez tout
|
||||
dans le bloc \textsc{BEGIN}.
|
||||
|
||||
\lstinputlisting[]{code/awk/demo-func.awk}
|
||||
|
||||
\begin{verbatim}
|
||||
tth@redlady:~/Devel/TetaTricks/code/awk$ ./demo-func.awk
|
||||
---- demo fonction ----
|
||||
sin(1.000000) = 0.841471
|
||||
distance from center = 0.707107
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
La deuxième fonction demande quelques explications, puisqu'elle
|
||||
met en œuvre un « awkisme » de bon aloi.
|
||||
En effet, Awk ne connait pas les variables locales à une fonction,
|
||||
c'est-à-dire connues seulement à l'intérieur de celle-ci.
|
||||
|
||||
% ===============================================================
|
||||
|
||||
\subsection{Les variables}
|
||||
|
||||
Et puisque on en parle...
|
||||
|
||||
% ===============================================================
|
||||
|
||||
\subsection{Pattern filtering} \index{pattern}
|
||||
|
||||
Wesh, regexp.
|
||||
|
||||
% ===============================================================
|
||||
|
||||
|
||||
|
103
chap/shell.tex
103
chap/shell.tex
@ -74,7 +74,7 @@ tests et les boucles.
|
||||
|
||||
% --------------------------------------------------------------
|
||||
|
||||
\subsection{Le shebang} \index{shebang}
|
||||
\subsection{Le shebang} \index{shebang} \label{shebang}
|
||||
|
||||
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
|
||||
au tout début d'un script shell.
|
||||
@ -99,7 +99,7 @@ l'usage à l'instant, avec la création d'un script complet~:
|
||||
|
||||
\begin{verbatim}
|
||||
tth@redlady:~$ echo '#!/bin/bash' > foo.sh
|
||||
tth@redlady:~$ echo 'printf "%d" 85 >> foo.sh
|
||||
tth@redlady:~$ echo 'printf "%x" 85 >> foo.sh
|
||||
tth@redlady:~$ chmod u+x ./foo.sh
|
||||
tth@redlady:~$ ./foo.sh
|
||||
55
|
||||
@ -145,12 +145,31 @@ Les plus importantes sont là : le choix, la boucle, l'attente.
|
||||
|
||||
\subsection {Les tests}
|
||||
|
||||
Deux éléments sont ils-égaux ?
|
||||
Deux éléments sont ils égaux ? Et d'abord, ces deux éléments
|
||||
sont-ils comparables ?
|
||||
|
||||
% --------------------------------------------------------------
|
||||
|
||||
\subsection {Les boucles}
|
||||
|
||||
Exemple très simple~:
|
||||
|
||||
\begin{verbatim}
|
||||
for foo in A B C D
|
||||
do
|
||||
echo ${foo}
|
||||
done
|
||||
\end{verbatim}
|
||||
|
||||
Autre exemple, un peu moins simple~:
|
||||
|
||||
\begin{verbatim}
|
||||
for foo in $(seq 0 37 133)
|
||||
do
|
||||
printf "foo = %3d\n" ${foo}
|
||||
done
|
||||
\end{verbatim}
|
||||
|
||||
% ==============================================================
|
||||
|
||||
\section{Les fonctions}
|
||||
@ -173,37 +192,48 @@ Et comment les utiliser~:
|
||||
\section{Heredoc}
|
||||
|
||||
Un nom bien difficile à traduire, peut-être par « document en place » ?
|
||||
|
||||
C'est un moyen simple et efficace de mettre des données textuelles
|
||||
dans un script afin de les envoyer dans le \textsl{stdin} d'un
|
||||
logiciel. Par exemple, quelques commandes pour générer un
|
||||
graphique avec Gnuplot\index{gnuplot} sur la console \textsl{dumb}.
|
||||
|
||||
\lstinputlisting{code/shell/heredoc.sh}
|
||||
|
||||
Après le \textsl{shebang}, nous avons la création de la variable
|
||||
pour le titre,
|
||||
et ensuite l'appel à Gnuplot avec la redirection
|
||||
\texttt{$<<$ \_\_EOC\_\_} % bug affichage "<<"
|
||||
qui va envoyer sur le stdin de Gnuplot la suite du
|
||||
script shell (des commandes gnuplot), jusque au marqueur de fin,
|
||||
qui est \texttt{\_\_EOC\_\_} dans notre cas.
|
||||
|
||||
... et la démonstration~:
|
||||
|
||||
\begin{verbatim}
|
||||
tth@redlady:~/Devel/TetaTricks$ code/shell/heredoc.sh
|
||||
tth@redlady:~/Devel/TetaTricks/code/shell$ ./heredoc.sh
|
||||
|
||||
Here Doc
|
||||
Here Doc (9946)
|
||||
|
||||
1 +--------------------------------------------------------------------+
|
||||
| +** *** + + + + |
|
||||
0.8 |-+.......**..........:.**.......:..........:.........sin(x).*******-|
|
||||
| ** : : * : : : : |
|
||||
0.6 |-+....**..:..........:....**....:..........:..........:..........:+-|
|
||||
| * : : * : : : : |
|
||||
0.4 |-+.**.....:..........:.......*..:..........:..........:..........:+-|
|
||||
| * : : * : : : : |
|
||||
0.2 |-*........:..........:.........**..........:..........:..........:+-|
|
||||
|* : : * : : : |
|
||||
0 |-+........:..........:..........:**........:..........:..........:+-|
|
||||
| : : : * : : : *|
|
||||
-0.2 |-+........:..........:..........:..**......:..........:..........:*-|
|
||||
| : : : * : : * |
|
||||
-0.4 |-+........:..........:..........:.....*....:..........:........**:+-|
|
||||
| : : : * : : * : |
|
||||
-0.6 |-+........:..........:..........:.......**.:..........:.....**...:+-|
|
||||
| : : : *: : ** : |
|
||||
-0.8 |-+........:..........:..........:..........**.........:..**......:+-|
|
||||
| + + + + *** +** + |
|
||||
-1 +--------------------------------------------------------------------+
|
||||
0 1 2 3 4 5 6
|
||||
1 +-------------------------------------------------------------+
|
||||
| + + + + + + + + + |
|
||||
| 0.7*sin(x) ******* |
|
||||
| ****** ****** |
|
||||
0.5 |-+ ** ** ** ** +-|
|
||||
| ** * * ** |
|
||||
| ** ** ** ** |
|
||||
| ** ** ** ** |
|
||||
|* ** ** *|
|
||||
0 |-+ * * +-|
|
||||
| ** ** |
|
||||
| * * |
|
||||
| * * |
|
||||
-0.5 |-+ ** ** +-|
|
||||
| *** *** |
|
||||
| ******* |
|
||||
| |
|
||||
| + + + + + + + + + |
|
||||
-1 +-------------------------------------------------------------+
|
||||
0 1 2 3 4 5 6 7 8 9
|
||||
\end{verbatim}
|
||||
|
||||
Je pense que l'exemple est assez parlant.
|
||||
@ -220,6 +250,23 @@ Quelle sont les différences entre \texttt{en\_US.UTF-8} et
|
||||
\texttt{C.UTF-8} ?
|
||||
|
||||
% ==============================================================
|
||||
% https://wiki.fiat-tux.fr/books/d%C3%A9veloppement/page/ajouter-des-couleurs-a-ses-scripts-shell
|
||||
|
||||
\section{Écrire en couleur} \index{ANSI} \index{escape}
|
||||
|
||||
\begin{verbatim}
|
||||
BLACK='\033[0;30m'
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[0;33m'
|
||||
BLUE='\033[0;34m'
|
||||
PURPLE='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
WHITE='\033[0;37m'
|
||||
\end{verbatim}
|
||||
|
||||
% ==============================================================
|
||||
|
||||
\section{Questions à voir}
|
||||
|
||||
\begin{itemize}
|
||||
|
28
chap/son.tex
28
chap/son.tex
@ -2,10 +2,19 @@
|
||||
\label{chap:son}
|
||||
|
||||
Abordons maintenant un sujet complexe :
|
||||
le son en général,
|
||||
le son en général, et en particulier avec Linux.
|
||||
Vous pouvez aussi regarder
|
||||
la musique (p. \pageref{chap:musique}) et la
|
||||
synthèse de sons (p. \pageref{chap:modular}).
|
||||
|
||||
Complexe, parce que, il faut bien se le dire
|
||||
entre nous, je me permet d'affirmer avec vigueur que la gestion du son
|
||||
dans Linux est horriblement compliquée, pour ne pas dire
|
||||
totalement bordélique.
|
||||
C'est un empilement de couches logicielles, chacune destinée à
|
||||
un usage particulier, et qui passent leur temps à se marcher
|
||||
sur les pieds.
|
||||
|
||||
%------------------------------------------------------------------
|
||||
|
||||
\section{ALSA}
|
||||
@ -33,6 +42,8 @@ Ensuite, nous avons \texttt{aplay} et \texttt{arecord},
|
||||
qui permettent d'écouter et d'enregistrer les sets de
|
||||
James Lewis\footnote{Que ça, c'est de la super noise !}.
|
||||
|
||||
Ils partagent beaucoup d'options communes.
|
||||
|
||||
\subsection{arecord}
|
||||
|
||||
Si vous avez plusieurs cartes son, la sélection du
|
||||
@ -48,6 +59,13 @@ arecord -D plughw:CARD=Snowball,DEV=0 -v -r 22050 foo.wav
|
||||
arecord -D plughw:CARD=H4,DEV=0 -v -c 2 -f S16_LE -r 44100 foo.wav
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{aplay} \index{aplay}
|
||||
|
||||
C'est le pendant de arecord pour écouter des fichiers sonores.
|
||||
Avec pas mal d'options communes.
|
||||
|
||||
|
||||
|
||||
\subsection{Du code...}
|
||||
|
||||
\begin{verbatim}
|
||||
@ -129,8 +147,8 @@ serveur de stream comme Icecast\index{icecast}
|
||||
Libsndfile est essentiellement une très complète bibliothèque
|
||||
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}.
|
||||
considérable de formats de fichiers,
|
||||
que nous verrons peut-être un de ces jours\dots.
|
||||
|
||||
Elle arrive avec une floppée d'outils en ligne de
|
||||
commande, dont certains sont assez performants.
|
||||
@ -164,11 +182,11 @@ https://www.xiph.org/ao/doc/drivers.html
|
||||
Pour choisr comment et vers quelle prise physique libao va envoyer
|
||||
le son, il y a deux choix à faire. La partie logicielle d'une part
|
||||
(aixs, oss, alsa, jack, sndio\dots)
|
||||
et la partie matérielle (jack standard, casque audio USB\dots).
|
||||
et la partie matérielle (jack 3.5 standard, casque audio USB\dots).
|
||||
|
||||
%------------------------------------------------------------------
|
||||
|
||||
\section{Portaudio} \label{Portaudio} \index{Portaudio}
|
||||
\section{Portaudio} \label{Portaudio} \index{portaudio}
|
||||
|
||||
Une suggestion de Wargreen pour avancer un peu dans la construction
|
||||
de ma DAW\footnote{Digital Audio Workstation, aka machine à sons}
|
||||
|
@ -21,6 +21,10 @@ image.
|
||||
|
||||
\textsl{Video For Linux, second edition.}
|
||||
|
||||
%
|
||||
% PLEASE EXPLAIN !
|
||||
%
|
||||
|
||||
\begin{verbatim}
|
||||
tth@delirium:~$ v4l2-ctl --list-formats-ext
|
||||
ioctl: VIDIOC_ENUM_FMT
|
||||
@ -58,6 +62,29 @@ that shields its users from many of the difficulties and problems
|
||||
of using the V4L2 API directly.
|
||||
\end{quote}
|
||||
|
||||
% --------------------------------------------------------------------
|
||||
% nouveau du Tue Sep 17 08:03:49 UTC 2024
|
||||
|
||||
\section{UVC} \index{UVC}
|
||||
|
||||
|
||||
\begin{quote}
|
||||
L'USB video device class (aussi appelé USB video class abrégé en UVC)
|
||||
est un protocole de gestion de périphériques électroniques vidéo via
|
||||
les ports de type USB\index{USB}.
|
||||
Il permet de gérer les flux vidéo dans différents encodages, les images fixes,
|
||||
ainsi que le contrôle des appareils qui le permettent.
|
||||
\end{quote}
|
||||
|
||||
|
||||
Le jour\footnote{Lundi 17 septembre 2024}* où je me penche sur cette techno, premier souci~:
|
||||
\textsl{Le pilote pour les WebCams UVC
|
||||
– standard utilisé pour les caméras USB modernes –
|
||||
n’est pas encore au point et n’est pas inclus dans les
|
||||
versions publiées de Haiku.}
|
||||
|
||||
|
||||
|
||||
% --------------------------------------------------------------------
|
||||
|
||||
\section{GameBoy camera}
|
||||
@ -97,13 +124,14 @@ fonctionne et le rendu ressemble.
|
||||
|
||||
|
||||
D'après la manpage :
|
||||
« \textit{
|
||||
« \textit{%
|
||||
vgrabbj is a program that will grab images from any v4l-capable device
|
||||
which supports one of the rgb24, rgb32, yuv420, yuv420p, yuyv, or
|
||||
yuv422 palettes and saves the image as a .jpg, .png, or .pnm file.
|
||||
} »
|
||||
|
||||
Quelques options à connaitre : \texttt{-S} échange des
|
||||
Quelques options à connaitre :
|
||||
\texttt{-S} échange des
|
||||
deux composantes R et B; \texttt{-s <device>} affiche
|
||||
les capacités du périphérique v4l\index{v4l}.
|
||||
|
||||
|
@ -1,16 +0,0 @@
|
||||
/*
|
||||
* afficher les arguments.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int foo;
|
||||
|
||||
for (foo=0; foo<argc; foo++) {
|
||||
printf(" %3d %s\n", foo, argv[foo]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
0
code/awk/README.md
Normal file
0
code/awk/README.md
Normal file
20
code/awk/demo-func.awk
Executable file
20
code/awk/demo-func.awk
Executable file
@ -0,0 +1,20 @@
|
||||
#!/usr/bin/awk -f
|
||||
BEGIN {
|
||||
print "---- demo fonction ----"
|
||||
print_sinus(1.0)
|
||||
print_dist(0.5, 0.5, 0.0)
|
||||
}
|
||||
|
||||
# the simple version
|
||||
function print_sinus ( value )
|
||||
{
|
||||
printf "sin(%f) = %f\n", value, sin(value)
|
||||
}
|
||||
|
||||
# version with local variables.
|
||||
function print_dist(x, y, z, dist)
|
||||
{
|
||||
dist = sqrt(x*x + y*y + z*z)
|
||||
printf "distance from center = %f\n", dist
|
||||
}
|
||||
|
@ -2,7 +2,8 @@
|
||||
|
||||
# create the sdl object: an union of sphere
|
||||
BEGIN {
|
||||
print "#declare Bubules = object"
|
||||
nbre = 0
|
||||
print "#declare Bubulles = object"
|
||||
print "{ \nunion { "
|
||||
}
|
||||
|
||||
@ -10,9 +11,11 @@ BEGIN {
|
||||
{
|
||||
printf(" sphere { <%f, %f, %f>, %f }\n", \
|
||||
$1, $2, $3, $4 )
|
||||
nbre++
|
||||
}
|
||||
|
||||
# closing sdl structure
|
||||
END {
|
||||
print " }\n}\n"
|
||||
print " }\n}"
|
||||
printf "// %d bubulles\n", nbre
|
||||
}
|
||||
|
@ -3,3 +3,8 @@
|
||||
Pour les explications, il faut aller lire le livre ou
|
||||
les codes source.
|
||||
|
||||
## Dessiner...
|
||||
|
||||
Je pense qe l'on devrait parler ici de plplot.
|
||||
|
||||
|
||||
|
@ -1,7 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
puts("hello world.");
|
||||
return 0;
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
/* LISTEN OSC */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <lo/lo.h>
|
||||
|
||||
#define LOCAL_PORT "9000"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
lo_server_thread st;
|
||||
|
||||
st = lo_server_thread_new(LOCAL_PORT, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
/* SEND OSC */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <lo/lo.h>
|
||||
|
||||
#define REMOTE_HOST "localhost"
|
||||
#define REMOTE_PORT "9000"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
lo_address loana;
|
||||
int foo;
|
||||
|
||||
loana = lo_address_new(REMOTE_HOST, REMOTE_PORT);
|
||||
foo = lo_send(loana, "/dev/kmem", "is", 61, "meg, efface !");
|
||||
fprintf(stderr, "foo %d\n", foo);
|
||||
return 0;
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
TITLE="Here Doc"
|
||||
TITLE="Here Doc ($$)"
|
||||
|
||||
gnuplot << __EOC__
|
||||
set term dumb
|
||||
set grid
|
||||
set title "$TITLE"
|
||||
plot [x=0:pi*2] sin(x)
|
||||
set term dumb size 72,24
|
||||
# set grid
|
||||
set title "$TITLE"
|
||||
plot [x=0:pi*3] [-1:1] 0.7*sin(x)
|
||||
__EOC__
|
@ -1,4 +0,0 @@
|
||||
#!/usr/bin/awk -f
|
||||
|
||||
{ printf "%5d\t%s\n", NR, $0; }
|
||||
|
@ -28,7 +28,8 @@
|
||||
\setlength \parskip {0.30em} % XXX
|
||||
|
||||
%------ reglages des 'listings'
|
||||
\lstset{frame=single} % dessin d'un cadre autour du listing
|
||||
\lstset{frame=none} % éventuel dessin d'un cadre autour du listing
|
||||
|
||||
\lstset{basicstyle=\ttfamily\small}
|
||||
\lstset{aboveskip=0.7em,belowskip=0.7em}
|
||||
|
||||
@ -126,16 +127,16 @@ Your mileage may vary, film at 11\dots
|
||||
|
||||
\input{chap/video}
|
||||
\input{chap/graphisme}
|
||||
\input{chap/dessin} % nouveau 5 septembre 2024
|
||||
% \input{chap/dessin} % nouveau 5 septembre 2024
|
||||
\input{chap/gnuplot}
|
||||
\input{chap/print}
|
||||
\input{chap/webcam}
|
||||
% \input{chap/SCSI}
|
||||
\input{chap/X11}
|
||||
\input{chap/wayland} % nouveau septembre 2023
|
||||
% \input{chap/wayland} % nouveau septembre 2023
|
||||
\input{chap/Fortran}
|
||||
\input{chap/scripting}
|
||||
\input{chap/Arduino}
|
||||
% \input{chap/Arduino}
|
||||
\input{chap/Basic}
|
||||
\input{chap/R} % new octobre 2023
|
||||
% \input{chap/GMP}
|
||||
@ -153,10 +154,10 @@ Your mileage may vary, film at 11\dots
|
||||
\input{chap/IPC}
|
||||
\input{chap/dosbox}
|
||||
\input{chap/manpages}
|
||||
\input{chap/grub}
|
||||
% \input{chap/grub}
|
||||
\input{chap/photos}
|
||||
\input{chap/plugins}
|
||||
\input{chap/Bonjour}
|
||||
% \input{chap/Bonjour}
|
||||
\input{chap/ioctl}
|
||||
\input{chap/debug}
|
||||
% \input{chap/buzybox}
|
||||
@ -169,9 +170,9 @@ Your mileage may vary, film at 11\dots
|
||||
\input{chap/webserver}
|
||||
\input{chap/hardware}
|
||||
\input{chap/gadgets}
|
||||
\input{chap/sdr}
|
||||
% \input{chap/sdr}
|
||||
\input{chap/bdd} % nouveau 26 octobre 2022
|
||||
\input{chap/slang}
|
||||
% \input{chap/slang}
|
||||
\input{chap/curses}
|
||||
% \input{chap/openwrt}
|
||||
\input{chap/WiFi}
|
||||
|
Loading…
Reference in New Issue
Block a user