Hoje, 11 de novembro de 2015, é o Dia dos Veteranos nos Estados Unidos. " Taps " é a corneta tocada nos funerais militares dos EUA:
( "Torneiras" no SoundCloud da vtmiller )
É uma melodia simples, com apenas vinte e quatro notas e usando apenas quatro notas diferentes. Aqui está a partitura:
( fonte )
Desafio
Escreva um programa ou função que reproduza "Taps" ou emita um arquivo de áudio de "Taps" em qualquer formato de arquivo de áudio comum (por exemplo, MP3, WAV, MIDI). Pode ser tocado em qualquer tecla, usando qualquer tipo de instrumento ou ruído de bipe disponível no seu idioma. Por exemplo, pode parecer um piano em vez de uma corneta. (Embora ainda seja necessário apenas um tipo de instrumento.)
Todas as vinte e quatro notas devem ser tocadas com afinação, duração e espaçamento precisos. Alguém familiarizado com "Taps" deve poder executar seu código e reconhecer facilmente a música que está sendo tocada.
A duração da melodia (do início da primeira nota até o final da última nota) deve estar entre 30 e 70 segundos. Como opção, você pode ter até 5 segundos de silêncio preenchendo o início e / ou o final do seu arquivo de som; portanto, um arquivo de 80 segundos é o mais longo permitido.
Obviamente, você não pode simplesmente baixar a música on-line em algum lugar ou extraí-la de uma biblioteca de áudio que a possui como amostra. No entanto, você pode usar bibliotecas de áudio que podem reproduzir / compor notas individuais e criar arquivos de áudio.
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence. No entanto, para esse desafio em particular, incentivo você a não se concentrar na contagem de bytes, especialmente à custa da qualidade do som. Golf seus envios, mas permita-se ser criativo com a escolha do instrumento ou a metodologia de saída de som. Esse desafio é para homenagear veteranos, não para gritar uma versão quase irreconhecível de "Taps".
Observe que você pode incorporar arquivos de áudio do SoundCloud diretamente nas postagens , colando o link em uma linha vazia. Se você tiver uma conta no SoundCloud, essa seria uma ótima maneira de compartilhar sua saída.
fonte
Respostas:
qb64,
10084 bytesVersão atualizada do antigo Qbasic, disponível para download em http://www.qb64.net/
A contagem exclui os espaços, que não são necessários e apenas existem para dividir os dados em frases de três notas para maior clareza.
Comandos na cadeia de reprodução
História do golfe:
Primeiro post: de 4/4 a 4/2, o que significa que tenho algumas notas inteiras, mas não há semicolcheias.
Edição 1: Chave alterada de C (faixa GG) para F (faixa CC). Agora só preciso realizar uma alteração de oitava uma vez, para o C alto, que ocorre apenas uma vez, em vez de todos os G's baixos, como antes.
Tendo me livrado de todas essas mudanças de oitava, acho que não há mais para jogar golfe. Há um total de 20
L
, mas não há uma maneira óbvia de evitá-los.A última frase (11 caracteres) é igual à primeira, mas não há como inseri-la duas vezes em menos de 11 caracteres. Os dados repetidos teriam apenas 9 caracteres se a inicial
L4
fosse eliminada (parece desnecessário, pois o tamanho padrão da nota parece ser semínima, mas não está documentado, então eu o deixei.)fonte
JavaScript,
203198196195 bytes5 bytes salvos graças ao Dendrobium e 1 graças ao @PatrickRoberts.
Explicação
Teste aqui no navegador! Funciona em qualquer navegador que suporte a API de áudio da Web HTML5 .
fonte
Mathematica,
361287285 bytesEu fui para a precisão aqui. A saída é exatamente como descrito na partitura, tocada com a trombeta. Você pode encontrar o arquivo aqui .
Obrigado a @ MartinBüttner por sugestões de golfe.
fonte
%1
,%2
e%%
não salve nenhum bytes em excessox="E5"
->x
(na verdade, vendo quantas vezes você os usa, você deve economizar bastante usando variáveis). Em seguida, você pode economizar toneladas de bytes usandoEmitSount@Sound[SoundNote[#,5/#2,"Trumpet",SoundVolume->#3/17]&@@@{{%%,8,17},{%%,24,20},...}
e armazenando a nota mais usada em%
. E 24 notas pode ser mais curto ainda para particionar uma lista simples:SoundNote[#,5/#2,"Trumpet",SoundVolume->#3/17&@@@{%%,8,17,%%,24,20,%2,2,23,...}~Partition~3
Sonic Pi, 899 bytes
O tempo está um pouco fora, mas acho que está tudo bem.
Golfe leve:
fonte
MATLAB,
338327262258230 bytesfonte
SmileBASIC, 73 bytes
Todas as notas e horários estão corretos. Eu usei uma trombeta porque é a coisa mais próxima do MIDI
fonte
Powershell,
183175159 bytesViagem de nostalgia, quem não gosta de bipes ?!
Explicação (sortof)
Isso será reproduzido em cerca de 45 segundos.
Esta é a minha primeira vez usando o PowerShell do Windows, todas as dicas sobre golfe são bem-vindas.
Versões antigas
175183fonte
BBC Basic, 111
Faça o download do intérprete em http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
A pontuação exclui espaços em branco e novas linhas, que não são essenciais e adicionadas para facilitar a leitura
Compressão bastante padrão, 1 caractere ASCII por nota. Os parâmetros de
SOUND
são os seguintes:O alcance da música é de 13 notas, embora apenas 4 sejam usadas. Para obter esse intervalo no intervalo de 95 números do ASCII imprimível, tive que espremer a duração em um intervalo inteiro de 7 e usar o módulo 7. As durações a seguir (em décimos sextos) são usadas (com exceção de 6, que nunca é utilizado): 1,2,3,4,6,8,12. Para produzir esses números, tive a idéia de dividir 12 por um poder de
sqrt(2)
(aproximado por 1,4) e truncar.A
SOUND1,0,1,1
é um aborrecimento, custando 12 bytes. É necessário fornecer uma pausa entre as notas de afinação idêntica.fonte
Ruby + bipe, 178 bytes
Demorei um pouco para fazer isso, acho que perdi o barco, mas tanto faz.
f
mantém as quatro frequências usadas.n
contém os cinco comprimentos de notas usados, em múltiplos de notas de 16ª.a="00101...
mantém todos os arremessos de notas seguidos por todos os comprimentos das notas, como índices nas respectivas matrizes.l
é então definido para o 24º índice e em diante dea
. Em seguida, um comando de bipe é construído iterando através de todas as opções acima e executadofonte
C - (Bruto: 318 | WAV: 437)
PCM mono de 8 bits (não assinado) a 44800 Hz, 33,60 segundos.
As dinâmicas mezzo forte, fortíssimo e forte são implementadas de maneira um pouco artística. Os fermatas poderiam ser melhores.
O código depende de
unsigned long long
8 octetos e o sistema é pouco endian.Compile e execute com algo como:
Adicione
-DRAW
à linha de compilação para variante bruta.A saída bruta pode ser reproduzida com, por exemplo, o SoX
play
como:fonte