Écrivez un programme pour jouer la comptine anglaise populaire.
(Ce fichier est sous licence Creative Commons Attribution-Share Alike 3.0 Unported . Attribution: Helix84 sur Wikipedia en anglais ; Blahedo sur Wikipedia en anglais .)
Quelques articles Wikipedia qui peuvent être utiles:
- Twinkle Twinkle Little Star (a un clip audio de ce à quoi devrait ressembler la sortie de votre programme)
- Symboles musicaux modernes (pour en savoir plus sur la notation musicale utilisée ci-dessus)
- Note # Fréquence des notes (hertz) (la formule de calcul de la fréquence de chaque note)
Quelques directives pour votre soumission:
Votre programme doit utiliser la carte son de l'ordinateur. Si votre langage de programmation n'a pas un accès pratique au matériel audio, votre programme doit créer un fichier de sortie dans un format standard tel que WAV ou MIDI.
Votre programme doit réellement générer sa sortie. Par exemple, l'incorporation du fichier Ogg Vorbis de Wikipedia ne serait pas autorisée.
La qualité audio doit être acceptable. À tout le moins, la chanson devrait être facilement reconnaissable. De préférence, cela devrait aussi bien paraître.
L'accent doit être mis sur la taille du code, la qualité du son ou les deux (expliquez lequel vous avez choisi). Des solutions élégantes seraient également formidables. S'amuser!
Ceci est un code-golf , donc le code le plus court gagne
Réponses:
QBasic (56)
L'accent est mis sur la réminiscence :)
(N'avez pas de QBasic pour tester cela cependant)
la source
JavaScript (
214212211 caractères)Ouvrez Safari, Opera ou Google Chrome vers JavaScript Shell , puis entrez le code ci-dessous:
Non lisible pour la lisibilité (même alors, il peut être difficile à comprendre):
Avec plusieurs autres caractères, cela pourrait également fonctionner sur Firefox, mais vous pouvez modifier la
audio/wav
partie pour au moins enregistrer le fichier WAV.la source
open(...)
enAudio(...).play()
(8 caractères supplémentaires) pour qu'il utilise le lecteur audio intégré fonctionnel de Firefox.C # (Longueur: LOL)
Donc, ce que j'ai fait ici, c'est implémenter la prise en charge de la génération d'un fichier .wav à partir de la chaîne utilisée pour la solution QBasic en C # (octave unique, pas d'accident). L'accent était mis sur:
unsafe
blocs de codela source
FromDigits["LOL",36]==28101
Cela ne ressemble pas à LOL <sub> 36 </sub> octets ...Python (259)
la source
import ttls
?C, 277 caractères
Perl, 203 caractères
Idéalement, la valeur par défaut de l' OSS
/dev/dsp
est 8 kHz mono u8; tout ce que je fais ici est d'ouvrir l'appareil et d'écrire des échantillons calculés.la source
j,f;main(i){char b[8000];f=open("/dev/dsp",1);for(i=24;i--;write(f,b,j))for(j=0;j<8000;j++)b[j]=(i%4&&j/400%20==9?1:1+sinf(j*powf(2,("@BDEGIG@BDEGBDEG@BDEGIG@"[i]-64)/12.)))*127;}
PowerShell: 207
Code golf:
Non golfé, avec commentaires:
Pas la meilleure interprétation de la chanson, mais ça marche.
la source
n{
place den {
?C - 520
Bosse.
Pourquoi utiliser le matériel du siècle dernier comme les haut-parleurs et les écouteurs? Cet excellent morceau de code vous permet de jouer la chanson sur un matériel moderne: un lecteur de disquette!
Pas d'exigences particulières:
-lm
/dev/fd0
, donc montrez l'appareil ou exécutez en tant que superutilisateurContourne un peu les règles, mais considérons le lecteur de disquette un périphérique audio et le contrôleur IDE une carte son intégrée.
la source
HyperCard 2.2 - 113
Utilisation: Démarrez HyperCard, tapez ⌘M pour ouvrir la boîte de message, collez le code ci-dessus et appuyez sur Entrée.
harpsichord
peut être remplacé parflute
ouboing
pour obtenir des sons différents.la source
harpsichord
->flute
-6 supprimer l'espace entre l'instrument et les guillemets -1 total -7C, 96 caractères
Produit des données audio mono 8 bits non signées brutes dans un style d' octet classique. Les fréquences d'échantillonnage recommandées pour la lecture se situent entre 8 et 16 kHz; changer la fréquence d'échantillonnage change le tempo et la hauteur.
Pour compiler et jouer sous Linux, enregistrez le code ci-dessus sous
twinkle.c
et exécutez les commandes suivantes:Quelques notes sur le fonctionnement du code:
L'astuce générale utilisée pour les compositions d'octets comme celle-ci est celle qui
putchar()
prend une valeur entière mais n'en imprime que les huit bits les plus faibles. Ainsi,putchar(t)
oùt
est un compteur croissant, génère une onde en dents de scie, et la fréquence de l'onde peut être modifiée en multipliantt
avec une valeur appropriée.!!(t>>9&7|!(-t>>12&7))
produit le motif de note répétitif 6 + 1. Plus précisément,!!(t>>9&7)
évalue0
chaque foist>>9 & 7 == 0
et1
autrement. Ainsi, il produit un écart de 512 échantillons dans la forme d'onde tous les 4096 échantillons, tandis que le!(-t>>12&7)
élimine tous les huitième de cet écart.96+"#d|dOE3#dOE3dOE3"[t>>13&15]
génère la mélodie: le code ASCII de chaque caractère de la chaîne plus 96 donne la fréquence relative de la note correspondante. En fait, les valeurs sont les fréquences approximatives en Hz des notes de hauteur de concert dans la 3ème / petite octave, c'est-à-dire avec A correspondant à 220. Cependant, puisque le ton de base avec lequel ces valeurs sont multipliées est d'environ 64 Hz (lorsqu'il est joué à 16 kHz , ou 32 Hz lorsqu'il est joué à 8 kHz), nous devons réduire le résultat de cinq octaves avec>>5
pour ramener la fréquence dans une plage raisonnable.Ps. Si vous souhaitez essayer ce code sur un lecteur bytebeat basé sur JavaScript, remplacez-le
[t>>13&15]
par.charCodeAt(t>>13&15)
.la source
Python
317305301Ceci est ma solution, en utilisant uniquement des bibliothèques python standard:
Et le voici avec un peu plus d'espace pour la lisibilité:
la source
Mathematica, 86 caractères
la source
Arduino, 688
Branchez le buzzer sur la sortie 11. Je me suis concentré principalement sur la qualité , mais aussi sur la longueur du code.
la source
"ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "
supprimer l'espace?int beats[] =
supprimer de l'espace?for (long
supprimer de l'espace?11, LOW
supprimer de l'espace?note, int
supprimer de l'espace?i], duration
supprimer de l'espace?11, OUTPUT
supprimer de l'espace?ffeeddc "
est pour une sorte de retard, dont vous n'avez pas besoin à la fin, etbeats[] =
n'a aucune raison d'avoir un espace. De plus, vous devriez faire une version se concentrant sur la longueur du code, juste pour le plaisir!bash + say + gunzip, 136 octets
say
, bien sûr, étant la commande de synthèse vocale OS X. C'est ... stupide. Ouais, allons-y avec dorky.Les 117 octets sont, bien sûr, un flux gzip contenant des caractères non imprimables. Voici un vidage xxd du script comprenant ces caractères:
Explication
Les 117 octets sont le script suivant compressé:
C'est vrai, je viens de faire un tas de
say
voix différentes dire "o". Pour déterminer lesquels, j'ai écrit un script en utilisant des aubionotes pour obtenir une estimation rapide et sale de la hauteur de chaque voix, puis j'ai fait beaucoup d'essais et d'erreurs pour trouver ceux qui sonnent le plus bien.J'ai envisagé d'essayer de jouer au golf manuellement, mais il y a tellement de répétitions que je me suis dit que Zopfli ferait un travail plus court, alors j'ai pris la solution de facilité.
la source
SmileBASIC, 45 octets
la source
PowerShell,
120117 octets[Console]::beep
, étiquettes de notes et fréquences inspirées d' IsziIdée principale :
A
,C
,D
,E
,F
,G
.double duration
.$_-band7
) de chaque utilisation de notes comme index dans le tableau des fréquences (A->1
,C->3
,D->4
...)(0,110,0,65,73,82,87,98)[$_-band7]*4
place d'Iszi(0,440,0,262,294,330,349,392)[$_-band7]
.[console]::Beep
n'est pas l'instrument de musique le plus précis, il peut donc légèrement simuler :)Explication : Pour chaque caractère de la chaîne mélodique
ccggaaGffeeddCggffeeDggffeeDccggaaGffeeddC
, le script:[console]::beep
pour jouer la notela source