Esta é a versão em áudio do desafio de codificação de imagens do Twitter .
Crie um formato de compactação de áudio que possa representar pelo menos um minuto de música em 140 bytes ou menos de texto codificado em UTF-8 imprimível.
Implemente-o escrevendo um programa de linha de comando que use os três argumentos a seguir (após o nome do próprio programa):
- A sequência
encode
oudecode
. - O nome do arquivo de entrada.
- O nome do arquivo de saída.
(Se sua linguagem de programação preferida não possui a capacidade de usar argumentos de linha de comando, você pode usar uma abordagem alternativa, mas deve explicá-la em sua resposta.)
A encode
operação será convertida do formato de áudio escolhido para o formato compactado de "tweet" e a decode
operação será convertida do formato de "tweet" para o formato de áudio original. (Obviamente, você deve implementar a compactação com perdas, para que o arquivo de saída não precise ser idêntico à entrada, apenas no mesmo formato.)
Inclua na sua resposta:
- O código fonte do seu programa, na íntegra. (Se for muito longo para esta página, você pode hospedá-la em outro lugar e postar um link para ela.)
- Uma explicação de como isso funciona.
- Pelo menos um exemplo, com um link para o (s) arquivo (s) de áudio original (s), o texto do “tweet” que ele compacta e o arquivo de áudio obtido pela decodificação do tweet. (O respondente é responsável pelas afirmações de "uso justo" dos direitos autorais.)
Regras
- Reservo-me o direito de fechar as brechas nas regras do concurso a qualquer momento.
- [Editado em 24 de abril] Para a entrada de sua
encode
função (e a saída de suadecode
função), você pode usar qualquer formato de áudio comum e razoável, seja ele:- Forma de onda não compactada, como WAV.
- Forma de onda compactada, como MP3.
- Estilo "Partituras", como MIDI.
- Seu formato "tweet" compactado deve realmente codificar os sons no arquivo de entrada. Portanto, os seguintes tipos de saída não contam:
- Um caminho de arquivo ou URI que fornece o local onde a saída real está armazenada.
- Uma chave para uma tabela de banco de dados onde a saída real é armazenada como um blob.
- Qualquer coisa parecida.
- Seu programa deve ser projetado para compactar arquivos de música genéricos ; portanto, não faça coisas que obviamente estejam ligadas ao seu exemplo específico de música. Por exemplo, se você está demonstrando "Twinkle, Twinkle, Little Star", sua rotina de compactação não deve codificar um símbolo específico para a sequência faça-o-lo-la-la-lo.
- A saída do seu programa deve ser capaz de passar pelo Twitter e sair ilesa. Não tenho uma lista dos caracteres exatos suportados, mas tente seguir letras, dígitos, símbolos e pontuação; e evite caracteres de controle, combinando caracteres, marcadores BIDI ou outras coisas estranhas como essa.
- Você pode enviar mais de uma entrada.
Critérios de julgamento
Este é um concurso de popularidade (ou seja, a maioria das vitórias líquidas), mas os eleitores devem considerar o seguinte:
Precisão
- Você ainda consegue reconhecer a música depois de comprimida?
- Isso soa bem?
- Você ainda consegue reconhecer quais instrumentos estão sendo tocados?
- Você ainda consegue reconhecer a letra? (Isso provavelmente é impossível, mas seria impressionante se alguém conseguisse.)
Complexidade
A escolha da música de exemplo é importante aqui.
- [Adicionado em 24 de abril] Este desafio será mais fácil com formatos MIDI ou similares. No entanto, se você fizer um esforço extra para fazê-lo funcionar com formatos do tipo de forma de onda, isso merece crédito extra.
- Qual é a estrutura? Claro, você pode atender ao requisito de um minuto simplesmente repetindo as mesmas quatro medidas um número arbitrário de vezes. Mas estruturas musicais mais complexas merecem mais pontos.
- O formato pode lidar com muitas notas sendo tocadas ao mesmo tempo?
O código
- Mantenha-o o mais curto e simples possível. No entanto, como este não é um código de golfe, a legibilidade importa mais do que a contagem de caracteres.
- Algoritmos inteligentes e complicados também são bons, desde que justificados pela melhoria da qualidade dos resultados.