As pessoas escreveram muitas coisas, permitindo que uma coisa fosse visualizada como outra. Agora, proponho poder traduzir letras para música! É seu trabalho escrever um programa que pega um arquivo de texto e gera um arquivo de som com cada letra convertida em uma nota específica C3-C8
.
Disclaimer - Na verdade, não espero que a música pareça boa, mas espero ser surpreendida.
Especificações
- Você pega o nome de um arquivo como uma string e o BPM (batimentos por minuto) como um int
- Você faz maiúsculas
A
para ser a notaC3
- E suba um meio passo para cada personagem depois nesta ordem:
ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
- Sim, nem todos os personagens serão usados, já que isso abrange muitas oitavas.
- Você traduz todos os caracteres no arquivo dessa maneira
- Coloque as notas juntas no BPM fornecido como semínimas
- Salvar como um arquivo de som (acho que o midi será o mais fácil, mas tudo está bem) ou reproduzi-lo
- Qualquer formato de entrada são
- Sem brechas padrão
- Isso é código-golfe, então o código mais curto em bytes vence!
Bónus
- Permitir transposição da saída - 50 bytes
- Permita que várias trilhas sejam sobrepostas, pegando vários arquivos - 75 bytes
- Junte letras consecutivas em uma nota mais longa - 50 bytes
Edit: Uau, temos pontuações negativas. Anunciarei o vencedor no sábado.
Respostas:
MATLAB, 159-50-50-75 = -16
Entrada de amostra
Saída de amostra
Gera ondas senoidais puras, muito descoladas (dente de serra também é possível, com uma pontuação ainda melhor, mas isso soa um pouco ... descolado demais ). Funciona como uma função, portanto, espera uma matriz de caracteres (
['abc';'def']
) com uma linha por 'faixa'. Eu acho que isso é coberto por 'qualquer formato de entrada sã' , mas se o consenso geral é que eu preciso ler um arquivo, acho que posso alterá-lo. A entradai
é faixas de texto (de igual comprimento),b
batidas por minuto et
transposição (fornecimento 0 para não transposto). Ele combina dois senos em um, compensando a entrada de seno, então recebi os três bônus, obtendo uma pontuação negativa.Versão usando o arquivo de entrada: 211-175 = 36
O argumento de entrada
i
agora representa o nome do arquivo, outros parâmetros inalterados. Talvez não funcione em versões mais recentes porque estou recebendo um aviso quetextread
poderá ser preterido em breve. EDIT: textread aparentemente automaticamente se divide em espaços em branco, então eu consertei isso. Além disso, acho que acidentalmente entrei em contato com alguns alienígenas com os sons estranhos emitidos durante o teste.Qual versão você prefere? :)
fonte
.mat
arquivos têm um formato de entrada sensato. Crie um arquivo .mat com uma variável 'i' que tenha seu texto. Em seguida, adicioneload(i);
no início da linha 2 da versão superior. Pontuação: -16 + 8 =-8
. Eu vou fazer isso quando o seu comentário recebe mais upvotes que a minha, ou quando o OP tem uma opinião :)Snap ! - 401 - 75 = 326
Experimente online aqui.
Estou usando esse método de contagem de bytes para o programa.
Eu adicionei a reprodução de vários sons ao mesmo tempo.
A estrutura básica é igual à original (veja abaixo), mas com a adição de
launch{}
.launch{}
inicia um novo thread com o código interno, permitindo a simultaneidade.O código como texto é:
Código original, 308.
Lucky Snap! tem MIDI tocando embutido.;)
Infelizmente, ele não tem uma
indexOf
função, então eu tenho que fazer uma chamada JavaScript externa, o que é bastante caro.O
repeat () (#)
bloco vem da biblioteca de iteração.O código pode ser escrito como texto como este, e é assim que obtenho 308 bytes:
fonte
-1
deindexOf
? Agora parece que se não na cadeia, ele faz midi número 47.Mathematica, 219 - 50 - 75 - 50 = 44
Leva a lista de arquivos de entrada, BPM e o número de meias etapas para transpor como entrada e reproduz o som (de um piano, qualquer outro instrumento levaria mais bytes.) Não parece tão ruim!
fonte
JavaScript (ES6) 377 - 50 - 50 - 75 = 202
Primeiro, aqui está um trecho executável que usa
<input>
campos em vez de leituras de arquivo:E agora, a entrada real:
Os três argumentos são uma matriz de strings do caminho do arquivo para tocar simultaneamente, notas por minuto e número de meias etapas para transpor todas as entradas.
Com espaço em branco e comentários:
fonte