Skip to content

Commit 2939b03

Browse files
committed
feat: improve handling of backticks in code blocks and run formatter
1 parent ec49e48 commit 2939b03

14 files changed

+442
-259
lines changed

book/14-b-methods-of-writing-csound-scores.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ written:
184184

185185
To test this, first save this file as _print.py_ in the same folder
186186
where your .csd examples are:
187+
187188
```python
188189

189190
from sys import argv
@@ -219,7 +220,7 @@ And again a complaint about the invalid score file:
219220

220221
To get rid of the complaints we must write the score file. This is a simple example, saved as _test.py_:
221222

222-
``` python
223+
```python
223224
from sys import argv
224225
print("Script = '%s'" % argv[0])
225226
print("File to read = '%s'" % argv[1])
@@ -230,7 +231,7 @@ with open(argv[2], 'w') as out:
230231

231232
Which is called in this Csound file:
232233

233-
``` csound-csd
234+
```csound-csd
234235
<CsoundSynthesizer>
235236
<CsInstruments>
236237
instr 1

book/15-e-GS-fr-01.md

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# 01 Bonjour Csound
22

33
## Ce que vous apprendrez dans ce tutoriel
4+
45
- Comment créer et émettre un son sinusoïdal
56
- Que sont les **opcodes** dans Csound
67
- Quelle est la signification de l’**audio rate / fréquence d’échantillonnage** dans Csound
@@ -9,32 +10,35 @@
910
- Qu’est-ce qu’une **partition/score** Csound
1011

1112
## Qu’est-ce qu’un oscillateur sinusoïdal / sine oscillator
13+
1214
Une onde sinusoïdale peut être considérée comme l’élément sonore le plus élémentaire au monde. Quand nous dessinons une onde sinusoïdale comme un graphique montrant son amplitude au cours du temps, elle ressemble à ça :
1315

1416
![Onde sinusoïdale serpent](../resources/images/01-GS-01-sine.png)
1517

16-
17-
1818
Pour produire une onde sinusoïdale, Csound utilise un oscillateur. Un oscillateur nécessite certaines entrées pour fonctionner :
19+
1920
1. Une amplitude maximum de sortie. Ce qui résultera en un son plus ou moins fort.
2021
2. Le nombre de périodes (cycles) par seconde à générer. Ce qui résultera en un son plus ou moins aigüe ou grave. L’unité est le _Hertz(Hz)_. 1000 Hz signifie qu’une sinusoïde comporte 1000 périodes par seconde.
2122

2223
## Un oscillateur sinusoïdal dans Csound : Opcode et Arguments
24+
2325
Csound dispose de nombreux oscillateurs différents. (vous pouvez trouver [ici](https://flossmanual.csound.com/how-to/opcodes) quelques descriptions et comparaisons.) Dans cet exemple, nous utilisons l’opcode `poscil`, qui signifie _precise oscillator_.
2426

2527
Un **opcode** est une unité de traitement dans Csound, comparable à un _object_ dans PureData ou Max, ou un _UGen_ dans SuperCollider. Si vous êtes familier des langages de programmation, vous pouvez considérer un opcode comme une _building fonction / fonction intégrée_.
2628

2729
Les entrées d’un opcode sont appelées **arguments** et sont écrites entre parenthèses immédiatement après le nom de l’opcode. Donc `poscil(0.2,400)` signifie : L’opcode `poscil` prend deux arguments en entrée :
30+
2831
- Le premier argument est le nombre `0.2`.
2932
- Le second argument est le nombre `400`.
3033

3134
La signification des arguments en entrée dépend de la façon dont l’opcode a été implémenté. Pour `poscil`, la première entrée est l’amplitude et la seconde entrée est la fréquence. Le [Manuel de Référence Csound](https://csound.com/docs/manual-fr/index.html) contient toutes les informations à son sujet. Nous apporterons quelques éclaircissements dans notre [Tutoriel 08](15-l-GS-fr-08.md) pour aider à son utilisation.
3235

3336
Cette manière d’écrire du code est commune à de nombreux langages de programmation, comme `range(13)` en Python, ou `printf("no no")` en C, ou `Date.now()` en JavaScript (dans ce cas les parenthèses sont vides, ce qui signifie : pas d’argument en entrée).
34-
Note : Il existe une autre manière d’écrire du code Csound. Si vous voulez en apprendre plus sur ce sujet, voyez la section "Deux façons d’écrire du code dans Csound" à la fin de ce tutoriel.
37+
Note : Il existe une autre manière d’écrire du code Csound. Si vous voulez en apprendre plus sur ce sujet, voyez la section "Deux façons d’écrire du code dans Csound" à la fin de ce tutoriel.
3538

3639
## Le flux d’un signal et son code
37-
Nous créons maintenant une onde sinusoïdale d’une amplitude de 0.2 et de 400 cycles par seconde (Hz).
40+
41+
Nous créons maintenant une onde sinusoïdale d’une amplitude de 0.2 et de 400 cycles par seconde (Hz).
3842
Nous nommerons ce signal _aSine_ car il s’agit d’un signal **a**udio. Le caractère **a** au début du nom de la variable signifie exactement ça.
3943

4044
Un signal audio est un signal qui produit une nouvelle valeur à chaque sample/échantillon. (Apprenez-en davantage [ici](https://flossmanual.csound.com/basics/digital-audio) sur les samples et les _sample rates / taux d’échantillonnage_).
@@ -46,6 +50,7 @@ aSine = poscil:a(0.2,400)
4650
Cela signifie : Le signal _aSine_ est créé par l’opcode `poscil` au taux audio / audio rate (`:a`), et les entrées pour `poscil` sont 0.2 pour l’amplitude, et 400 pour la fréquence.
4751

4852
Pour sortir le signal (pour que nous puissions l’entendre), nous introduisons l’opcode `outall`. Cet opcode envoie un signal audio à tous les canaux de sortie disponibles.
53+
4954
```
5055
outall(aSine)
5156
```
@@ -54,7 +59,7 @@ Notez que le signal _aSine_ est d’abord la sortie de l’oscillateur, puis dev
5459

5560
Nous pouvons dessiner le flux de ce programme comme ceci :
5661

57-
![Flux de signal et code Csound pour un oscillateur sinusoïdal et une sortie.](../resources/images/01-GS-01-a.png){width=80%}
62+
![Flux de signal et code Csound pour un oscillateur sinusoïdal et une sortie.](../resources/images/01-GS-01-a.png){width=80%}
5863

5964
Au milieu, vous voyez le flux du signal, avec des symbols pour l’oscillateur et la sortie. Vous pouvez les imaginer comme les modules d’un synthétiseur, connectés par un cable nommé _aSine_.
6065

@@ -63,11 +68,14 @@ Sur le côté gauche, vous voyez la chaine entre les entrées, l’opcode et la
6368
À droite, vous voyez le code Csound correspondant. Chaque ligne de code représente une chaine _entrée -> opcode -> sortie_, dans la forme _sortie = opcode(entrée)_. La ligne `outall(aSine)` n’a pas de sortie vers Csound, car elle envoie l’audio au matériel (comme l’objet `dac~` dans PD ou Max).
6469

6570
## Votre premier instrument Csound
71+
6672
Dans Csound, tous les oscillateurs, filtres, lecteurs d’échantillons / sample players, et autres unités de traitement sont encapsulés dans un **instrument**. Un instrument comporte les mots-clé :
73+
6774
- `instr` à son début
6875
- et `endin` à sa fin.
6976

7077
Après le mot-clé `instr`, séparé par un espace, nous assignons un nombre (1, 2, 3, …) ou un nom à l’instrument. Nommons notre instrument "Hello", et tapons le code que nous venons de discuter :
78+
7179
```
7280
instr Hello
7381
aSine = poscil:a(0.2,400)
@@ -76,6 +84,7 @@ endin
7684
```
7785

7886
### Exemple
87+
7988
Nous somme maintenant prêt à exécuter notre code. Tout ce qui nous reste à faire est d’inclure le code de notre instrument dans un fichier Csound complet.
8089

8190
Regardez le code de l’exemple. Pouvez-vous repérer le code de l’instrument ?
@@ -107,18 +116,23 @@ i "Bonjour" 0 2
107116
</CsScore>
108117
</CsoundSynthesizer>
109118
```
119+
110120
#### La partition / score Csound
111121

112122
En bas de notre exemple de code, vous voyez ceci :
123+
113124
```
114125
<CsScore>
115126
i "Bonjour" 0 2
116127
</CsScore>
117128
```
129+
118130
C’est la section **Partition / Score** du fichier .csd. Elle commence par la balise \<CsScore> et se termine par la balise \</CsScore>. Entre ces deux balises, il y a cette ligne de partition :
131+
119132
```
120133
i "Bonjour" 0 2
121134
```
135+
122136
Chaque colonne (champ de paramètre / parameter field) spécifie une certaine information :
123137

124138
- `"Bonjour"` : L’instrument auquel cette ligne de partition se réfère.
@@ -142,16 +156,20 @@ Chaque colonne (champ de paramètre / parameter field) spécifie une certaine in
142156
## Opcodes, Mots-Clés et termes que vous avez appris dans ce tutoriel
143157

144158
### Opcodes
159+
145160
- `poscil:a(Amplitude,Frequence)` : oscillateur au taux audio, avec entrées d’amplitude et de fréquence.
146161
- `outall(aSignal)` : envoie _aSignal_ vers les canaux de sortie physiques.
147162

148163
### Mots-clés
164+
149165
- `instr ... endin` sont les mots-clés qui commencent et finissent une définition d’instrument.
150166

151167
### Termes
168+
152169
- Un signal à la _fréquence audio / audio rate_ ou _a-rate_ est mis à jour à chaque sample/échantillon.
153170

154171
## Avançons…
172+
155173
Avec le tutoriel suivant : [02_Bonjour Fréquences](15-f-GS-fr-02.md)
156174

157175
## Ou lisez quelques informations supplémentaires ici
@@ -175,32 +193,40 @@ Bien que la réalité sonore soit un peu plus complexe, cela montre que les onde
175193
Vous trouverez plus d'informations à ce sujet dans le chapitre [Synthèse additive](https://flossmanual.csound.com/sound-synthesis/additive-synthesis) et dans le chapitre [Résynthèse spectrale](https://flossmanual.csound.com/sound-modification/fourier-analysis-spectral-processing) de ce livre.
176194

177195
### Deux façons d’écrire du code dans Csound : la façon Traditionnelle, et la façon fonctionnelle
196+
178197
Vous êtes peut-être surpris de voir le code Csound écrit de la façon décrite ci-dessus. En fait, la façon classique d’écrire du code Csound ressemble à ceci :
198+
179199
```
180200
aSine poscil 0.2, 400
181201
outall aSine
182202
```
203+
183204
Vous pouvez sans problème continuer d’écrire le code Csound ainsi. Les raisons pour lesquelles j’utilise l’écriture fonctionnelle dans ce tutoriel sont :
205+
184206
1. Nous sommes tous familiarisés avec cette manière de déclarer une variable `y` à gauche comme étant la somme d’une autre variable `x` plus deux : `y = x + 2`.
185207
2. Comme mentionné plus haut, la plupart des langages de programmation utilisent une syntaxe similaire, dans la forme `sortie = fonction(arguments)`. Donc pour les personnes ayant quelques connaissances en programmation, c’est une aide à l’apprentissage de Csound.
186208
3. Le style fonctionnel d’écrire du code Csound a toujours existé dans des expressions comme `ampdb(-10)` ou `ftlen(giTable)`. Ce n’est donc pas totalement nouveau, mais plutôt une extension.
187209
4. Chaque fois que nous voulons utiliser une expression comme argument (vous en apprendrez plus à ce sujet dans le [tutoriel 6](15-j-GS-fr-06.md)), nous devons écrire le code de cette manière. Il est donc bon de l’utiliser en permanence pour plus de cohérence.
188210

189-
NOTE DU TRADUCTEUR pour les francophones : Sauf dans les commentaires où ça ne pose aucun problème, n’utilisez que des caractères ASCII dans vos programmes. J’ai essayé et chez moi ça plante. Donc pas de lettres accentuées, pas de œ et autres signes propres au français.
211+
NOTE DU TRADUCTEUR pour les francophones : Sauf dans les commentaires où ça ne pose aucun
212+
problème, n’utilisez que des caractères ASCII dans vos programmes. J’ai essayé et chez moi ça plante. Donc pas de lettres accentuées, pas de œ et autres signes propres au français.
190213

191214
## Au sujet de ces tutoriels
215+
192216
Ce _Guide de démarrage_ a été écrit par Joachim Heintz en 2023. Il est basé sur de nombreuses expériences d’enseignement de Csound auprès de jeunes compositeurs.
193217

194218
J’espère que ce tutoriel permettra à davantage de musiciens de réaliser à quel point il était et reste admirable et fructueux de transformer le plus ancien langage de programmation audio en un langage moderne, sans perdre aucune composition réalisée avec Csound, même écrite il y a de nombreuses années.
195219

196220
Chaque tutoriel comporte une première partie à lire _impérativement_, suivie d’une partie facultative (dans laquelle se trouvent bien sûr les choses les plus intéressantes). Pour que quelque chose au moins dans ce monde soit stable, chaque partie à lire _impérativement_ comporte cinq rubriques, et chaque partie à lire _facultativement_ en comporte trois. En fait, j’avais prévu 4+3, mais j’ai demandé à Csound qui m’a répondu :
221+
197222
```
198223
if 4+3 == 7 then
199224
"Écrivez ce Tutoriel!\n"
200225
else
201226
8!
202227
endif
203228
```
229+
204230
J’ai pris cela comme une révélation et j’ai opté pour 5+3 entêtes, afin de satisfaire également l’exigence `8!`. D’après mon expérience, il vaut toujours mieux satisfaire les deux dieux d’une branche conditionnelle.
205231

206232
Les parties "À lire absolument" comprennent également une section "À faire absolument". Tout d’abord un exemple central, oui très central, substantiel, opportun, agréable et bien sûr très instructif. Puis une section "Essayez vous-même" qui représente en quelque sorte le revers de la médaille : Autant il est facile d’appuyer sur le bouton "Exécuter/Run", autant il sera peut-être difficile de résoudre ces maudits exercices. Mais, pour citer John Ffitch : "Nous sommes tous passés par là…".

book/15-f-GS-fr-02.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
- Comment un **document .csd** Csound est structuré :
1111

12-
- Que sont les **CsOptions** et
12+
- Que sont les **CsOptions** et
1313

14-
- Qu’est-ce que la section **CsInstruments** ou **orchestra**.
14+
- Qu’est-ce que la section **CsInstruments** ou **orchestra**.
1515

1616
## Une ligne pour la fréquence
1717

@@ -27,8 +27,7 @@ Le cas le plus simple de ce genre de mouvement est une ligne. Nous avons besoin
2727

2828
Voici une ligne qui se déplace de 500 à 400 en 0.5 secondes, et qui reste à 400 pendant 1.5 secondes :
2929

30-
![Ligne de fréquence.](../resources/images/01-GS-02-a.png)
31-
30+
![Ligne de fréquence.](../resources/images/01-GS-02-a.png)
3231

3332
Note : Acoustiquement, cette façon d’appliquer un _glissando_ est discutable. Nous en parlerons dans le [Tutoriel 05](15-i-GS-fr-05.md).
3433

@@ -39,9 +38,11 @@ Voici une ligne qui se déplace de 500 à 400 en 0.5 secondes, et qui reste à
3938
Dans Csound, nous créons ce genre de ligne avec l’opcode `linseg`, qui signifie "linear segments / segments linéaires". Ici, nous n’avons besoin que d’un seul segment qui se déplace de 500 à 400 en 0.5 secondes.
4039

4140
Voici le code Csound pour ce mouvement linéaire :
41+
4242
```
4343
kFreq = linseg:k(500, 0.5, 400)
4444
```
45+
4546
## Signal k-rate (à la fréquence de contrôle)
4647

4748
Un signal est quelque chose dont les valeurs changent au cours du temps. Mais qu’est-ce que le temps dans une application audio comme Csound ?
@@ -50,14 +51,14 @@ Le temps fondamental est donné par la **sample rate / fréquence d’échantill
5051

5152
La seconde résolution temporelle possible dans Csound est moins fine. Elle ne calcule pas une nouvelle valeur à chaque échantillon, mais seulement par **groupe d’échantillons**. Cette résolution temporelle est appelée **control rate / fréquence de contrôle**.
5253

53-
![audio rate vs control rate](../resources/images/01-GS-02-b.png)
54-
54+
![audio rate vs control rate](../resources/images/01-GS-02-b.png)
5555

5656
Les variable Csound qui comportent un **k** comme premier caractère, utilisent la fréquence de contrôle / control rate. Leurs valeurs sont mises à jour à la fréquence de contrôle. C’est la raison pour laquelle nous écrivons _**k**Freq_.
5757

5858
Après l’opcode, avant la parenthèse, nous plaçons `:k` pour signifier que cet opcode utilise la fréquence de contrôle comme résolution temporelle.
5959

6060
Je recommande toujours d’utiliser **k** ou **a** aux deux positions :
61+
6162
- À gauche de la variable, et aussi
6263
- à droite, juste après le opcode.
6364

@@ -70,7 +71,7 @@ Vous en apprendre plus sur _k-rate_ dans le prochain tutoriel.
7071

7172
## Exemple
7273

73-
Appuyez sur le bouton "Play". Vous entendrez un son dont la hauteur descend.
74+
Appuyez sur le bouton "Play". Vous entendrez un son dont la hauteur descend.
7475
Pouvez-vous voir comment la ligne mobile est introduite dans l’oscillateur ?
7576

7677
```
@@ -102,7 +103,7 @@ i "Bonjour" 0 2
102103

103104
Si vous examinez le code de notre instrument, vous constaterez qu’il existe un schéma commun :
104105

105-
![Input output insertions](../resources/images/01-GS-02-c.png)
106+
![Input output insertions](../resources/images/01-GS-02-c.png)
106107

107108
- La première ligne produit un signal et le stocke dans la variable _kFreq_. Cette variable est ensuite utilisée comme entrée dans la seconde ligne.
108109

@@ -123,6 +124,7 @@ Comme vous pouvez le voir, ces trois paires de balises sont englobées entre une
123124
```
124125
<CsoundSynthesizer>...</CsoundSynthesizer>
125126
```
127+
126128
Cette dernière paire de balises définit les limites d’écriture pour le programme Csound. En d’autre termes : Ce que nous écrivons hors de ces limites est ignoré par Csound.
127129

128130
## Essayez-le vous-même
@@ -179,7 +181,7 @@ endin
179181

180182
Si vous exécutez ce code, vous entendrez que `line` comporte une importante différence par rapport à `linseg` : il ne s’arrête pas à la valeur-cible, mais continue son mouvement :
181183

182-
![line vs linseg](../resources/images/01-GS-02-d.png)
184+
![line vs linseg](../resources/images/01-GS-02-d.png)
183185

184186
Les cas d’utilisation de `line` ne sont pas courants. Je recommande donc toujours d’utiliser `linseg`, sauf exception.
185187

@@ -251,7 +253,6 @@ aSine = poscil:a(0.2,aFreq)
251253
outall(aSine)
252254
```
253255

254-
255256
Un simple avis :
256257

257258
- Utilisez toujours _a-rate_ quand ça améliore le son.

0 commit comments

Comments
 (0)