O desafio é: gerar um arquivo de áudio feito de ruído branco.
Requisitos e instruções:
- Seu programa deve gerar um arquivo de áudio contendo apenas ruído branco, o que significa que a intensidade é a mesma para todas as frequências (razoáveis) e diferentes de zero [veja um gráfico de exemplo ];
- É preciso ser capaz de reproduzir o arquivo de áudio na versão mais recente do VLC [no momento em que você escreve sua resposta];
- O programa não precisa de aleatoriedade,
rand
funções ou leitura criptograficamente forte/dev/rand
; - O programa deve ser capaz de gerar pelo menos 1 hora de áudio, pelo menos em teoria (o que significa que limitações do sistema, como tamanho máximo de arquivo não se aplicam);
- Sua pontuação é o número de bytes no seu código-fonte, mais todos os bônus que se aplicam;
- Usar qualquer biblioteca externa de terceiros é bom;
- O programa deve funcionar sem acesso à Internet.
Os bônus são:
- -15%: permite especificar o formato do arquivo de áudio (pelo menos duas opções; o número de opções possíveis não altera a pontuação);
- -10%: permite especificar a duração do arquivo de áudio;
- -5%: permite especificar a taxa de bits do arquivo de áudio.
As configurações podem ser armazenadas em variáveis, arquivos ou fornecidas como parâmetros de linha de comando, à sua escolha. As porcentagens são calculadas a partir do número original de bytes, antes que qualquer bônus seja aplicado.
Respostas:
MATLAB, 25
grava um novo arquivo WAV no disco chamado
a
. Tem uma taxa de amostragem de 8 kHz e 16 bits por amostra no formato inteiro assinado. Os dados de origem são distribuídos uniformemente no intervalo[0,1]
, que é mapeado para o intervalo[0,32767]
após a conversão para o formato inteiro.MATLAB, 28-4 (10% + 5%) = 24
Não sei ao certo o que o OP quis dizer sobre como as configurações podem ser armazenadas nas variáveis, mas interpretei-o de uma maneira favorável a esse caso. Assumindo que:
A taxa de bits desejada (em bits / segundo) é fornecida pelo usuário na variável
b
. Os bits por amostra são codificados em 16.A duração desejada do arquivo (em amostras) é fornecida na variável
d
.O resultado é:
MATLAB, 16-4 (15% + 10%) = 12
Adicionando outra camada de sleaze em busca de bônus, faço outra suposição: a função desejada a ser usada para gerar o arquivo deve ser especificada na variável
f
. Em seguida, o código simplifica para:Os valores permitidos para a função são:
ou
Cada função fará com que o trecho acima grave um arquivo no formato apropriado (WAV ou
.au
) a uma taxa de amostragem de 8 kHz com a duração especificada. Tirei o bônus para a especificação da taxa de bits aqui, porque oauwrite
padrão é 8 bits por amostra em vez de 16 como owavwrite
faz. Não vejo uma maneira de harmonizar os dois sem usar mais caracteres.fonte
Bash, 34
Se você não quiser 'aleatoriedade' no disco rígido (muito mais lento)
SPIN, 28
fonte
/dev
.Mathematica 52 - 5 = 47
g
exporta um arquivo .wav de ruído branco des
segundos e 8000 bps.Exemplo: um arquivo de ruído branco de 6 segundos é exportado.
fonte
Supercollider, 89 - 10% = 80,1 bytes
Infelizmente, apesar de ter sido feito deliberadamente para geração de som / áudio, esse idioma não vai ganhar aqui. Mas é a primeira aparição de Supercollider no Code Golf, então isso é legal!
Esse envio perde principalmente porque configurar e fazer acontecer é um processo detalhado devido ao design do cliente / servidor desse idioma. Ainda assim, é uma linguagem legal com muito poder em muito pouco código quando você pede para fazer coisas mais complexas que o mero ruído branco.
A duração do arquivo é definida alterando o valor wait (). Eu poderia colocá-lo em uma variável, mas realmente não faz sentido, já que o Supercollider não tem o que falar. A interatividade está em manipular o código ao vivo enquanto o servidor ainda está em execução. Essencialmente, o IDE é a E / S (a menos que você crie uma interface do usuário para sua criação).
Aqui está a versão do golfe:
Aqui está uma versão com a opção de gravar em aiff ou wav e especifique um formato de amostra (int16, int8 e float são todas as opções). Infelizmente, mesmo com todos os bônus, a versão acima se sai melhor. Isso seria 139 - 30% = 97,3 bytes.
E aqui está uma versão desmontada desta última, para que você possa ver o que está acontecendo.
fonte
Bash + ALSA, pontuação: 44 (52 caracteres - (10% + 5%) bônus)
Mais longo que a outra
bash
resposta, mas aceita duração e taxa de bits. Também adiciona um cabeçalho razoavelmente correto ao arquivo, portanto deve ser razoavelmente portátil:Salve como um script
chmod +x
e execute:Observe que a saída .wav é para stdout, portanto deve ser redirecionada para um arquivo.
fonte
C
127115 bytesA maioria do código grava o cabeçalho de um arquivo * .au. Isso imprime um arquivo de som pseudo-aleatório para a saída padrão.
A taxa de amostragem pode ser ajustada alterando o
8000
.A duração pode ser ajustada pressionando
ctrl-c
sempre que você quiser parar :-)fonte
JavaScript, 167 bytes
CUIDADO: Diminua o volume antes da execução. O ruído branco é desagradável
Não gera arquivo, talvez não o que era esperado.
-4 bytes cortam ruído de reprodução apenas no canal esquerdo
fonte