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
+15-10Lines changed: 15 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,19 +9,17 @@
9
9
- Qu’est-ce qu’une **partition/score** Csound
10
10
11
11
## Qu’est-ce qu’un oscillateur sinusoïdal / sine oscillator
12
-
13
12
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 :
20
19
1. Une amplitude maximum de sortie. Ce qui résultera en un son plus ou moins fort.
21
20
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.
22
21
23
22
## Un oscillateur sinusoïdal dans Csound : Opcode et Arguments
24
-
25
23
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_.
26
24
27
25
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_.
@@ -33,7 +31,7 @@ Les entrées d’un opcode sont appelées **arguments** et sont écrites entre p
33
31
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.
34
32
35
33
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).
36
-
>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.
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
35
38
36
## Le flux d’un signal et son code
39
37
Nous créons maintenant une onde sinusoïdale d’une amplitude de 0.2 et de 400 cycles par seconde (Hz).
@@ -56,8 +54,7 @@ Notez que le signal _aSine_ est d’abord la sortie de l’oscillateur, puis dev
56
54
57
55
Nous pouvons dessiner le flux de ce programme comme ceci :
_Flux de signal et code Csound pour un oscillateur sinusoïdal et une sortie._
57
+
{width=80%}
61
58
62
59
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_.
63
60
@@ -66,7 +63,6 @@ Sur le côté gauche, vous voyez la chaine entre les entrées, l’opcode et la
66
63
À 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).
67
64
68
65
## Votre premier instrument Csound
69
-
70
66
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é :
71
67
-`instr` à son début
72
68
- et `endin` à sa fin.
@@ -124,15 +120,23 @@ C’est la section **Partition / Score** du fichier .csd. Elle commence par la b
124
120
i "Bonjour" 0 2
125
121
```
126
122
Chaque colonne (champ de paramètre / parameter field) spécifie une certaine information :
123
+
127
124
-`"Bonjour"` : L’instrument auquel cette ligne de partition se réfère.
125
+
128
126
-`0` : L’heure de départ de cet instrument : `0` (= départ immédiat).
127
+
129
128
-`2` : La durée du son venant de l’instrument : `2` (secondes).
130
129
131
130
#### Essayez vous-même
131
+
132
132
(Vous pouvez éditer l’exemple juste en tapant à l’intérieur)
133
+
133
134
- Changez la durée de l’instrument
135
+
134
136
- Changez l’heure de départ de l’instrument
137
+
135
138
- Changez la fréquence de l’oscillateur
139
+
136
140
- Changez l’amplitude de l’oscillateur
137
141
138
142
## Opcodes, Mots-Clés et termes que vous avez appris dans ce tutoriel
@@ -152,7 +156,8 @@ Avec le tutoriel suivant : [02_Bonjour Fréquences](15-f-GS-fr-02.md)
152
156
153
157
## Ou lisez quelques informations supplémentaires ici
154
158
155
-
### Pourquoi le sinus est-il « le son le plus élémentaire au monde » ?
159
+
### Pourquoi l’onde sinusoïdale est-elle « le son le plus élémentaire au monde » ?
160
+
156
161
Pour être honnête, j'aime les sons sinusoïdaux. Je sais que beaucoup de gens les trouvent ennuyeux. J'aime leur simplicité, alors contre tous les bons conseils, je vais consacrer les dix premiers tutoriels uniquement aux sons sinusoïdaux. Désolé de vous en faire subir les conséquences...
157
162
158
163
Mais revenons à la question : qu'y a-t-il d'élémentaire dans les ondes sinusoïdales ?
@@ -181,7 +186,7 @@ Vous pouvez sans problème continuer d’écrire le code Csound ainsi. Les raiso
181
186
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.
182
187
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.
183
188
184
-
> NOTE DU TRADUCTEUR pour les francophones : Sauf dans le 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.
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.
185
190
186
191
## Au sujet de ces tutoriels
187
192
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.
Copy file name to clipboardExpand all lines: book/15-f-GS-fr-02.md
+57-14Lines changed: 57 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,48 +1,57 @@
1
1
# 02 Bonjour Fréquences
2
2
3
3
## Ce que vous apprendrez dans ce tutoriel
4
+
4
5
- Comment créer un glissement/sliding de fréquence, ou **glissando**.
6
+
5
7
- Ce que **k-rate** ou **control rate / fréquence de contrôle** signifient, et
6
8
- que sont les **k-variables** dans Csound.
9
+
7
10
- Comment un **document .csd** Csound est structuré :
11
+
8
12
- Que sont les **CsOptions** et
13
+
9
14
- Qu’est-ce que la section **CsInstruments** ou **orchestra**.
10
15
11
16
## Une ligne pour la fréquence
12
17
13
18
Dans les sons naturels, la fréquence est rarement fixe. Habituellement, par exemple quand nous parlons, la hauteur de notre voix varie constamment à l’intérieur d’une certaine plage.
14
19
15
20
Le cas le plus simple de ce genre de mouvement est une ligne. Nous avons besoin de trois valeurs pour construire cette ligne :
21
+
16
22
1. Une valeur de commencement.
23
+
17
24
2. Une durée pour nous déplacer de cette valeur vers une valeur cible.
25
+
18
26
3. La valeur-cible elle-même.
19
27
20
28
Voici une ligne qui se déplace de 500 à 400 en 0.5 secondes, et qui reste à 400 pendant 1.5 secondes :
21
29
22
-

23
-
_Ligne de fréquence._
30
+

31
+
24
32
25
-
>Note : Acoustiquement, cette façon d’appliquer un _glissando_ est discutable. Nous en parlerons dans le [Tutoriel 05](15-i-GS-fr-05.md).
33
+
Note : Acoustiquement, cette façon d’appliquer un _glissando_ est discutable. Nous en parlerons dans le [Tutoriel 05](15-i-GS-fr-05.md).
26
34
27
-
>Note 2 : Ne devrions-nous pas dire : "Voici une ligne qui se déplace depuis 500 Hz jusqu’à 400 Hz, en 0.5 secondes", plutôt que "Voici une ligne qui se déplace depuis 500 jusqu’à 400 en 0.5 secondes" ? Non. La ligne produit des nombres. Ces nombres peuvent être utilisés pour des fréquences, mais peuvent avoir une signification différente dans un autre contexte.
35
+
Note 2 : Ne devrions-nous pas dire : "Voici une ligne qui se déplace depuis 500 Hz jusqu’à 400 Hz, en 0.5 secondes", plutôt que "Voici une ligne qui se déplace depuis 500 jusqu’à 400 en 0.5 secondes" ? Non. La ligne produit des nombres. Ces nombres peuvent être utilisés pour des fréquences, mais peuvent avoir une signification différente dans un autre contexte.
28
36
29
37
## Une ligne Dessinée avec l’opcode 'linseg'
30
38
31
-
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.
39
+
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.
32
40
33
41
Voici le code Csound pour ce mouvement linéaire :
34
42
```
35
43
kFreq = linseg:k(500, 0.5, 400)
36
44
```
37
-
## Signal k-rate, à la fréquence de contrôle
45
+
## Signal k-rate (à la fréquence de contrôle)
46
+
38
47
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 ?
39
48
40
49
Le temps fondamental est donné par la **sample rate / fréquence d’échantillonnage**. Elle détermine le nombre d’échantillons/samples que nous avons par seconde. Nous avons vu le signal _aSine_ dans le premier tutoriel, dont les valeurs changent à la **fréquence d’échantillonnage / audio rate** ; calculant une nouvelle valeur à chaque sample/échantillon.
41
50
42
51
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**.
43
52
44
-

45
-
_audio rate vs control rate_
53
+

54
+
46
55
47
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_.
48
57
@@ -93,10 +102,10 @@ i "Bonjour" 0 2
93
102
94
103
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
+
100
109
- La seconde ligne produit un signal et le stocke dans la variable _aSine_. Cette variable est ensuite utilisée comme entrée dans la troisième ligne.
101
110
102
111
## La structure d’un document Csound (.csd)
@@ -107,28 +116,41 @@ Le document Csound complet consiste en trois parties :
107
116
108
117
2. Entre les balises \<CsInstruments> et \</CsInstruments>. C’est le lieu où sont placés tous les instruments. Le code Csound réside à cet emplacement, qu’on appelle également "Orchestra".
109
118
110
-
2. Entre les balises \<CsScore> et \</CsScore>, partie qui a été discutée dans la section précédente.
119
+
3. Entre les balises \<CsScore> et \</CsScore>, partie qui a été discutée dans la section précédente.
111
120
112
121
Comme vous pouvez le voir, ces trois paires de balises sont englobées entre une autre paire de balises :
122
+
113
123
```
114
124
<CsoundSynthesizer>...</CsoundSynthesizer>
115
125
```
116
126
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.
117
127
118
128
## Essayez-le vous-même
129
+
119
130
- Rendez la ligne de fréquences ascendante plutôt que descendante.
131
+
120
132
- Utilisez `linseg` pour créer une fréquence constante de 400 ou de 500 Hz.
133
+
121
134
- Rendez la durée de la rampe du glissando plus longue ou plus courte.
135
+
122
136
- Ajoutez un autre segment en ajoutant une valeur supplémentaire de durée, et une valeur supplémentaire pour la seconde valeur-cible.
137
+
123
138
- Restaurez les arguments originaux de linseg. Puis remplacez `linseg` par `line`, et écoutez la différence.
124
139
125
140
## Opcodes, balises et termes que vous avez appris dans ce tutoriel
141
+
126
142
### Opcodes
143
+
127
144
-`linseg:k(Value1,Duration1,Value2,Duration2,…)` génère des segments de lignes droites.
145
+
128
146
### Balises
147
+
129
148
-\<CsoundSynthesizer>...\</CsoundSynthesizer> déterminent le début et la fin du fichier Csound.
149
+
130
150
-\<CsOptions>...\</CsOptions> déterminent le début et la fin des [Options Csound]().
151
+
131
152
-\<CsInstruments>... \</CsInstruments> déterminent le début et la fin de l’espace réservé à la définition des instruments Csound.
153
+
132
154
-\<CsScore>...\</CsScore> déterminent le début et la fin de la partition Csound.
133
155
134
156
### Termes
@@ -146,6 +168,7 @@ Avec le tutoriel suivant : [03 Bonjour Amplitude](15-g-GS-fr-03.md)
146
168
Csound a un opcode `line` que nous pouvons utiliser à la place de `linseg`.
147
169
148
170
Nous pouvons remplacer `linseg` dans notre code par `line` :
171
+
149
172
```
150
173
instr Bonjour
151
174
kFreq = line:k(500,0.5,400)
@@ -156,63 +179,83 @@ endin
156
179
157
180
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 :
158
181
159
-

160
-
_line vs linseg_
182
+

161
183
162
184
Les cas d’utilisation de `line` ne sont pas courants. Je recommande donc toujours d’utiliser `linseg`, sauf exception.
163
185
164
186
### Conventions de codage
187
+
165
188
Quand vous appuyez sur le bouton _Run/Exécuter_, Csound "lit" le code que vous avez écrit. Peut-être avez-vous déjà expérimenté avoir écrit quelque chose qui aboutit à une erreur, parce que quelque chose est "illégal".
166
189
167
190
Par exemple, ce code :
191
+
168
192
```
169
193
kFreq = linseg:k(500 0.5 400)
170
194
```
195
+
171
196
Qu’est-ce qui est illégal ici ? Nous avons séparé les trois argument pour `linseg` avec des espaces plutôt que des virgules. Csound attend des virgules, et s’il n’y en a pas, il retourne une erreur de syntaxe, et le code ne peut pas être compilé :
197
+
172
198
```
173
199
error: syntax error, unexpected NUMBER_TOKEN,
174
200
expecting ',' or ')' (token "0.5")
175
201
```
202
+
176
203
Ceci n’est pas une convention. C’est une syntaxe que nous **devons** respecter si nous voulons que notre code soit compilé et exécuté par Csound.
177
204
178
205
Par contre, dans la syntaxe, il existe de nombreuses façons d’écrire du code d’une manière ou d’une autre.
179
206
180
207
Voyons quelques exemples :
181
208
182
209
1.`kFreq = linseg:k(500,0.5,400)`
210
+
183
211
2.`kFreq=linseg:k(500,0.5,400)`
212
+
184
213
3.`kFreq = linseg:k(500, 0.5, 400)`
214
+
185
215
4.`kFreq = linseg:k(500,.5,400)`
216
+
186
217
5.`kFreq = linseg:k(500, 0.5, 400)`
187
218
188
219
Explications :
220
+
189
221
1. C’est la manière dont j’écris le code ici dans ces tutoriels. Je mets un espace à gauche et à droite du signe `=`, mais je ne mets pas d’espace après la virgule.
222
+
190
223
2. On peut le faire, mais je pense que vous serez d’accord pour dire que cette façon est moins facile à lire.
191
224
3. C’est autant utilisé que la manière (1.), voire plus. Je me souviens que lorsque j’ai lu pour la première fois le tutoriel Python de Guido van Rossum, dans lequel il recommande d’écrire comme dans (1.), je n’ai pas aimé du tout. Il m’a fallu vingt ans pour être d’accord.
225
+
192
226
4. C’est une abréviation commune qui est possible dans Csound et quelques autres langages de programmation : Plutôt qu’écrire `0.5`, on peut juste écrire `.5`. Je l’utilise pour mes programmes, mais je ne l’utiliserai pas dans ces tutoriels car c’est un peu moins clair.
227
+
193
228
5. Vous êtes autorisés à utiliser des tabulations plutôt que des espaces, ainsi que n’importe quelle combinaison des deux, et autant de tabulations ou d’espaces que vous voulez. Mais habituellement, nous ne souhaitons pas qu’une ligne soit plus longue que nécessaire.
194
229
195
-
Une autre convention est d’écrire les mots-clé `instr` et `endin` au début de la ligne, puis le code indenté par deux espaces :
230
+
Une autre convention consiste à écrire les mots-clé `instr` et `endin` au début de la ligne, puis le code indenté par deux espaces :
231
+
196
232
```
197
233
instr Bonjour
198
234
kFreq = linseg:k(500,0.5,400)
199
235
aSine = poscil:a(0.2,kFreq)
200
236
outall(aSine)
201
237
endin
202
238
```
239
+
203
240
La raison de cette convention est à nouveau de formater le code en faveur d’un maximum de clarté. Dans _Csound Book_, nous utilisions un espace, mais je pense que deux espaces sont préférables.
204
241
205
242
Pour résumer : Vous avez de nombreuses différentes options pour écrire du code Csound. Vous pouvez adopter celle que vous voulez, mais il est sage de respecter quelques conventions qui permettent une compréhension optimale. Le but est la lisibilité et la transparence du code.
206
243
207
244
### Quand choisir a-rate ou k-rate ?
245
+
208
246
La principale raison de l’introduction de _k-rate_ est une économie de puissance pour le CPU. C’était essentiel dans les premières années de la musique sur ordinateur. Aujourd’hui c’est différent. Pour des instruments courants en musique électronique, on peut omettre les variable _k-rate_, et n’utiliser que les variables _a-rate_. Dans notre cas, nous pourrions écrire :
247
+
209
248
```
210
249
aFreq = linseg:a(500,0.5,400)
211
250
aSine = poscil:a(0.2,aFreq)
212
251
outall(aSine)
213
252
```
214
253
254
+
215
255
Un simple avis :
256
+
216
257
- Utilisez toujours _a-rate_ quand ça améliore le son.
258
+
217
259
- Utilisez _k-rate_ plutôt que _a-rate_ quand vous voulez économiser de la puissance de calcul au CPU.
260
+
218
261
- Certains opcodes n’acceptent que des entrées _k-rate_, mais pas les entrées _a-rate_. Dans ce cas, vous devez utiliser des variables _k-rate_.
0 commit comments