
Si vous avez déjà visité une salle de cinéma, vous avez probablement entendu
Deep Note , la
marque de commerce du son THX . C'est l'un des premiers sons à être entendus au début des remorques dans les halls certifiés THX. J'ai toujours aimé son crescendo reconnaissable, commençant par un terrible mélange de notes et se terminant par une finale lumineuse et grandiose (
son ). Quel délice pour l'oreille!
Hier (probablement) sans aucune raison je m'intéressais à l'origine de ce son, et j'ai fait quelques recherches. J'ai été profondément touché par son histoire, que je veux partager avec vous. Ensuite, nous continuons - et nous allons créer ce son nous-mêmes, préparer des ciseaux et de la colle!
La meilleure source d'informations sur le son que j'ai pu trouver est, à mon avis, sa composition électro-acoustique complète, publiée dans l'excellent
Blog Music Thing en 2005. Voici le
lien vers l'article .
Quelques faits sur le son:
- Il a été créé par le Dr James Andy Moorer en 1982.
- Un jour dans l'histoire, il a été perdu 4 000 fois par jour, presque toutes les 20 secondes! Citation du Dr Moorer:
«Je voudrais dire que le son du THX est l'œuvre la plus populaire de l'informatique musicale au monde. C'est peut-être vrai ou pas, mais ça a l'air cool! »
- Il est créé sur un ordinateur ASP (Audio Signal Processor) qui peut synthétiser des sons en temps réel.
- Un programme de 20 000 lignes de code C a généré des données pour la lecture sur ASP. Les données générées se composaient de 250 000 lignes qui ont été traitées par ASP.
- Les oscillateurs vocaux utilisent un ton de violoncelle numérisé comme signal. Le Dr Murer rappelle qu'il y avait environ 12 harmoniques dans l'échantillon. ASP pourrait exécuter 30 de ces oscillateurs en temps réel (à titre de comparaison, mon ordinateur portable peut désormais en traiter plus de 1000 sans échecs).
- Le son lui-même est protégé par le droit d'auteur, mais voici le problème: le code du Dr Murer repose sur des générateurs de nombres aléatoires (processus génératif) et chaque fois le son est légèrement différent. Par conséquent, je ne pense pas qu'il soit sûr de dire que le processus lui-même est ou peut être «protégé par le droit d'auteur». Le son lui-même, oui, l'échantillon spécifique est protégé.
- Le son a fait ses débuts dans la bande-annonce de THX "Return of the Jedi" avant sa première en 1983.
- Les caractéristiques génératives du processus sont devenues à un moment donné problématiques. Après la sortie de The Return of the Jedi, l'enregistrement original de Deep Note a été perdu. Le Dr Murer a recréé le travail pour l'entreprise, mais ils se plaignaient constamment qu'il ne ressemble pas à l'original. Finalement, l'enregistrement original a été retrouvé et conservé dans un endroit sûr.
- Dr. Dre a demandé la permission d'utiliser l'échantillon dans sa musique, mais il a été refusé. Il l'a quand même utilisé et a obtenu un procès.
- Dans l'œuvre de Metastaseis de Janis Xenakis (1954), il y a un crescendo d'ouverture très similaire (comme dans d'autres œuvres de divers compositeurs). Mais il commence par un ton unique et se termine par un cluster tonal semi-accordé au lieu d'être complètement consonant, comme dans Deep Note. L'enregistrement sonore de la demande de brevet peut être entendu ici .
Assurez-vous d'écouter le son, car lorsque nous recréerons Deep Note, nous ferons référence à cet enregistrement particulier.
Voici quelques faits techniques / théoriques avant de vous lancer dans la synthèse sonore:
- Mon observation: sur l'entrée originale du site Web de l'Office des brevets, le ton principal est entre D et Eb, et dans les versions plus récentes, la valeur fondamentale est entre E et F. Nous utiliserons la constante D / Eb originale. Les nouvelles options sont généralement plus courtes, sinon erronées. Évidemment, je préfère l'option qui a été déposée auprès de l'office des brevets.
- Selon le Dr Murer (et également confirmé par mes oreilles), le fragment commence avec des oscillateurs accordés sur des fréquences aléatoires entre 200 Hz et 400 Hz. Mais les oscillateurs ne bourdonnent pas seulement - leurs fréquences sont modulées de manière aléatoire, et ils utilisent des filtres de lissage pour atténuer les transitions aléatoires des tons. Cela continue jusqu'au début du crescendo.
- À l'intérieur du crescendo et à la fin du segment sonore, les randomiseurs modulent toujours les fréquences des oscillateurs, de sorte qu'aucun d'entre eux n'est stable à un moment donné. Mais la plage de balayage aléatoire est si étroite qu'elle ajoute simplement un son naturel / choral.
- Le Dr Murer rappelle qu'il y avait environ 12 harmoniques distinctes dans le spectre du son de violoncelle numérisé.
- Pour autant que je sache, les valeurs écrites du générateur (qui ont été utilisées pour obtenir des droits d'auteur) n'ont jamais été publiées. Le Dr Moorer dit qu'il peut les enregistrer si nous obtenons la permission de THX. Mais je pense qu'il n'est pas nécessaire de recréer le son.
- Le son dans la finale (techniquement pas un accord) - à mon oreille, juste l'ajout des octaves du ton fondamental. Ainsi, lors de la reconstruction, nous commençons avec des oscillateurs accordés de façon aléatoire (entre 200 et 400 Hz), effectuons un balayage plus ou moins complexe et terminons en appliquant des octaves à la hauteur entre le D / Eb bas.
Commençons donc. Mon outil de travail ici est SuperCollider. Commençons par un simple échantillon. Je veux utiliser une onde en dents de scie comme source, elle a un spectre riche et harmonique de composants pairs et impairs. Plus tard, je prévois de filtrer les sommets. Voici un extrait de la partie initiale du code:
J'ai choisi 30 oscillateurs pour générer du son, selon les capacités de l'ordinateur ASP, comme l'a dit le Dr Murer. J'ai créé un tableau de 30 fréquences aléatoires entre 200 et 400 Hz, réparties au hasard sur le champ stéréo en utilisant Pan2.ar avec l'argument rrand (-0,5, 0,5), assigné des fréquences aux oscillateurs en dents de scie (30 copies).
Voilà comment ça sonne .
Si vous étudiez les informations du Dr Moorer et / ou écoutez attentivement le fragment original, vous pouvez entendre que les fréquences de l'oscillateur sont décalées de façon aléatoire de haut en bas. Je voudrais ajouter cet effet pour un son plus organique. L'échelle de fréquence est logarithmique, donc aux fréquences plus basses il devrait y avoir des gammes d'oscillation plus étroites qu'aux plus hautes. Cela peut être fait en triant nos fréquences générées aléatoirement avec LFNoise2 (qui génère des valeurs aléatoires interpolées quadratiquement) d'arguments mul dans l'ordre dans notre macro Mix. Et j'ai également ajouté un filtre passe-bas pour les oscillateurs avec une fréquence de coupure de cinq fois la fréquence de l'oscillateur et modérée 1 / q:
Voici comment sonne l'échantillon avec les dernières modifications.
Cela ressemble déjà à un bon point de départ, alors passons à la mise en œuvre d'un balayage, très grossier au début. Pour implémenter un balayage, vous devez d'abord déterminer les fréquences finales pour chaque oscillateur. Ce n'est pas très simple, mais pas très difficile non plus. La tonalité principale doit être comprise entre les graves D et Eb, donc la fréquence moyenne de cette tonalité sera de 14,5 (0 est C, en comptant chromatiquement, sans la première octave). Ainsi, pour 30 oscillateurs, nous traduisons des fréquences aléatoires comprises entre 200 et 400 Hz en une valeur de 14,5 et les octaves correspondantes. A l'oreille, j'ai choisi les 6 premières octaves. Ainsi, le tableau final de fréquences est le suivant:
(numVoices.collect({|nv| (nv/(numVoices/6)).round * 12; }) + 14.5).midicps;
Nous utiliserons le balayage de 0 à 1. Les fréquences aléatoires sont multipliées par la valeur
(1 − )
et les fréquences cibles sont multipliées par le balayage lui-même. Par conséquent, lorsque le balayage est 0 (au début), la fréquence sera aléatoire. Lorsque le balayage est de 0,5, il s'avère
(( + ) / 2)
, et lorsqu'il est de 1, la fréquence sera la valeur finale. Voici le code modifié:
Le son est
là .
Comme je l'ai dit, c'est une analyse très approximative. Il augmente linéairement de 0 à 1, ce qui n'est pas conforme à la composition d'origine. Vous avez peut-être également remarqué que les dernières octaves sonnent mal parce qu'elles sont réglées sur des octaves parfaites et se confondent comme des tons de base et des harmoniques. Nous allons résoudre ce problème en ajoutant un swing aléatoire au stade final - tout comme cela a été fait au début, et cela semblera beaucoup plus organique.
Vous devez d'abord fixer la formule générale de balayage de fréquence. Le précédent était juste pour le procès. Si nous regardons l'original, nous notons que dans les 5-6 premières secondes, il y a très peu de changements dans le son. Après cela, un balayage rapide et exponentiel a lieu, ce qui conduit les oscillateurs à des intervalles d'octave finis. Voici l'option que j'ai choisie:
sweepEnv = EnvGen.kr(Env([0, 0.1, 1], [5, 8], [2, 5]));
Ici, une transition de 0 à 0,1 prend 5 secondes et une transition de 0,1 à 1 prend 8 secondes. Les courbures de ces segments sont définies sur 2 et 5. Plus tard, nous écoutons ce qui s'est passé, mais nous devons d'abord fixer à nouveau les intervalles finaux. Comme précédemment, nous ajoutons des oscillations aléatoires avec LFNoise2, dont la plage est proportionnelle à la fréquence finale de l'oscillateur. Cela rendra la finale plus organique. Voici le code modifié:
Ici, j'ai également ajusté la fréquence de coupure du filtre passe-bas à mon goût. J'aime arranger les choses si le résultat n'empire pas ... En tout cas,
c'est ce qui s'est passé .
Je n'aime pas vraiment ce modèle de scan. Besoin d'étirer le départ et d'accélérer l'arrivée. Ou attendez ... est-il vraiment nécessaire d'implémenter le même circuit pour tous les oscillateurs? Absolument pas! Chaque oscillateur devrait avoir son propre circuit avec des valeurs de temps et de courbure légèrement différentes - je suis sûr que ce sera plus intéressant. Les harmoniques à haute fréquence d'un cluster aléatoire en dents de scie sont encore un peu ennuyeuses, nous ajoutons donc au résultat global un filtre passe-bas, dont la coupure est contrôlée par une valeur globale "externe" qui n'a rien à voir avec les circuits d'oscillateur. Voici le code modifié:
Un petit changement a rendu le scan un peu plus intéressant. Un filtre passe-bas de 2000 Hz permet d'apprivoiser le cluster initial.
Voilà comment ça sonne .
Il reste encore une chose qui rendra le processus plus intéressant. Rappelez-vous, nous avons trié les oscillateurs aléatoires au début? Eh bien, maintenant nous pouvons les trier dans l'ordre inverse et nous assurer que les oscillateurs à des fréquences aléatoires plus élevées se retrouvent dans les voix inférieures après le crescendo, et vice versa. Cela ajoutera plus de «mouvement» au crescendo et correspond à la structure du fragment d'origine. Je ne suis pas sûr que le Dr Murer l'ait programmé de cette façon, mais il y a ce processus dans le dossier, et cela semble cool, qu'il s'agisse d'un produit aléatoire d'un processus génératif ou d'un choix spécial. (Oh, ai-je dit cela? Si le processus offre une telle option, alors c'est le choix ... ou pas?). Ainsi, nous allons changer l'ordre de tri et la structure du code afin que les dents de scie avec des fréquences plus élevées tombent dans des voix plus basses en finale, et vice versa.
Encore une chose: vous avez besoin d'une basse plus forte. Maintenant, toutes les voix ont la même amplitude. Je veux que les sons graves sonnent un peu plus fort et s'estompent proportionnellement à l'augmentation de la fréquence. Par conséquent, nous modifions l'argument mul pour Pan2 en conséquence. Réajustez les fréquences de coupure des filtres passe-bas pour les oscillateurs individuels. Et je vais ajouter un schéma de mise à l'échelle d'amplitude qui prendra progressivement effet et disparaîtra à la fin, et se libèrera de scserver. Quelques paramètres numériques de plus ici et là - et voici le code final:
Et voici l'
enregistrement final de l'œuvre .
Vous pouvez comparer avec l'
original .
Oui, c'est mon interprétation. Et bien sûr, il peut être optimisé à mort en changeant les modèles, les fréquences, la distribution, peu importe ... néanmoins, je pense que c'est une tentative digne de préserver l'héritage sonore. J'aimerais entendre vos commentaires et / ou vos propres tentatives pour synthétiser ce crescendo.
Oui, et voici une autre chose que j'ai faite pour le plaisir. Rappelez-vous, je vous ai dit qu'il a fallu 20 000 lignes de code C pour générer l'original. Je suis sûr que le Dr Moorer a dû tout écrire à la main, donc ce nombre n'est pas surprenant. Mais vous savez, en raison de la popularité de Twitter, nous essayons de tout compresser en 140 caractères de code. Pour le plaisir, j'ai essayé de reproduire les éléments de base de la composition en 140 caractères du code. Je pense que l'échantillon sonne toujours cool, voici le code (ici avec le ton principal F / E):
play{Mix({|k|k=k+1/2;2/k*Mix({|i|i=i+1;Blip.ar(i*XLine.kr(rand(2e2,4e2),87+LFNoise2.kr(2)*k,15),2,1/(i/a=XLine.kr(0.3,1,9))/9)}!9)}!40)!2*a}
Et
voici le son que cette version génère.
Dans
un seul document - tout le code de cette page pour vos expériences.
Bon crescendo, amis!