Imprima el siguiente extracto del Canon de Pachelbel en D como audio:
Reglas
- Se puede usar cualquier formato / codificación, siempre que exista un códec antes de la creación de este desafío
- Se puede usar cualquier instrumento (un instrumento real, síntesis MIDI, etc.)
- El tempo debe ser de 65 BPM (como se indica en la partitura): si no puede obtener exactamente 65 BPM, puede usar cualquier tempo dentro del rango (incluido) 64.75 - 65.25
- La partitura está en concierto
- Se debe usar la afinación de temperamento igual (específicamente 12-ET con A4 = 440 Hz)
Como referencia, aquí hay un fragmento de pila que reproducirá el extracto:
Respuestas:
JavaScript (ES7),
249242241 bytes¡Gracias a @Neil y @PatrickRoberts por algunos ahorros en bytes!
Explicación
La notación está empaquetada en la cadena donde cada carácter es una nota única como base de 36 dígitos. Los valores de las notas están determinados por la fórmula
(19 - pitch) * time + 1
dondepitch
es el número de semitonos menor que A5 ytime
es1
para un semiquaver o20
para un quaver. Al0
final se detiene elfor
bucle.El tempo es
65.22bpmEditar: exactamente 65bpm ahora, para 2 bytes más .Esta explicación / demostración se utiliza en
Math.pow
lugar de**
por compatibilidad del navegador. También establece la ganancia de los osciladores para.3
que el acorde final no haga sangrar sus oídos (la ganancia predeterminada es1
).Puede presionar el botón de arriba para probarlo en cualquier navegador que admita la API de audio web HTML5 .
fuente
880*2**(-~-n%20/12)
debería ahorrarte unos pocos bytes.-~-
alterando el formato de mi paquete de notas (+ 1
en la fórmula solo está allí porque necesito0
detener elfor
ciclo y era demasiado vago para pensarlo mucho antes de publicar).c=new AudioContext;
conwith(new AudioContext)
y la eliminación de las dos apariciones dec.
en el programa.<<
, lo convertiría en un número entero.Mathematica,
212152139135 bytesEmite un
Sound
objeto que reproduce el Canon de Pachelbel en D cuando se presiona el botón Reproducir. El instrumento es el instrumento MIDI # 41 "Violín".El audio
¡Haz click en mi!
Explicación
Encuentre los números de letras de cada carácter en la cadena ("a" -> 1, "b" -> 2, etc.), envueltos con a
List
. (Esta cadena representa el Canon de Pachelbel en D)Configurado
s
paraSoundNote
funcionar cuyo instrumento es el # 41. Establezca la duración en 1 y asigne esa función a cada elemento en elList
(haciendoSoundNote
objetos primitivos).Haz la última tríada. (La duración
16
está ahí para hacer que la última nota sea 16 veces más larga; una nota completa es dieciseis veces una semicorchea)Haga un
Sound
objeto,18.5
segundos de duración (porque el tempo es de 65 bpm [5 medidas de 4/4 con un tempo de 65 bpm = aproximadamente 18.5 segundos]).Versión de 126 bytes, no competitiva
No compite porque la salida contiene dos semicorcheas en lugar de una octava nota, y la separación es bastante notable.
fuente
Chicle , 203 bytes
Pruébalo en línea!
Este es un hexdump (inverso con
xxd -r
) del código fuente. El archivo MIDI que produce es el siguiente (también un hexdump):fuente
BBC BASIC, 141 caracteres ASCII (65.217BPM)
Revisado para acomodar el límite de tempo. Se actualizará la explicación más tarde.
BBC BASIC, 123 caracteres ASCII (sin competencia como 60BPM)
Descargue el intérprete en http://www.bbcbasic.co.uk/bbcwin/download.html
Reproduce la canción directamente cuando se ejecuta.
Sin golf
Explicación
j
es una bandera que indica si estamos en los primeros 4 compases o en el acorde final. VERDADERO está-1
en BBC BASIC.La
SOUND
declaración toma 4 parámetros:CANAL: para las primeras 4 barras, este es el canal 1. Para las 3 notas del acorde en la quinta barra, los números de canal son 201, 202 y 203 hexadecimales (513,514 y 515 decimales). Esto significa tocar en los canales 1,2 y 3, los 2 iniciales significan reproducir simultáneamente con 2 notas en otros canales (es decir, tocar un acorde de 3 notas).
VOLUMEN: Dado como un valor negativo porque los valores positivos representan otros efectos (envolventes de sonido). Establezca en -9 (subirá a -15, que es el más alto).
PITCH: para esta melodía, varía de D4 = 108 a A5 = 184. Cada paso entero es 1/4 de un semitono. Los valores se almacenan como códigos ASCII en el rango de 54 a 92 y se duplican para regenerar el valor correcto. Las notas 1/8 se almacenan como notas 1/16 duplicadas. El acorde final se almacena como 3 tonos separados y la duración de la nota varía a la nota completa como se muestra a continuación.
DURACIÓN: en 1/20 de segundo. La duración de 1/16 de nota es 5/20 de segundo, por lo que 60 1/4 notas por minuto (no hay resolución suficiente para que el tempo sea más preciso). La nota completa es 5 - (- 75) = 80 unidades (4 segundos ) largo.
fuente
Befunge, 242 bytes
La melodía se escribe en stdout en el formato de un archivo MIDI. Tendrá que redirigir esa salida a un archivo .mid para reproducir el extracto.
Pruébalo en línea! , aunque no creo que actualmente sea posible guardar la salida de tal manera que conserve la integridad binaria de los datos.
Explicación
La primera línea es esencial solo un encabezado MIDI codificado, que se emite al comienzo de la línea dos. El resto de la línea dos codifica la secuencia de notas como sus valores MIDI, que son convenientemente ASCII. La tercera línea escribe los comandos MIDI para tocar esas notas, y la duración se calcula automáticamente (cada nota es un semicuadro a menos que i% 14 == 0). El acorde final se maneja como un caso especial en las líneas cuatro y cinco (ya que eso requiere que se presionen varias teclas simultáneamente), y la sexta línea escribe el final MIDI final del marcador de pista.
fuente
C,
248 228 210 198 193191 bytesEsto produce una secuencia de muestras sin signo de 8 bits destinadas a reproducirse a 8000 muestras por segundo. Si tiene una configuración UNIX / Linux anterior, puede redirigir la salida a
/dev/audio
. En algunas distribuciones de Linux más nuevas, es posible que deba canalizar la salida al reproductor de línea de comando ALSAaplay
fuente
SmileBASIC, 115 bytes
Usar un buen instrumento valía 4 bytes adicionales :)
fuente
JavaScript (ES6) usando WAV.js , 325 bytes
fuente