Le défi est: générer un fichier audio fait de bruit blanc.
Exigences et instructions:
- Votre programme doit générer un fichier audio contenant uniquement du bruit blanc, ce qui signifie que son intensité est la même pour toutes les fréquences (raisonnables) et non nulles [voir un exemple de tracé ];
- Il faut être capable de lire le fichier audio sur la dernière version de VLC [au moment d'écrire votre réponse];
- Le programme n'a pas besoin d'aléatoire cryptographique fort, de
rand
fonctions ou de lecture/dev/rand
est correct; - Le programme doit être capable de générer au moins 1 heure d'audio, au moins en théorie (ce qui signifie que les limitations du système comme la taille maximale des fichiers ne s'appliquent pas);
- Votre score est le nombre d'octets dans votre code source, plus tous les bonus qui s'appliquent;
- L'utilisation d'une bibliothèque externe tierce est correcte;
- Le programme doit fonctionner sans accès à Internet.
Les bonus sont:
- -15%: Permet de spécifier le format du fichier audio (au moins deux choix; le nombre de choix possibles ne change pas la partition);
- -10%: Permet de spécifier la durée du fichier audio;
- -5%: Permet de spécifier le débit binaire du fichier audio.
Les paramètres peuvent être stockés dans des variables, des fichiers ou donnés en tant que paramètres de ligne de commande, selon votre choix. Les pourcentages sont calculés à partir du nombre d'octets d'origine, avant que tout bonus ne soit appliqué.
Réponses:
MATLAB, 25
écrit un nouveau fichier WAV sur le disque appelé
a
. Il a une fréquence d'échantillonnage de 8 kHz et 16 bits par échantillon au format entier signé. Les données source sont réparties uniformément sur l'intervalle[0,1]
, qui est mappé sur l'intervalle[0,32767]
après la conversion au format entier.MATLAB, 28-4 (10% + 5%) = 24
Je ne sais pas ce que l'OP signifiait sur la façon dont les paramètres pouvaient être stockés dans des variables, mais je l'ai interprété d'une manière favorable à ce cas. En admettant que:
Le débit binaire souhaité (en bits / seconde) est fourni par l'utilisateur dans la variable
b
. Les bits par échantillon sont codés en dur à 16.La durée souhaitée du fichier (en échantillons) est donnée dans la variable
d
.Le résultat est:
MATLAB, 16-4 (15% + 10%) = 12
En ajoutant une autre couche de sleaze à la recherche de bonus, je fais une autre hypothèse: la fonction souhaitée à utiliser pour sortir le fichier doit être spécifiée dans la variable
f
. Ensuite, le code se simplifie pour:Les valeurs autorisées pour la fonction sont:
ou
Chaque fonction entraînera l'extrait ci-dessus à écrire un fichier du format approprié (WAV ou
.au
) à une fréquence d'échantillonnage de 8 kHz avec la durée spécifiée. J'ai retiré le bonus pour la spécification du débit ici, car parauwrite
défaut à 8 bits par échantillon au lieu de 16 comme lewavwrite
fait. Je ne vois pas de moyen d'harmoniser les deux sans utiliser plus de caractères.la source
Bash, 34
Si vous ne voulez pas que le disque dur soit aléatoire, (beaucoup plus lent)
SPIN, 28
la source
/dev
.Mathematica 52 - 5 = 47
g
exporte un fichier .wav de bruit blanc des
secondes et 8000 bps.Exemple: un fichier de bruit blanc de 6 secondes est exporté.
la source
Supercollider, 89 - 10% = 80,1 octets
Malheureusement, bien qu'il ait été délibérément conçu pour la génération de sons / audio, ce langage ne va pas gagner ici. Mais c'est la première apparition de Supercollider sur Code Golf, donc c'est cool!
Cette soumission perd principalement parce que la configuration de l'enregistrement et sa réalisation est un processus prolixe en raison de la conception client / serveur de cette langue. Pourtant, c'est un langage cool avec beaucoup de puissance dans très peu de code lorsque vous lui demandez de faire choses plus complexes qu'un simple bruit blanc.
La durée du fichier est définie en modifiant la valeur wait (). Je pourrais le mettre dans une variable, mais cela ne sert à rien car Supercollider n'a pas de stdio à proprement parler. L'interactivité consiste à manipuler le code en direct pendant que le serveur est en cours de lecture. Essentiellement, l'IDE est l'E / S (sauf si vous créez une interface utilisateur pour votre création).
Voici la version golfée:
Voici une version golfée avec l'option d'enregistrer en aiff ou wav, et spécifiez un format d'échantillon (int16, int8 et float sont toutes des options). Malheureusement, même avec tous les bonus, la version ci-dessus se porte mieux. Ce serait 139 - 30% = 97,3 octets.
Et voici une version non golfée de ce dernier, afin que vous puissiez voir ce qui se passe.
la source
Bash + ALSA, score: 44 (52 caractères - (10% + 5%) bonus)
Plus long que l'autre
bash
réponse, mais accepte la durée et le débit binaire. Ajoute également un en-tête raisonnablement correct au fichier, donc devrait être raisonnablement portable:Enregistrez-le en tant que script,
chmod +x
exécutez-le:Notez que la sortie .wav est vers stdout, elle doit donc être redirigée vers un fichier.
la source
C
127115 octetsLa majorité du code écrit l'en-tête d'un fichier * .au. Cela imprime un fichier son pseudo-aléatoire en sortie standard.
La fréquence d'échantillonnage peut être ajustée en changeant le
8000
.La durée peut être ajustée en appuyant sur
ctrl-c
quand vous voulez arrêter :-)la source
JavaScript, 167 octets
ATTENTION: diminuez le volume avant l'exécution. Le bruit blanc est méchant
Ne génère pas de fichier, peut-être pas ce qui était attendu.
-4 octets pirater le bruit de lecture sur le canal gauche uniquement
la source