Primeiro Trabalho (menor)
Primeiro Trabalho (menor, para nota)
Neste trabalho vamos construir um sintetizador monofônico baseado num oscilador por consulta a tabela (que conterá um período de uma forma de onda). Consideraremos que a interface do sintetizador é o teclado normal do computador, mas você pode usar um controlador MIDI se quiser. Antes de você começar a escrever sua solução, recomendamos que abra o Pd e crie os objetos a seguir, lendo o help de cada um deles, pois todos serão úteis na solução: [tabosc4~], [eadsr~], [mtof], [key], [select] e [moses]; crie também um vetor (Inserir->Vetor), abra o help dele e clique em "See table-help". No caso de escolher usar um controlador MIDI, leia também o help do objeto [notein]. Diversos patches de exemplo distribuídos com o Pd também poderão ser úteis; você os encontrará em Ajuda->Navegador de ajuda do Pd->Pure Data.
Três itens são importantes: a geração/manipulação da forma de onda que será tocada, o mapeamento entre teclas do teclado e frequências das notas e a geração/controle do envelope temporal que controla a amplitude do sinal. Vamos permitir a modificação da forma de onda através do teclado numérico e o controle do início/fim dos sons através das letras (ou do controlador MIDI).
Podemos criar formas de onda e armazená-las em um vetor enviando mensagens, que podem usar os geradores default do Pd ou ler valores arbitrários de um arquivo texto (veja o patch de exemplo do Pd 2.control.examples/15.array.pd). É importante que seu sintetizador ofereça 10 formas de onda diversas associadas a cada uma das teclas numéricas; sinta-se totalmente livre para experimentar e escolher as formas de onda que quiser. A interface gráfica do vetor permite também que você "desenhe" formas de onda com o mouse, e grave o resultado em arquivos para reutilizá-las (a receita está no patch de exemplo do Pd).
Para controlar o sintetizador usaremos as teclas de "A" a "Z" (você pode se quiser tratar separadamente as maiúsculas e minúsculas, mas isso é opcional). Cada tecla deve produzir uma nota diferente, sendo que o mapeamento das teclas em frequência será escolha sua. Você pode usar [mtof] para converter valores ASCII em frequências ou mapear as teclas imitando a disposição de algum instrumento musical. Além disso, você pode mapear as teclas em uma escala convencional (como a escala cromática de 12 tons por oitava ou a escala pentatônica) ou em uma escala inventada por você, fique à vontade para experimentar. Opcionalmente, você pode usar outras teclas (não-alfanuméricas) do teclado para mudar o padrão de mapeamento e permitir a troca de escalas durante a performance.
Finalmente, o envelope de amplitude que determinará o início e fim das notas será do tipo ADSR (Attack-Decay-Sustain-Release) exponencial, usando o objeto [eadsr~]. O help dele não é muito didático, mas você entenderá seu funcionamento experimentando com os valores da entrada (os tempos estão em milissegundos e o nível de sustentação é um valor no intervalo [0...1]). Observe que o objeto [key] produz informação tanto quando a tecla é pressionada quanto quando ela é solta, e isso será importante para iniciar e finalizar o envelope ADSR. Se você estiver utilizando um controlador MIDI com sensibilidade de ataque, você pode utilizar adicionalmente a informação de velocity para modificar a amplitude do envelope.
Caso queira ler outras coisas relacionadas a este exercício, você encontrará informações úteis no capítulo 4 do tutorial do Farnell (Pure Data Audio), e também nos patches de help distribuídos com o Pd (por exemplo 3.audio.examples/C10.monophonic.synth, D02.adsr.pd e D11.sample.poly.pd).
Bom trabalho! Lembre-se que a entrega precisa ser feita antes da próxima aula (15:55 do dia 1/4).