Créez un script pour générer la Deep Note

11

La note profonde THX est l'un des sons les plus reconnaissables dans la technologie de production audio / vidéo. Selon son créateur, il a fallu environ 20 000 lignes de code C pour générer le résultat final. On peut faire mieux que ça.

Votre tâche consiste à écrire un script dans n'importe quelle langue qui générera un son (dans un fichier ou directement sur le matériel) qui correspond à la description de la marque du son THX, tel que fourni par le US Patent and Trademark office :

Le thème du logo THX se compose de 30 voix sur sept mesures, commençant dans une plage étroite, 200 à 400 Hz, et se détournant lentement vers des hauteurs présélectionnées comprenant trois octaves. Les 30 voix commencent à des hauteurs comprises entre 200 Hz et 400 Hz et arrivent à des hauteurs présélectionnées s'étendant sur trois octaves par la quatrième mesure. La hauteur la plus élevée est légèrement désaccordée alors qu'il y a le double du nombre de voix des deux basses.

Notez que les "hauteurs présélectionnées" doivent être à peu près les mêmes que les hauteurs de la note profonde THX réelle, qui sont dans la tonalité de mi bémol.

Le code le plus court pour le faire dans n'importe quelle langue gagne.

Joe Z.
la source
Veuillez éviter les Import[youtube]réponses
Dr. belisarius
«Générer» un son empêcherait généralement d'importer un son pré-généré d'ailleurs.
Joe Z.
3
La spécification est trop lâche. Je crois que je pourrais écrire un programme qui a 30 formes d’ondes (toutes) qui commencent à 250 Hz, jouer cela pendant une seconde, se diviser en trois groupes, 250, 500 et 1000 Hz (trois octaves), jouer cela pendant une seconde et finir avec désaccord du groupe 1000 Hz. Spécifier qu'il devrait être "reconnaissable" rendrait l'objectivité du gagnant problématique. Je pense que cela fonctionnerait mieux comme un concours de popularité.
shiona
Je pense aussi maintenant, ce qui signifie que je publierai une deuxième version de ce problème qui est un concours de popularité à la place. (La spécification lâche devrait au moins donner lieu à des solutions courtes intéressantes.)
Joe Z.
2
Il existe déjà une solution à 140 caractères .
MSalters

Réponses:

2

C, 323 octets

#include<math.h>
#define A y=-2*y*y*y+3*y*y
main(i,j,o,e){e=44100;write(1,"RIFF´9WAVEfmt      D¬  ±    data9",44);float r[30],x,y,k,v;for(i=0;i++<30;r[i]=.5-(9*i%7)/7.);for(i=0;i++<9*e;){x=2.*M_PI*i/(0.+e),k=y=1-i/(8.*e),v=0,A,A,A,y=y>1?1:y;for(j=0;j++<30;o=j%6,v+=(7-o)*.1*sin(x*(20<<o)*(1+y*r[j])));write(1,&v,4);}}

(entre autres, les caractères NUL ne pouvaient pas être collés dans la zone de texte; vous pouvez afficher ou télécharger le fichier d'origine ici )

Usage:

gcc deep-note.c -o deep-note
./deep-note > deep-note.wav

Cliquez ici pour écouter un aperçu du son généré!

Mathieu Rodic
la source
bon essai, mais cela finit par sembler très simplifié par rapport à l'original
qwr
2
Je le fais en effet; l'original utilise 30 oscillateurs contrôlés par les 20000 lignes de code de la question visée dans la question. Ce code source minimaliste contient moins de 400 octets ... Que proposez-vous?
Mathieu Rodic
1
Celui-ci sonne comme si la Deep Note était passée à travers un encodage MP3 de 200 bps échantillonné à 1 kHz.
Joe Z.
Pourtant, +1 pour avoir même tenté de répondre à cette question.
Joe Z.