You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: book/15-e-GS-fr-01.md
+32-6Lines changed: 32 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,7 @@
1
1
# 01 Bonjour Csound
2
2
3
3
## Ce que vous apprendrez dans ce tutoriel
4
+
4
5
- Comment créer et émettre un son sinusoïdal
5
6
- Que sont les **opcodes** dans Csound
6
7
- Quelle est la signification de l’**audio rate / fréquence d’échantillonnage** dans Csound
@@ -9,32 +10,35 @@
9
10
- Qu’est-ce qu’une **partition/score** Csound
10
11
11
12
## Qu’est-ce qu’un oscillateur sinusoïdal / sine oscillator
13
+
12
14
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 :
Pour produire une onde sinusoïdale, Csound utilise un oscillateur. Un oscillateur nécessite certaines entrées pour fonctionner :
19
+
19
20
1. Une amplitude maximum de sortie. Ce qui résultera en un son plus ou moins fort.
20
21
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.
21
22
22
23
## Un oscillateur sinusoïdal dans Csound : Opcode et Arguments
24
+
23
25
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_.
24
26
25
27
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_.
26
28
27
29
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
+
28
31
- Le premier argument est le nombre `0.2`.
29
32
- Le second argument est le nombre `400`.
30
33
31
34
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.
32
35
33
36
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.
35
38
36
39
## 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).
38
42
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.
39
43
40
44
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)
46
50
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.
47
51
48
52
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
+
49
54
```
50
55
outall(aSine)
51
56
```
@@ -54,7 +59,7 @@ Notez que le signal _aSine_ est d’abord la sortie de l’oscillateur, puis dev
54
59
55
60
Nous pouvons dessiner le flux de ce programme comme ceci :
56
61
57
-
{width=80%}
62
+
{width=80%}
58
63
59
64
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_.
60
65
@@ -63,11 +68,14 @@ Sur le côté gauche, vous voyez la chaine entre les entrées, l’opcode et la
63
68
À 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).
64
69
65
70
## Votre premier instrument Csound
71
+
66
72
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
+
67
74
-`instr` à son début
68
75
- et `endin` à sa fin.
69
76
70
77
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
+
71
79
```
72
80
instr Hello
73
81
aSine = poscil:a(0.2,400)
@@ -76,6 +84,7 @@ endin
76
84
```
77
85
78
86
### Exemple
87
+
79
88
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.
80
89
81
90
Regardez le code de l’exemple. Pouvez-vous repérer le code de l’instrument ?
@@ -107,18 +116,23 @@ i "Bonjour" 0 2
107
116
</CsScore>
108
117
</CsoundSynthesizer>
109
118
```
119
+
110
120
#### La partition / score Csound
111
121
112
122
En bas de notre exemple de code, vous voyez ceci :
123
+
113
124
```
114
125
<CsScore>
115
126
i "Bonjour" 0 2
116
127
</CsScore>
117
128
```
129
+
118
130
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
+
119
132
```
120
133
i "Bonjour" 0 2
121
134
```
135
+
122
136
Chaque colonne (champ de paramètre / parameter field) spécifie une certaine information :
123
137
124
138
-`"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
142
156
## Opcodes, Mots-Clés et termes que vous avez appris dans ce tutoriel
143
157
144
158
### Opcodes
159
+
145
160
-`poscil:a(Amplitude,Frequence)` : oscillateur au taux audio, avec entrées d’amplitude et de fréquence.
146
161
-`outall(aSignal)` : envoie _aSignal_ vers les canaux de sortie physiques.
147
162
148
163
### Mots-clés
164
+
149
165
-`instr ... endin` sont les mots-clés qui commencent et finissent une définition d’instrument.
150
166
151
167
### Termes
168
+
152
169
- Un signal à la _fréquence audio / audio rate_ ou _a-rate_ est mis à jour à chaque sample/échantillon.
153
170
154
171
## Avançons…
172
+
155
173
Avec le tutoriel suivant : [02_Bonjour Fréquences](15-f-GS-fr-02.md)
156
174
157
175
## 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
175
193
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.
176
194
177
195
### Deux façons d’écrire du code dans Csound : la façon Traditionnelle, et la façon fonctionnelle
196
+
178
197
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
+
179
199
```
180
200
aSine poscil 0.2, 400
181
201
outall aSine
182
202
```
203
+
183
204
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
+
184
206
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`.
185
207
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.
186
208
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.
187
209
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.
188
210
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.
190
213
191
214
## Au sujet de ces tutoriels
215
+
192
216
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.
193
217
194
218
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.
195
219
196
220
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
+
197
222
```
198
223
if 4+3 == 7 then
199
224
"Écrivez ce Tutoriel!\n"
200
225
else
201
226
8!
202
227
endif
203
228
```
229
+
204
230
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.
205
231
206
232
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à…".
Copy file name to clipboardExpand all lines: book/15-f-GS-fr-02.md
+11-10Lines changed: 11 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,9 +9,9 @@
9
9
10
10
- Comment un **document .csd** Csound est structuré :
11
11
12
-
- Que sont les **CsOptions** et
12
+
- Que sont les **CsOptions** et
13
13
14
-
- Qu’est-ce que la section **CsInstruments** ou **orchestra**.
14
+
- Qu’est-ce que la section **CsInstruments** ou **orchestra**.
15
15
16
16
## Une ligne pour la fréquence
17
17
@@ -27,8 +27,7 @@ Le cas le plus simple de ce genre de mouvement est une ligne. Nous avons besoin
27
27
28
28
Voici une ligne qui se déplace de 500 à 400 en 0.5 secondes, et qui reste à 400 pendant 1.5 secondes :
29
29
30
-

31
-
30
+

32
31
33
32
Note : Acoustiquement, cette façon d’appliquer un _glissando_ est discutable. Nous en parlerons dans le [Tutoriel 05](15-i-GS-fr-05.md).
34
33
@@ -39,9 +38,11 @@ Voici une ligne qui se déplace de 500 à 400 en 0.5 secondes, et qui reste à
39
38
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.
40
39
41
40
Voici le code Csound pour ce mouvement linéaire :
41
+
42
42
```
43
43
kFreq = linseg:k(500, 0.5, 400)
44
44
```
45
+
45
46
## Signal k-rate (à la fréquence de contrôle)
46
47
47
48
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
50
51
51
52
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**.
52
53
53
-

54
-
54
+

55
55
56
56
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_.
57
57
58
58
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.
59
59
60
60
Je recommande toujours d’utiliser **k** ou **a** aux deux positions :
61
+
61
62
- À gauche de la variable, et aussi
62
63
- à droite, juste après le opcode.
63
64
@@ -70,7 +71,7 @@ Vous en apprendre plus sur _k-rate_ dans le prochain tutoriel.
70
71
71
72
## Exemple
72
73
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.
74
75
Pouvez-vous voir comment la ligne mobile est introduite dans l’oscillateur ?
75
76
76
77
```
@@ -102,7 +103,7 @@ i "Bonjour" 0 2
102
103
103
104
Si vous examinez le code de notre instrument, vous constaterez qu’il existe un schéma commun :
- 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.
108
109
@@ -123,6 +124,7 @@ Comme vous pouvez le voir, ces trois paires de balises sont englobées entre une
123
124
```
124
125
<CsoundSynthesizer>...</CsoundSynthesizer>
125
126
```
127
+
126
128
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.
127
129
128
130
## Essayez-le vous-même
@@ -179,7 +181,7 @@ endin
179
181
180
182
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 :
181
183
182
-

184
+

183
185
184
186
Les cas d’utilisation de `line` ne sont pas courants. Je recommande donc toujours d’utiliser `linseg`, sauf exception.
185
187
@@ -251,7 +253,6 @@ aSine = poscil:a(0.2,aFreq)
251
253
outall(aSine)
252
254
```
253
255
254
-
255
256
Un simple avis :
256
257
257
258
- Utilisez toujours _a-rate_ quand ça améliore le son.
0 commit comments