Hoy, 11 de noviembre de 2015, es el Día de los Veteranos en los Estados Unidos. " Taps " es la llamada de corneta que se toca en los funerales militares de los Estados Unidos:
( "Taps" en SoundCloud de vtmiller )
Es una melodía simple, solo tiene veinticuatro notas y usa solo cuatro notas diferentes. Aquí está la partitura:
( fuente )
Reto
Escriba un programa o función que reproduzca "Taps" o genere un archivo de audio de "Taps" en cualquier formato de archivo de audio común (por ejemplo, MP3, WAV, MIDI). Puede reproducirse en cualquier tecla, utilizando cualquier tipo de instrumento o pitido disponible para su idioma. Por ejemplo, puede sonar como un piano en lugar de una corneta. (Aunque todavía solo debe usarse un tipo de instrumento).
Las veinticuatro notas se deben tocar con tono, duración y espaciado precisos. Alguien que esté familiarizado con "Taps" debería poder ejecutar su código y reconocer fácilmente la canción que se está reproduciendo.
La duración de la melodía (desde el comienzo de la primera nota hasta el final de la última nota) debe estar entre 30 y 70 segundos. Opcionalmente, puede tener hasta 5 segundos de silencio rellenando el inicio y / o el final de su archivo de sonido, por lo que un archivo de 80 segundos es el más largo permitido.
Por supuesto, no puede simplemente descargar la canción en línea en algún lugar o extraerla de una biblioteca de audio que la tenga como muestra. Sin embargo, puede usar bibliotecas de audio que puedan reproducir / componer notas individuales y crear archivos de audio.
Tanteo
Este es el código de golf , por lo que gana la respuesta más corta en bytes. Sin embargo, para este desafío en particular, le animo a que no se concentre en el recuento de bytes, especialmente a expensas de la calidad del sonido. Golf sus presentaciones pero permítase ser creativo con su elección de instrumento o metodología de salida de sonido. Este desafío está destinado a honrar a los veteranos, no a gritar una versión apenas reconocible de "Taps".
Tenga en cuenta que puede incrustar archivos de audio SoundCloud directamente en publicaciones simplemente pegando el enlace en una línea vacía. Si tiene una cuenta de SoundCloud, esta sería una excelente manera de compartir su salida.
fuente
Respuestas:
qb64,
10084 bytesVersión actualizada del antiguo Qbasic, descargable en http://www.qb64.net/
El recuento excluye los espacios, que no son obligatorios y solo están allí para dividir los datos en frases de tres notas para mayor claridad.
Comandos en la cadena de reproducción
Historia del golf:
Primera publicación: 4/4 veces a 4/2 veces, lo que significa que tengo algunas notas completas, pero no dieciséis notas.
Edición 1: La clave cambió de C (rango GG) a F (rango CC). Ahora solo tengo que realizar un cambio de octava una vez, para la C alta, que solo ocurre una vez, en lugar de todas las G bajas como antes.
Después de deshacerme de todos esos cambios de octava, no creo que haya más golf. Hay un total de 20
L
, pero no hay una forma obvia de evitarlos.La última frase (11 caracteres) es la misma que la primera, pero no hay forma de insertarla dos veces en menos de 11 caracteres. Los datos repetidos serían de solo 9 caracteres si
L4
se eliminaran las iniciales (parece innecesario ya que la longitud de la nota predeterminada parece ser un cuarto de nota, pero no está documentada, así que la dejé).fuente
JavaScript,
203198196195 bytes5 bytes guardados gracias a Dendrobium y 1 gracias a @PatrickRoberts.
Explicación
¡Pruébalo aquí en el navegador! Funciona en cualquier navegador que admita la API de audio web HTML5 .
fuente
Mathematica,
361287285 bytesFui por la precisión aquí. La salida es exactamente como se describe en la partitura, tocada con la trompeta. Puedes encontrar el archivo aquí .
Gracias a @ MartinBüttner por las sugerencias de golf.
fuente
%1
,%2
y%%
no guarde ningún byte sobrex="E5"
->x
(de hecho, al ver la frecuencia con la que los usa, debería ahorrar bastante usando variables). Luego puede guardar toneladas de bytes usandoEmitSount@Sound[SoundNote[#,5/#2,"Trumpet",SoundVolume->#3/17]&@@@{{%%,8,17},{%%,24,20},...}
y almacenando la nota más utilizada%
. Y a las 24 notas, podría ser más corto aún dividir una lista plana:SoundNote[#,5/#2,"Trumpet",SoundVolume->#3/17&@@@{%%,8,17,%%,24,20,%2,2,23,...}~Partition~3
Sonic Pi, 899 bytes
El tiempo está un poco apagado, pero creo que está bien.
Ligeramente golfizado:
fuente
MATLAB,
338327262258230 bytesfuente
SmileBASIC, 73 bytes
Todas las notas y tiempos son correctos. Usé una trompeta porque es lo más parecido en MIDI
fuente
Powershell,
183175159 bytesViaje de nostalgia, ¿a quién no le gustan los pitidos?
Explicación (sortof)
Esto se reproducirá en unos 45 segundos.
Esta es la primera vez que uso el Powershell de Windows, cualquier consejo sobre el golf es bueno.
versiones antiguas
175183fuente
BBC Basic, 111
Descargue el intérprete en http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
La puntuación excluye espacios en blanco y líneas nuevas, que no son esenciales y se agregan para facilitar la lectura
Compresión bastante estándar, 1 carácter ASCII por nota. Los parámetros de
SOUND
son los siguientes:El rango de la canción es de 13 notas, aunque solo se usan 4. Para obtener este rango en el rango de 95 números de ASCII imprimible, tuve que reducir la duración a un rango entero de 7 y tomar el módulo 7. Se usan las siguientes duraciones (en dieciseisavos) (con la excepción de 6, que nunca es utilizado): 1,2,3,4,6,8,12. Para producir estos números, me topé con la idea de dividir 12 por una potencia de
sqrt(2)
(aproximadamente 1,4) y truncar.El
SOUND1,0,1,1
es una molestia, que cuesta 12 bytes. Es necesario proporcionar una pausa entre notas de tono idéntico.fuente
Ruby + pitido, 178 bytes
Me tomó un tiempo hacer esto, creo que perdí el bote, pero lo que sea.
f
contiene las cuatro frecuencias utilizadas.n
contiene las cinco longitudes de nota utilizadas, en múltiplos de notas 16.a="00101...
contiene todos los tonos de nota seguidos de todas las longitudes de nota, como índices en las matrices respectivas.l
luego se establece en el índice 24 y en adelantea
. Luego, se construye un comando de pitido iterando a través de todo lo anterior y se ejecutafuente
C - (Sin procesar: 318 | WAV: 437)
PCM mono de 8 bits (sin signo) a 44800 Hz, 33,60 segundos.
Las dinámicas mezzo forte, fortissimo y forte se implementan de manera artística. Las fermatas podrían ser mejores.
El código se basa en
unsigned long long
ser 8 octetos y el sistema little endian.Compila y ejecuta con algo como:
Agregar
-DRAW
a la línea de compilación para la variante sin procesar.La salida sin formato se puede reproducir con, por ejemplo, SoX
play
como:fuente