O som do theremin foi imortalizado na música Good Vibrations, do The Beach Boys . Muitos também associam seu som ao tema da série original de Star Trek , embora aparentemente tenha sido uma emulação de soprano .
Esse desafio requer que você implemente um termo .
Entrada
- Obtenha entrada bidimensional de um mouse ou outro dispositivo de entrada (por exemplo, você pode usar um joystick), que produzirá um tom a partir de um dispositivo de saída de áudio da seguinte maneira:
- aumentar x aumentará a frequência do tom. Observe que a frequência aumenta exponencialmente com a nota musical; portanto, você deve implementar uma relação linear entre a posição x do mouse e a nota musical e
- aumentar y aumentará o volume do tom.
- Parece haver confusão em relação à forma de onda produzida por um theremin real ; portanto, para simplificar, uma onda senoidal (ou uma aproximação aproximada da mesma) deve ser usada.
Regras
- O tom produzido deve ter pelo menos uma faixa de 2 oitavas. Mais alcance é aceitável. O A-440 deve estar dentro da faixa.
- Para criar a aparência audível de frequência e amplitude continuamente variáveis, o intervalo de valores considerado em ambas as dimensões do dispositivo de entrada deve ser de pelo menos 500 Implementações podem abrir uma janela (pelo menos 500x500 pixels) para ler a entrada da posição do cursor do mouse. Ou, sem abrir uma janela, as coordenadas podem ser lidas diretamente do mouse ou de outro dispositivo de entrada.
- Deve haver um meio simples para interromper o programa - combinação de teclas, clique do mouse ou outro dispositivo de entrada comum. CTRL-c é suficiente.
- Quaisquer bibliotecas padrão podem ser usadas, desde que não implementem totalmente a solução sem nenhum outro trabalho necessário.
- Regras padrão para Code Golf e I / O
- Você pode parar deixando o mouse ou o dispositivo de entrada perder o foco na caixa de entrada.
Notas
- Como o tom de saída é gerado dinamicamente, é necessário ter cuidado para garantir que o tom seja uma forma de onda contínua; ou seja, não há cliques ou estalos sonoros causados por mudanças repentinas de fase ou amplitude.
- Você pode limitar a zona de tamanho de entrada para 500 por 500, mas pode ser maior.
Isso é código-golfe , então a resposta mais curta em qualquer idioma vence.
Agradecimentos especiais
Agradecimentos especiais ao Digital Trauma por fazer esse desafio e publicá-lo na Sandbox do Papai Noel Secreto. Fiz algumas edições e aqui está o post original.
o.type='sine'
é desnecessário, pois é o padrão. Você pode simplificardocument.onmousemove
para apenasonmousemove
.with(new AudioContext)o=createOscillator(onmousemove=e=>{o.frequency.value=9/innerWidth*e.x**2,v.gain.value=1-e.y/innerHeight}),v=createGain(),v.connect(destination),o.start(),o.connect(v)