Esta es la versión de audio del desafío de codificación de imágenes de Twitter .
Diseñe un formato de compresión de audio que pueda representar al menos un minuto de música en 140 bytes o menos de texto imprimible codificado en UTF-8.
Impleméntelo escribiendo un programa de línea de comandos que tome los siguientes 3 argumentos (después del nombre del programa en sí):
- La cuerda
encode
odecode
. - El nombre del archivo de entrada.
- El nombre del archivo de salida.
(Si su lenguaje de programación preferido carece de la capacidad de usar argumentos de línea de comandos, puede usar un enfoque alternativo, pero debe explicarlo en su respuesta).
La encode
operación se convertirá de su formato de audio elegido a su formato de "tweet" comprimido, y la decode
operación se convertirá desde su formato de "tweet" al formato de audio original. (Por supuesto, se espera que implemente una compresión con pérdida, por lo que el archivo de salida no necesita ser idéntico a la entrada, solo en el mismo formato).
Incluye en tu respuesta:
- El código fuente de su programa, en su totalidad. (Si es demasiado larga para esta página, puede alojarla en otro lugar y publicar un enlace).
- Una explicación de cómo funciona.
- Al menos un ejemplo, con un enlace a los archivos de audio originales, el texto "tweet" al que se comprime y el archivo de audio obtenido al decodificar el tweet. (El respondedor es responsable de las afirmaciones de "uso justo" de los derechos de autor).
Reglas
- Me reservo el derecho de cerrar cualquier laguna en las reglas del concurso en cualquier momento.
- [Editado el 24 de abril] Para la entrada de su
encode
función (y la salida de sudecode
función), puede usar cualquier formato de audio común y razonable, ya sea:- Forma de onda sin comprimir, como WAV.
- Forma de onda comprimida, como MP3.
- Estilo de "partitura", como MIDI.
- Su formato comprimido de "tweet" debe codificar los sonidos en el archivo de entrada. Por lo tanto, los siguientes tipos de salida no cuentan:
- Un URI o ruta de archivo que proporciona la ubicación donde se almacena la salida real.
- Una clave para una tabla de base de datos donde la salida real se almacena como un blob.
- Algo similar.
- Tu programa debe estar diseñado para comprimir archivos de música genéricos , así que no hagas cosas que obviamente estén demasiado vinculadas a tu canción de ejemplo específica. Por ejemplo, si está demostrando "Twinkle, Twinkle, Little Star", su rutina de compresión no debería codificar un símbolo específico para la secuencia do-do-so-so-la-la-so.
- La salida de su programa debería poder pasar por Twitter y salir ilesa. No tengo una lista de los caracteres exactos que son compatibles, pero trato de mantener letras, dígitos, símbolos y signos de puntuación; y evite los caracteres de control, combinando caracteres, marcadores BIDI u otras cosas extrañas como esa.
- Puede enviar más de una entrada.
Criterio de juzgar
Este es un concurso de popularidad (es decir, gana la mayoría de los votos positivos), pero se insta a los votantes a considerar lo siguiente:
Exactitud
- ¿Todavía puedes reconocer la canción después de que se ha comprimido?
- ¿Suena bien?
- ¿Todavía puedes reconocer qué instrumentos se están tocando?
- ¿Todavía puedes reconocer la letra? (Esto es probablemente imposible, pero sería impresionante si alguien lo lograra).
Complejidad
La elección de la canción de ejemplo es importante aquí.
- [Agregado el 24 de abril] Este desafío será más fácil con MIDI o formatos similares. Sin embargo, si hace un esfuerzo adicional para que funcione con formatos de forma de onda, eso merece un crédito adicional.
- Cual es la estructura Claro, puede cumplir el requisito de un minuto simplemente repitiendo las mismas 4 medidas un número arbitrario de veces. Pero las estructuras de canciones más complejas merecen más puntos.
- ¿Puede el formato manejar muchas notas que se reproducen al mismo tiempo?
El código
- Mantenlo lo más corto y simple posible. Sin embargo, este no es un código de golf, por lo que la legibilidad importa más que el recuento de caracteres.
- Los algoritmos inteligentes y complicados también están bien, siempre que estén justificados por una mejor calidad de resultados.