Sortez l'extrait suivant du Canon de Pachelbel en D sous forme audio:
Règles
- N'importe quel format / encodage peut être utilisé, tant qu'un codec existait avant la création de ce défi
- N'importe quel instrument (un véritable instrument, une synthèse MIDI, etc.) peut être utilisé
- Le tempo doit être de 65 BPM (comme indiqué dans la partition) - si vous ne pouvez pas obtenir exactement 65 BPM, vous pouvez utiliser n'importe quel tempo dans la plage (incluse) 64,75 - 65,25
- La partition est en pitch de concert
- Un réglage de tempérament égal doit être utilisé (spécifiquement 12-ET avec A4 = 440 Hz)
Pour référence, voici un extrait de pile qui jouera l'extrait:
Réponses:
JavaScript (ES7),
249242241 octetsMerci à @Neil et @PatrickRoberts pour quelques économies d'octets!
Explication
La notation est empaquetée dans la chaîne où chaque caractère est une seule note en tant que chiffre de base 36. Les valeurs des notes sont déterminées par la formule
(19 - pitch) * time + 1
oùpitch
est le nombre de demi-tons inférieur à A5 ettime
correspond1
à un demi20
-quadrillage ou à un quartet. Le0
à la fin arrête lafor
boucle.Le tempo est de
65,22 bpmEdit: exactement 65 bpm maintenant, pour 2 octets de plus .Cette explication / démo utilise à la
Math.pow
place de**
pour la compatibilité du navigateur. Il règle également le gain des oscillateurs pour.3
que l'accord final ne fasse pas saigner vos oreilles (le gain par défaut est1
).Vous pouvez appuyer sur le bouton ci-dessus pour le tester dans n'importe quel navigateur prenant en charge l'API HTML5 Web Audio .
la source
880*2**(-~-n%20/12)
devrait vous faire économiser quelques octets.-~-
en modifiant le format de l'emballage de mes notes (le+ 1
dans la formule n'est là que parce que j'ai besoin0
d'arrêter lafor
boucle et j'étais trop paresseux pour y penser beaucoup avant de poster).c=new AudioContext;
parwith(new AudioContext)
et en supprimant les deux occurrences dec.
dans le programme.<<
il le convertit en entier.Mathematica,
212152139 139135 octetsSort un
Sound
objet qui joue le Canon de Pachelbel en D lorsque le bouton Lecture est enfoncé. L'instrument est l'instrument MIDI n ° 41 "Violon".L'audio
Cliquez moi!
Explication
Recherchez les nombres de lettres de chaque caractère dans la chaîne ("a" -> 1, "b" -> 2, etc.), enveloppés d'un
List
. (Cette chaîne représente le Canon de Pachelbel en ré)Réglez
s
sur laSoundNote
fonction dont l'instrument est le # 41. Réglez la durée sur 1 et mappez cette fonction à chaque élément duList
(créant ainsiSoundNote
des objets primitifs).Faites la dernière triade. (La durée
16
est là pour rendre la dernière note 16 fois plus longue - une note entière est seize fois une seizième.)Fabriquez un
Sound
objet, en18.5
secondes (car le tempo est de 65 bpm [5 mesures de 4/4 avec un tempo de 65 bpm = environ 18,5 secondes]).Version 126 octets, non concurrente
Pas de concurrence car la sortie contient deux doubles croches au lieu d'une huitième et la séparation est assez perceptible.
la source
Bubblegum , 203 octets
Essayez-le en ligne!
Il s'agit d'un hexdump (inversé avec
xxd -r
) du code source. Le fichier MIDI qu'il produit est le suivant (également un hexdump):la source
BBC BASIC, 141 caractères ASCII (65.217BPM)
Révisé pour tenir compte de la limite de tempo. Met à jour l'explication plus tard.
BBC BASIC, 123 caractères ASCII (non compétitif en 60BPM)
Téléchargez l'interprète sur http://www.bbcbasic.co.uk/bbcwin/download.html
Joue la chanson directement lors de l'exécution.
Non golfé
Explication
j
est un drapeau indiquant si nous sommes dans les 4 premières mesures ou l'accord final. TRUE est-1
en BBC BASIC.L'
SOUND
instruction prend 4 paramètres:CANAL: pour les 4 premières mesures, il s'agit du canal 1. Pour les 3 notes de l'accord dans la 5e mesure, les numéros de canal sont 201, 202 et 203 hexadécimaux (513 514 et 515 décimal). Cela signifie jouer sur les canaux 1,2 et 3, les 2 initiales signifiant jouer simultanément avec 2 notes sur d'autres canaux (c'est-à-dire jouer un accord de 3 notes).
VOLUME: Donné comme une valeur négative car les valeurs positives représentent d'autres effets (enveloppes sonores.). Fixé à -9 (ira jusqu'à -15, ce qui est le plus fort.)
PITCH: Pour cet air, varie de D4 = 108 à A5 = 184. Chaque pas entier est 1/4 d'un demi-ton. Les valeurs sont stockées sous forme de codes ASCII dans la plage 54 à 92 et doublées pour régénérer la valeur correcte. Les 1/8 de notes sont stockées sous forme de doubles de 1/16 de note. L'accord final est stocké sur 3 hauteurs distinctes et la longueur de la note varie en note entière comme ci-dessous.
DURÉE: en 1/20 de seconde. La durée de la 1 / 16ème note est de 5/20 de seconde, donc 60 1/4 notes par minute (la résolution est insuffisante pour rendre le tempo plus précis.) La note entière est de 5 - (- 75) = 80 unités (4 secondes ) longue.
la source
Befunge, 242 octets
Le morceau est écrit sur stdout au format d'un fichier MIDI. Vous devrez rediriger cette sortie vers un fichier .mid afin de lire l'extrait.
Essayez-le en ligne! , bien que je ne pense pas qu'il soit actuellement possible d'enregistrer la sortie de telle manière qu'elle conserve l'intégrité binaire des données.
Explication
La première ligne est essentielle juste un en-tête MIDI codé en dur, qui est sorti au début de la ligne deux. Le reste de la ligne deux code la séquence de notes en tant que leurs valeurs MIDI, qui sont commodément ASCII. La troisième ligne écrit les commandes MIDI pour jouer ces notes, la durée étant automatiquement calculée (chaque note est un demi-crochet sauf si i% 14 == 0). L'accord final est traité comme un cas spécial sur les lignes quatre et cinq (car cela nécessite d'appuyer simultanément sur plusieurs touches), et la sixième ligne écrit le marqueur MIDI final de fin de piste.
la source
C,
248 228 210 198 193191 191 octetsCela produit une séquence d'échantillons non signés 8 bits destinés à être lus à 8 000 échantillons par seconde. Si vous avez une ancienne configuration UNIX / Linux, vous pouvez rediriger la sortie vers
/dev/audio
. Sur certaines distributions Linux plus récentes, vous devrez peut-être diriger la sortie vers le lecteur de ligne de commande ALSAaplay
la source
SmileBASIC, 115 octets
L'utilisation d'un bel instrument valait 4 octets supplémentaires :)
la source
JavaScript (ES6) utilisant WAV.js , 325 octets
la source