Geben Sie den folgenden Auszug aus Pachelbels Canon in D als Audio aus:
Regeln
- Jedes Format / jede Codierung kann verwendet werden, solange vor der Erstellung dieser Herausforderung ein Codec vorhanden war
- Jedes Instrument (ein echtes Instrument, MIDI-Synthese usw.) kann verwendet werden
- Das Tempo muss 65 BPM betragen (wie in den Noten angegeben). Wenn Sie nicht genau 65 BPM erreichen können, können Sie ein beliebiges Tempo im Bereich (einschließlich) 64,75 - 65,25 verwenden
- Die Noten sind in Konzertpitch
- Es muss gleiches Temperament verwendet werden (speziell 12-ET mit A4 = 440 Hz)
Als Referenz ist hier ein Stack-Snippet, das den Auszug wiedergibt:
Antworten:
JavaScript (ES7),
249242241 ByteVielen Dank an @Neil und @PatrickRoberts für ein paar Byte-Einsparungen!
Erläuterung
Die Notation wird in den String gepackt, wobei jedes Zeichen eine einzelne Note als Base-36-Ziffer darstellt. Die Notenwerte sind durch die Formel bestimmt ,
(19 - pitch) * time + 1
wobeipitch
die Anzahl von Halbtönen kleiner als A5 undtime
ist1
für ein Sechzehntel oder20
für ein Achtel. Das0
am Ende stoppt diefor
Schleife.Das Tempo ist
65.22bpmEdit: jetzt genau 65bpm, für 2 weitere Bytes .Diese Erklärung / Demo wird
Math.pow
statt aus**
Gründen der Browserkompatibilität verwendet. Außerdem wird die Verstärkung der Oszillatoren.3
so eingestellt, dass der Schlussakkord Ihre Ohren nicht bluten lässt (die Standardverstärkung ist1
).Sie können die Schaltfläche oben drücken, um sie in jedem Browser zu testen , der die HTML5-Web-Audio-API unterstützt .
quelle
880*2**(-~-n%20/12)
sollten Sie ein paar Bytes sparen.-~-
indem ich das Format meiner Notizverpackung ändere (Die+ 1
in der Formel ist nur da, weil ich0
diefor
Schleife anhalten muss und ich zu faul war, um viel darüber nachzudenken, bevor ich gepostet habe).c=new AudioContext;
mitwith(new AudioContext)
und Entfernen der beiden Vorkommenc.
im Programm.<<
, wird er in eine Ganzzahl umgewandelt.Mathematica,
212152139135 BytesGibt ein
Sound
Objekt aus, das Pachelbels Canon in D wiedergibt, wenn die Wiedergabetaste gedrückt wird. Das Instrument ist das MIDI-Instrument Nr. 41 "Violine".Das Audio
Klick mich!
Erläuterung
Suchen Sie die Buchstaben der einzelnen Zeichen in der Zeichenfolge ("a" -> 1, "b" -> 2 usw.), umhüllt mit a
List
. (Diese Zeichenfolge repräsentiert Pachelbels Canon in D)Stellen Sie
s
dieSoundNote
Funktion ein, deren Instrument # 41 ist. Setzen Sie die Dauer auf 1 und ordnen Sie diese Funktion jedem Element in der zuList
(wodurchSoundNote
primitive Objekte entstehen).Bilden Sie die letzte Triade. (Die Dauer
16
ist dazu da, die letzte Note 16-mal länger zu machen - eine ganze Note ist 16-mal eine Sechzehntelnote.)Erstellen Sie ein sekundenlanges
Sound
Objekt18.5
(weil das Tempo 65 Schläge pro Minute beträgt [5 Takte zu 4/4 bei Tempo 65 Schläge pro Minute = ca. 18,5 Sekunden]).126-Byte-Version, nicht konkurrierend
Nicht konkurrierend, da die Ausgabe zwei Sechzehntelnoten anstelle einer Achtelnote enthält und die Trennung deutlich erkennbar ist.
quelle
Bubblegum , 203 Bytes
Probieren Sie es online!
Dies ist ein Hexdump (umgekehrt mit
xxd -r
) des Quellcodes. Die erzeugte MIDI-Datei sieht wie folgt aus (auch ein Hexdump):quelle
BBC BASIC, 141 ASCII-Zeichen (65,217 BPM)
Überarbeitet, um dem Tempolimit Rechnung zu tragen. Wird die Erklärung später aktualisieren.
BBC BASIC, 123 ASCII-Zeichen (nicht konkurrierend als 60BPM)
Laden Sie den Interpreter unter http://www.bbcbasic.co.uk/bbcwin/download.html herunter
Spielt den Song direkt ab, wenn er ausgeführt wird.
Ungolfed
Erläuterung
j
ist eine Flagge, die anzeigt, ob wir uns in den ersten 4 Takten oder im letzten Akkord befinden. WAHR ist-1
in BBC BASIC.Die
SOUND
Anweisung akzeptiert 4 Parameter:CHANNEL: Für die ersten 4 Takte ist dies Kanal 1. Für die 3 Noten des Akkords im 5. Takt lauten die Kanalnummern 201, 202 und 203 hexadezimal (513.514 und 515 dezimal). Dies bedeutet, dass auf den Kanälen 1,2 und 1 gespielt wird 3, die anfängliche 2 bedeutet, spielen gleichzeitig mit 2 Noten auf anderen Kanälen (dh spielen Sie einen 3-Noten-Akkord).
VOLUME: Wird als negativer Wert angegeben, da positive Werte andere Effekte (Klanghüllkurven) darstellen. Setze auf -9 (wird auf -15 angehoben, was am lautesten ist.)
PITCH: Für diese Melodie reicht von D4 = 108 bis A5 = 184. Jeder Ganzzahlschritt ist 1/4 eines Halbtons. Die Werte werden als ASCII-Codes im Bereich von 54 bis 92 gespeichert und verdoppelt, um den korrekten Wert wiederherzustellen. 1/8-Noten werden doppelt als 1/16-Noten gespeichert. Der Schlussakkord wird in 3 separaten Tonhöhen gespeichert und die Notenlänge variiert zu der ganzen Note wie unten.
DAUER: in 1/20 Sekunde. Die Dauer einer 1/16-Note beträgt 5/20 Sekunden, also 60 1/4 Noten pro Minute (es gibt keine ausreichende Auflösung, um das Tempo genauer zu machen.) Die gesamte Note ist 5 - (- 75) = 80 Einheiten (4 Sekunden) ) lang.
quelle
Befunge, 242 Bytes
Die Melodie wird im Format einer MIDI-Datei auf stdout geschrieben. Sie müssen diese Ausgabe in eine .mid- Datei umleiten, um den Auszug abzuspielen.
Probieren Sie es online! , obwohl ich glaube, dass es derzeit nicht möglich ist, die Ausgabe so zu speichern, dass die binäre Integrität der Daten erhalten bleibt.
Erläuterung
Die erste Zeile ist nur ein fest codierter MIDI-Header, der am Anfang der zweiten Zeile ausgegeben wird. Der Rest der zweiten Zeile codiert die Sequenz der Noten als ihre MIDI-Werte, die zweckmäßigerweise ASCII-Werte sind. In der dritten Zeile werden die MIDI-Befehle zum Spielen dieser Noten geschrieben, wobei die Dauer automatisch berechnet wird (jede Note ist ein Semiquaver, es sei denn, i% 14 == 0). Der letzte Akkord wird in den Zeilen vier und fünf als Sonderfall behandelt (da hierfür mehrere Tasten gleichzeitig gedrückt werden müssen), und die sechste Zeile gibt den letzten MIDI-Endemarker aus.
quelle
C
248 228 210 198 193191 BytesDies erzeugt eine Sequenz von 8-Bit-Samples ohne Vorzeichen, die mit 8000 Samples pro Sekunde abgespielt werden sollen. Wenn Sie ein älteres UNIX / Linux-Setup haben, können Sie die Ausgabe an umleiten
/dev/audio
. In einigen neueren Linux-Distributionen müssen Sie die Ausgabe möglicherweise an den ALSA-Befehlszeilen-Player leitenaplay
quelle
SmileBASIC, 115 Bytes
Die Verwendung eines schönen Instruments war 4 zusätzliche Bytes wert :)
quelle
JavaScript (ES6) mit WAV.js , 325 Byte
quelle