Fonds de fonds Notes de travail
0/ Le principe Il s’agit de « fabriquer » des bruits de fond à partir de ceux de la Cité du cinéma. Ce doit être une composition sonore « générative » à deux niveaux : parce ses « mouvements » seront générés par le programme à partir d’enregistrements sonores et parce qu’à chacun de ses sons seront attribués des « comportements » (parmi 4 possibles).
1/ Le cadre général La composition se développera selon des « scènes » correspondant à différents lieux de la Cité du cinéma : - la nef (N), - le patio de l’ENSLL (P), - l’ENSLL (E), - le RIE (R). L’ordre sera toujours le même : N, P, E, P, N, R, N, P, E, P, N, R, etc.
2/ Les scènes La nef (N), l’ENSLL (E), le RIE (R) sont composées de la même manière et durent chacune à peu près 10 minutes (variable duree_scene (x) (ou x est le nom (la lettre) de la scène) que je devrais pouvoir régler). La scène du patio (P) dure à peu près 3 minutes. On passe d’une scène à l’autre par fondu enchaîné de 30 secondes (variable transition_scene à contrôler).
3/ Les couches Les scènes N, E et R sont composées de 3 couches : - 0) le « silence » de fond, - 1) les « bruits de fond », - 2) les bruits. La scène P n’est faite que d’un silence. Le principe est que le silence est en-dessous, que des bruits de fond peuvent se développer par dessus, et que les bruits ne peuvent se développer que dès lors que le fond des bruits de fond est assez solide. Autrement dit : - on entend (à peine) d’abord le silence, - puis on entend les bruits de fond et il y en a de plus en plus et de plus en plus présents, - puis on entend des bruits qui passent au premier plan (le volume est alors élevé), - ils restent un moment au maximum d’intensité puis baissent, - puis ce sont les bruits de fond qui baissent, - et il ne reste que le silence, qui se fond dans le suivant et la boucle reprend. Exemple pour la scène N, E ou R. Rose = silence Bleu clair = bruit de fond Bleu foncé = bruit
4/ Les silences (0) Ce sont des captations des ambiances des lieus sans bruit particulier. Ils durent le temps de la scène et sont choisis dans le répertoire « silence » de chaque scène. Les silences sont tout le temps présent (mais leur volume sera très bas) et on passe d’un silence à l’autre quand on passe d’une scène à l’autre (par fondu enchaîné de 30 secondes, donc).
5/ Les bruits de fond (1) et les bruits (2) Ils dépendent de chaque scène et sont classés dans des répertoires. Ces sons sont toujours des bruits de fond (1), et certains sont aussi des bruits (2). Il y a 3 répertoires dans la nef (N) : - souffles (1 et 2 ; comportement : souffles), - claquements (1 et 2 ; comportement : claquements), - ambiances (1 ; comportement : ambiances). Il y a 3 répertoires dans l’ENSLL (E) : - souffles (1 et 2 ; comportement : souffles), - buzzs (1 et 2 ; comportement : buzzs). Il y a 3 répertoires dans le RIE (R) : - frigos (1 et 2 ; comportement : souffles), - buzzs (1 et 2 ; comportement : buzzs), - ambiances (1 ; comportement : ambiances). Puisqu’il n’y a que du silence dans le patio (P), il n’y a ni bruit de fond, ni bruit. Comme indiqué plus haut, il faut un minimum de bruits de fond pour que des bruits apparaissent. Bruits de fond et bruits sont issus de répertoires distincts, mais ils se renvoient l’un à l’autre (par exemple, il y a un répertoire N_souffles_1 (bruits de fond) et un répertoire N_souffles_2 (bruits)).
Bruits de fond et bruits ont des « comportements » (parmi 4 possibles (souffles, buzzs, claquements, ambiances) qui seront détaillés plus loin).
6/ Fonctionnement général : le potentiel, l’entropie, hasards. A/ Le potentiel est ce qui oriente les développements des scènes N, E et R. C’est la propension de la scène à évoluer en favorisant ou en défavorisant l’apparition de bruits de fond et de bruits. Le potentiel a une amplitude de 0 à 100. C’est une variable dont la définition est { potentiel = valeur - entropie } avec un mini de 0 et un max de 100. Par défaut, au début de chaque scène, { valeur = 0 & entropie = 0 => potentiel = 0 } La variable valeur varie de 2 façons, selon le temps et selon ce qui se passe. Cela correspond à un découpage temporel de la scène, en 5 moments : - début : 1/10e (variable duree_debut_scene(X) : fraction à contrôler), - montée : 3/10e (variable duree_montee_scene(X) : fraction à contrôler), - haut : 2/10e (variable duree_haut_scene(X) : fraction à contrôler), - descente : 3/10e (variable duree_descente_scene(X) : fraction à contrôler), - fin : 1/10e (variable duree_fin_scene(X) : fraction à contrôler). - Pendant le début, le potentiel reste à 0. - Pendant la montée, la valeur augmente linéairement de 0 à 100 par pas de 1, donc 100 fois dans 3/10e de 10 minutes, c’est-à-dire de 1 toutes les 1,8 secondes (si mes calculs sont bons ; mais c’est à mettre dans une formule puisque la durée de la montée doit pouvoir être réglée). - Ensuite la valeur reste à 100 en position « haute ». - Puis elle descend linéairement de 100 à 0 par pas de 1. - Et à la fin elle est égale à 0. Ça donne à peur près ça :
valeur Mais la variable valeur est aussi sensible à l‘apparition des bruits de fond et des bruits (voir chapitres suivants).
B/ L’entropie est ce qui tend à réduire le potentiel. Elle augmente avec la saturation sonore. C/ Il y a toujours du hasard pour éviter tout déterminisme.
7/ Apparition des bruits de fond L’apparition des bruits de fond est liée au potentiel et aux hasards. Cela se passe par : - une fréquence d’appels à apparition (frequence_appel_apparition(bdf )), - des réponses positives ou négatives à ces appels (ça marche d’une manière spéciale pour les claquements), - un développement du son ou sa disparition (niveau(bdf )). Voici les règles (à vérifier si ce type de calcul fonctionne) : - { frequence_appel_apparition = [1 x (1,5 - random(1))] + (3/potentiel) } secondes. L’appel pioche un son au hasard dans un des répertoires de la scène (répertoire choisi au hasard). - Le son est joué si { potentiel > random(150) } ; dans ce cas : { valeur = valeur+1 } (On ne peut pas jouer plus de 5 bruits de fond en même temps (variable max_bdf à contrôler) ; on ne peut pas jouer deux fois le même bruit de fond en même temps.)
8/ Niveau des bruits de fond Le niveau(bdf ) est une valeur qui régule le comportement des bruits de fond. Son utilité dépend donc de chacun des trois comportements : il régule aussi bien le volume, la spatialisation et le rythme des bruits de fond. Le niveau(bdf ) varie de 0 à 100. Tout d’abord, le bruit de fond se développe pendant une dizaine de secondes (variable à contrôler debut_bdf) : le niveau passe linéairement de 0 à 20. -> Tous les début des sons (fade in et autre) sont faits dans les fichiers sons directement. À partir de là, il a sa propre frequence_appel_apparition(niveau(bdf )) (même formule qu’au dessus) qui permet de mettre à jour son niveau selon la formule suivante (si elle marche) : { niveau(bdf ) = niveau(bdf ) + {[(100 - niveau(bdf ))/(100 - potentiel)] x [0,5 - random(1) + (potentiel / 100)]} } Ensuite, si niveau(bdf) < 10, le son disparaît linéairement en une dizaine de secondes (variable à contrôler fin_bdf). les fins des bruits de fond dépendent aussi des comportements.
9/ Niveau général Jusqu’à un certain point, plus il y a de bruits de fond, plus il y a de niveau(bdf ), plus le potentiel augmente. Il faudrait créer une variable niveau_general qui serait la somme des niveaux, tant des bruits de fond que des bruits (voir plus loin). L’idée est que chaque niveau a un numéro et qu’on compte tous les bruits de fond, y compris ceux qui sont apparus mais qui ont ensuite disparu (si c’est pas trop compliqué à faire). { niveau_general = somme (niveau(x)) } Si niveau_general > cap_bruits, alors on va pouvoir appeler les bruits. cap_bruits est une valeur à contrôler (elle devrait valoir à peu près 250). En même temps, on augmente le potentiel : { valeur = valeur + [(niveau_general / saturation) x 10] }
10/ Saturation Ici, la saturation est une valeur à contrôler : c’est la limite à ne pas dépasser, à partir de laquelle toute augmentation de niveau réduit le potentiel d’apparition de nouveaux bruits ou bruits de fond et accélère leur disparition. Cette valeur devrait valoir à peu près 600 (il faudrait pouvoir la régler)… Dans ce cas, la formule sera du genre : { si niveau_general > saturation, alors entropie = niveau_general - saturation Et puisque { potentiel = valeur - entropie }, le potentiel va diminuer et les sons vont avoir tendance à disparaître…
11/ Les bruits Les bruits ont globalement le même type de comportement que les bruits de fond. La différence est qu’ils sont piochés dans un seul répertoire bruits, choisi au hasard pour le premier bruit, et tous les autres viendront du même répertoire. Ils apparaissent de la même façon : - { frequence_appel_apparition = [1 x (1,5 - random(1))] + (3/potentiel) } secondes. - Le son est joué si { potentiel > random(150) } ; dans ce cas : { valeur = valeur+2 } (On ne peut pas jouer plus de 3 bruits en même temps (variable max_bruits à contrôler) ; on ne peut pas jouer deux fois le même bruit en même temps (sauf pour les claquements). Il y a d’autres règles spécifiées dans les 2.) Les niveaux fonctionnent à peu près de la même façon, si ce n’est que les bruits apparaissent en une quinzaine de secondes (variable à contrôler debut_bruit). À partir de là, il a sa propre frequence_appel_apparition(niveau(bruit)) qui permet de mettre à jour son niveau selon la formule suivante (si elle marche) : { niveau(bruit) = niveau(bruit) + {[(100 - niveau(bruit))/(100 - potentiel)] x [1 - random(1) + (potentiel / 100)]} } Ensuite, si niveau(bruit) < 10, le son disparaît linéairement en une dizaine de secondes (variable à contrôler fin_bruit) ; les fins des bruits dépendent aussi des comportements. Le max de niveau(bruit) est 100. Les niveau(bruit) s’ajoutent au niveau_general.
12/ Les comportements C’est le gros morceau, ce qui fait que tel type de son se développe de telle façon, avec tel(s) volume(s) et telles(s) spatialisation(s). C’est aussi ce qui détermine comment apparaissent les sons et comment ils disparaissent. Il y a en 4 types.
A/ souffles
Les sons ayant ce comportement sont ceux qui ont des fréquences très étendues, ce qui les fait ressembler à des bruits indistincts ; ce sont surtout des aérations, des mouvements d’air, voire certaines reverb très marquées. Ce sont des sons sujets à fluctuation, tant pour leur volume que pour leur spatialisation. Ces fluctuations se font à chaque frequence_appel_apparition(niveau). - Leur volume suit les mouvement de leur niveau, avec une petite dose de hasard : { volume = niveau x [1 + (random(0,4) - 0,2)] } - Leur spatialisation suit les mouvement de leur niveau : quand celui-ci est bas, on les entend partout uniformément ; quand il est haut, on les entend plutôt dans un endroit (par un rapport maximum de 1 à 3 (valeur diff_max_HP_souffles à régler) entre les HP). { spatialisation = 3 x (niveau / 100) ; vol_HPprincipal = volume x √spatialisation ; vol_HPsecondaires = volume ; vol_HPderniers = volume / √spatialisation ; } Cela fera varier les volumes de ces sons dans chacun des HP, en partant d’un extrême dans un des HP choisi au hasard, en réduisant l’écart de moitié dans les HP à côté, et encore de moitié dans les autres HP. S’il existe d’autres modes de spatialisation plus simples à mettre en œuvre en gardant l’esprit, pas de souci. Quelques exemples pour être plus clair : HP 3 - rapport 1/3 - volume 50
HP2 50
HP 2 rapport 1/2 - volume 80
HP2 80
HP3 86,5
HP3 112,8
SUB
HP1 28,9
HP4 50
HP5 28,9
SUB
HP1 56,7
HP4 80
HP5 56,7
Bon, il faudrait aussi que le son puisse se déplacer d’une enceinte à l’autre en gardant une valeur de spatialisation proche ; mon truc fait un peu usine à gaz, je suis sûr que tu trouveras une solution plus simple… - En ce qui concerne les débuts et fins du son, ils se font en fade in (c’est dans le fichier son) et fade out (à gérer par le programme, dans une durée déterminée).
- Autre spécificité (si possible, mais je sais que j’en demande beaucoup !) : il y a au maximum 3 souffles (bruits de fond ou bruits) ;
B/ buzzs
Les buzzs sont des sons continus, comme les souffles, mais leur fréquence est plus ramassée et ils sont plutôt dans les aigus. Ils ne sont pas homogène mais naissent dans un endroit et se répandent dans l’espace progressivement. - Leur volume fluctue avec la même formule que pour les souffles. - La spatialisation part d’un HP et se répand sur tous les autres, par contiguité (exemples : 3, 2+3+4, 1+2+3+4+5 ou 2, 1+2+3, 1+2+3+4, 1+2+3+4+5 ou 1, 1+2, 1+2+3, 1+2+3+4, 1+2+3+4+5) ; une fois le son lancé, le point d’origine ne change pas. La règle pourrait être à peu près ça : niveau < 30 : une enceinte niveau < 50 : ajout progressif de la deuxième enceinte niveau < 75 : ajout progressif de la troisième enceinte niveau < 85 : ajout progressif de la quatrième enceinte niveau > 85 : ajout progressif de la cinquième enceinte Toutes les valeur de seuil sont des variables à gérer. - Les sons entrent en fade in (c’est dans le fichier son) ; en revanche, ils s’arrêtent cut en superposant au son (par fondu enchaîné d’une durée à déterminer, la même pour tous les fichiers) le fichier de fin de son correspondant. - Les nombres de buzzs maximum (bruits de fond ou bruits) suivent les règles générales.
C/ claquements
Ce sont les sons qui m’intéressent le plus et qui correspondent à des phénomènes chaotiques. Ils se développent en fonction du potentiel, mais aussi en fonction d’une énergie accumulée ou libérée. Ce sont des sons très courts qui se développent sur un bruit de fond spécifique qui s’enclenche avec le premier claquement et s’arrête à la fin de la scène (à vérifier). - Leur volume dépend du potentiel et est fixé lorsque le son est lancé : { volume = potentiel x [1 + (random(0,4) - 0,2)] } - Leur spatialisation n’est que sur une enceinte, choisie au hasard parmi les 5 possibles (random simple). - C’est leur apparition qui est particulière, de par leur énergie : moins les sons sont « libérés », plus l’énergie s’accumule et augmente le potentiel ; plus les sons sont « libérés », plus l’énergie diminue et réduit le potentiel. Ça donne une formule du genre : . si le son est joué : { valeur = valeur+1 } & { énergie = énergie-2 } ; . si le son n’est pas joué { énergie = énergie+1 }. Du coup, c’est une variable spéciale qui est testée : potentiel_claquement = potentiel + énergie
D/ ambiances
Ces sont ne sont que des bruits de fond, très divers. - Ces sons, une fois enclenchés, vont jusqu’à leur terme. Ils ont leurs fade in et fade out intégrés. - Leur volume dépend du potentiel et est fixé lorsque le son est lancé : { volume = potentiel x [1 + (random(0,4) - 0,2)] } - La spatialisation est aussi intégrée dans le fichier (soit dans le même fichier, soit dans plusieurs fichiers différents). - Seule spécificité : les ambiances dépendent du potentiel ; il y a des sous répertoires qui font que : . si potentiel < 15 : on appelle des sons issus du répertoire ambiances(x)_1 ; . si potentiel > 15 et < 30 : on appelle des sons issus du répertoire ambiances(x)_2 ; . si potentiel > 30 et < 50 : on appelle des sons issus du répertoire ambiances(x)_3 ; . si potentiel > 50 : on n’appelle plus d’ambiances. - Les nombres d’ambiances maximum (bruits de fond ou bruits) suivent les règles générales.