La gente ha escrito muchas cosas permitiendo que una cosa se visualice como otra. ¡Ahora propongo poder traducir letras a música! Es su trabajo escribir un programa que tome un archivo de texto y genere un archivo de sonido con cada letra convertida en una nota específica C3-C8
.
Descargo de responsabilidad: en realidad no espero que la música suene bien, pero espero sorprenderme.
Especificaciones
- Toma el nombre de un archivo como una cadena y el BPM (latidos por minuto) como int
- Haces mayúsculas
A
para ser la notaC3
- Y sube medio paso para cada personaje después en este orden:
ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
- Sí, no se usarán todos los caracteres, ya que eso abarca demasiadas octavas.
- Traduces todos los caracteres del archivo de esta manera
- Ponga las notas juntas en el BPM dado como notas negras
- Guarde como un archivo de sonido (supongo que midi será el más fácil, pero todo está bien) o reprodúzcalo
- Cualquier formato de entrada correcto está bien
- No hay lagunas estándar
- Este es el código de golf, por lo que gana el código más corto en bytes .
Bonos
- Permitir transposición de salida - 50 bytes
- Permitir que varias pistas se superpongan entre sí tomando múltiples archivos: 75 bytes
- Une letras consecutivas en una nota más larga: 50 bytes
Editar: Wow, tenemos puntajes negativos. Voy a anunciar el ganador el sábado.
Respuestas:
MATLAB, 159-50-50-75 = -16
Entrada de muestra
Salida de muestra
Genera ondas de sonido sinusoidales puras, muy funky (el diente de sierra también es posible, con una puntuación aún mejor, pero eso suena un poco ... demasiado funky). Funciona como una función, por lo que espera una matriz de caracteres (
['abc';'def']
) con una fila por 'pista'. Creo que está cubierto bajo 'cualquier formato de entrada sensato' , pero si el consenso general es que necesito leer un archivo, supongo que puedo cambiarlo. La entradai
es pistas de texto (de igual longitud),b
latidos por minuto yt
transposición (suministro 0 para no transpuesta). Combina dos senos en uno al compensar la entrada sinusoidal, por lo que obtuve los tres bonos, lo que me dio una puntuación negativa.Versión usando el archivo de entrada: 211-175 = 36
El argumento de entrada
i
ahora representa el nombre del archivo, otros parámetros sin cambios. Es posible que no funcione en versiones más recientes porque recibo una advertencia quetextread
pronto puede quedar en desuso. EDITAR: textread aparentemente se divide automáticamente en espacios en blanco, así que lo arreglé. Además, creo que pude haber contactado accidentalmente a algunos alienígenas con los sonidos extraños que se hicieron durante las pruebas.¿Qué versión prefieres? :)
fuente
.mat
archivos tienen un formato de entrada sensato. Cree un archivo .mat con una variable 'i' que tenga su texto. Luego, agregueload(i);
al comienzo de la línea 2 de la versión superior. Puntuación: -16 + 8 =-8
. Haré esto cuando tu comentario reciba más votos positivos que el mío, o cuando el OP tenga una opinión :)Snap ! - 401 - 75 = 326
Pruébelo en línea aquí.
Estoy usando este método de contar bytes para el programa.
Agregué reproducir múltiples sonidos a la vez.
La estructura básica es la misma que la original (ver más abajo), pero con la adición de
launch{}
.launch{}
comienza un nuevo hilo con el código dentro, permitiendo la concurrencia.El código como texto es:
Código original, 308.
Lucky Snap! tiene reproducción MIDI incorporada.;)
Desafortunadamente, no tiene una
indexOf
función, así que tengo que hacer una llamada externa de JavaScript, lo cual es bastante costoso.El
repeat () (#)
bloque proviene de la biblioteca de iteraciones.El código se puede escribir como un texto como este, que es cómo obtengo 308 bytes:
fuente
-1
deindexOf
? En este momento parece que si no está en la cadena, hace midi número 47.Mathematica, 219-50-75-50 = 44
Toma la lista de archivos de entrada, BPM y la cantidad de medios pasos para transponer como entrada y reproduce el sonido (desde un piano, cualquier otro instrumento tomaría más bytes). ¡No suena tan mal!
fuente
JavaScript (ES6) 377-50-50-75 = 202
Primero, aquí hay un fragmento ejecutable que usa
<input>
campos en lugar de lecturas de archivos:Y ahora, la entrada real:
Los tres argumentos son una serie de cadenas de ruta de archivo para reproducir simultáneamente, notas por minuto y número de medios pasos para transponer todas las entradas.
Con espacios en blanco y comentarios:
fuente