Caro Ribeiro220, tudo bem com você.
Então eu estive revendo seu post e realmente visitei a página do russo...aquele programa eu também tentei rodar aqui, mas notei que existem erros no mesmo, eu acho que foram colocados de propósito.
O que ele fez, realmente é real e funciona sim...vou tentar dar algumas dicas:
Veja só, eu venho trabalhando nessa área musical a muitos anos, sou da década de 80, já utilizei muitos chips dedicados para geração musical...dentre eles quero destacar o M114, um ótimo chip elaborado com uma das melhores e mais interessantes técnicas de geração musical que eu já tenho visto até hoje, é um chip da SGS, projeto italiano, feito por Marcos Tonela, na época projetista na SGS.
Tenho criado várias aplicações nessa área e atualmente estou me dedicando a sintese musical, minha tese se baseia em gerar e controlar de forma adequada com qualidade formas complexas de ondas timbrais utilizando-se de técnicas em mcus populares.
A técnica é interessante e se baseia na multiplexação e demultiplexação de sinais, "guarde bem isso"....se desejar entrar nesse mundo.
A música eletrônica, sempre foi e sempre será rodeada de mistérios e segredos guardados a 7 chaves.
Eu venho estudando a muitos anos a geração de sons com microcontroladores e o mais complicado nessa história toda não é em partes, o software de geração e controle das "wave tables" (guarde bem essa nomeclatura), pois ela é o caminho ideal e mais acertado para iniciar o seu projeto musical. E sim! A velocidade de processamento, pois quanto maior for a sua velocidade de processamento, melhor conseguirá processar todas as etapas da sintese como um todo, ADSR, LEITURA DAS TABELAS DE ONDA, VOLUME, ETC...
Anote ai:
Em relação ao ADSR, pode-se utilizar uma técnica muito simples e poderosa, é justamente a curva natural do instrumento "sampleado", ou seja na hora de amostrar o instrumento, você terá naturalmente o ADSR dele na própria amostra, por exemplo um acordeon, onde a curva inicial é lenta.
Outro ponto importante e muito importante mesmo, é você concentrar todo seu esforço em criar amostras curtas ou longas, tudo dependerá da sua quantidade de memória disponivel para armazenamento de suas amostras com os identificados pontos start/end looping.
Looping é um ponto dentro da amostra que permitirá sua amostra "rodar" indefinidamente enquanto um tecla estiver pressionada "preste atenção nisso".
Vamos lá:
Para você gerar um timbre qualquer precisará de uma amostra (timbre trabalhado com o sample loop), sample loop é o ponto de inicio e de fim dentro de uma amostra complexa ou simples, onde o inicio e o final se intercalam suavemente, afim de suavizar ao máximo os desencontros entre uma tabela e outra.
O próximo passo é gerar as notas musicais, ou seja, essa amostra que foi gerada, normalmente se utiliza o sampling em DÓ, e eu particularmente utilizo o sampling de frequencia menor quanto possível para gerar as demais a partir desta...alguns projetos tenho visto o pessoal gerar a nota o quanto mais alta possivel e depois se vem decrementanto o oscilador principal até atingir as notas mais baixas...
Porque eu utilizo frequencias baixas como base do sampling? Faço isso porque, à maior quantidade de amostras por segundo e melhor definição da amostragem, pois quanto maior a amostragem, maior será a distorção de fase da mesma.
Agora você precisa concatenar a amostragem do timbre que fez, ou melhor adequar o timbre que originalmente foi feito em DÓ (por exemplo 523hz), rodar isso dentro de um oscilador, ou criar um oscilador que "olhe" para essa tabela de timbres e oscile dentro dela com "precisão".
Isso mesmo, precisão, isso é conseguido com uma técnica chamada DDS, foi inventado por um intusiasta lá pelos anos 70 salvo engano, hoje em dia é muito utilizado onde se deseja precisão.
Mas como tudo que é BOM é dificil de conseguir, o DDS, tem suas vantagens que são, precisão da frequencia gerada e estabilidade, MAS, existe um tal de JITER, que detona todo o processo.
Eu explico, o JITER (antes que me corrijam acho que é assim que se escreve, kkk)...é um espurio, se assim podemos dizer, é uma sujeira que aparece quando se trabalha com DDS, quando vista no osciloscópio se nota uma leve defasagem, tipo um retardo, entre umas ondas e outras é como se houve-se uma dessincronização aleatória no sinal gerado.
Isso afeta diretamente a qualidade do som gerado, o que acontece é o aparecimento de um harmônico expúrio junto com o sinal de audio, quanto maior a frequencia maior o JITER , pronto aí melou todo o meio de campo e agora?
Bom existe uma solução para resolver ou pelo menos amenizar essa porcaria de JITER, ou seja, quanto maior for a frequencia da CPU para gerar o DDS, menos será o JITER...
Veja só, o ideal seria utilizar um processador veloz, acima de 50 mips com barramento de 16bits ou mais, o ideal seria os de 32 bits da atualidade. MAS EXISTE AINDA UMA ESPERANÇA PARA O LINDINHOS DE 8 BITS, TÁ BOM....KKK
Um DSP, também seria legal, mas não necessariamente importante para a geração musical, pois um MCU consegue dar conta do recado numa boa.
Nesse caso o segredo é um MCU, veloz, velocidade é importante para conseguir também gerar a polifonia, quanto mais veloz for o MCU, maior será a quantidade de canais alcançados, por exemplo um PIC18 conseguir ler tranquilamente uns 8 canais de polifonia, sendo que cada canal poderia gerar um instrumento musical, interessante né...
Dá uma olhada nos meus testes de laboratório onde utilizo um PIC18 para gerar 8 instrumentos de percução, "BUMBO, PRATO CURTO, LONGO, CAIXA, BONGO, TAMBORIM e CLAVES", ainda gera o timbre para a pedaleira, no meu caso são 8 timbres selecionaveis, TROMBONE, FLUTE16 e 8, ETC.. Nesse projeto piloto, utilizo (3) dacs de 8 bits r2r e envio esse sinal para um filtrinho PB.
https://www.youtube.com/watch?v=BmYQO4yxKZ8Outra coisa, tanto faz se sua rotina será em C ou assembler, o que importa é a utilização correta das técnicas...
Todos os 8 instrumentos + o timbre da pedaleira podem ser tocados simultaneamente, ok...portanto nesse caso temos um polifonia de 9 canais, com muito boa qualidade sonora.
O ideal é utilizar conversão 12 bits para cima, hoje existem DACs ótimos de 16 bits com preço muito baixo, caso do tda1311 da philips...
Aí vai outra dica, ideal é utilizar DACs prontos como o que mencionei acima e selecionar um MCU com driver interno i2s, pois nesse caso você apenas envia o resultado do seu processamento do som para o buffer do driver i2s e ele se encarrega junto com o DAC de todo o processo sonora final...Uffa, como apanhei com isso...só DEUS.
Outra dica muito importante:
Como é que eu consigo ler as tabelas de timbres com tamanhos variáveis com base no DDS?
Simples, você vai criar uma rotina de leitura sequencial, essa rotina que relativamente simples de ser implementada, terá três gatilhos, um de inicio e outro de ponto final da leitura sendo que antes do ponto de final, há o gatilho de looping (LEMBRA QUE ESSE É O LOOPING CONTINUO QUE VOCÊ MARCOU NO SEU SAMPLE). Bom, você pode ter duas formas de ler esse looping, uma delas é criar uma rotina que leia o protocolo WAV, pois é nele que estará assinalado o ponto de looping que você marcou no seu sampler. Outra forma é você fazer isso manualmente, marcando o endereço de looping de cada amostra que fizer.
Lembre-se que nesse caso você terá que eliminar o protocolo WAV da amostra, deixando apenas o sinal puro PCM, se não estou enganado, você elimina os primeiros 46 bytes do sampler...
Bom, feito o seu leitor de tabelas que esta atrelado ao seu DDS, você repete isso até o número que sua MCU conseguir rodar esses trecos, por isso da velocidade, quanto maior melhor...
Lembre-se estamos apenas tratando até agora da execução das wavetables, ainda falta o MIXER, sim, existe a etapa de mixagem via softwares, desses canais, a relação é assim:
Soma-se o número de canais e divide-se pelo total de canais, ou seja:
Tenho 10 canais, a resolução de cada canal é 8 bits, então eu pego 2^8 x 10 = 2560, porém o meu buffer final de saida é de 8 bits, ou seja o máximo que eu posso enviar para lá é 8 bits, sendo que 2560 equivale
a 12 bits de largura (dica: em um DSP ou MCUs como ARM, há um recurso que ajusta esse valor adequadamente ao buffer), bom agora eu desloco a direita 4 casas, afim de caber nos 8 bits de saida...
Esse não é o melhor processo a se fazer, mas para esse caso em especifico funciona bem...
Por isso quanto maior for a resolução em bits menos será a perda de bits no final da mixagem, 16 bits é ideal e dá para gerar uma quantidade muito grande de canais com ótima qualidade final com perdas impercepitiveis...se bem que há outras formas de realizar a essa mixagem ou interpolação de forma a eliminar ao máximo as perdas ou até mesmo de não ter nenhuma perda.
Atualmente tenho criado um algorítimo com capacidade de gerenciar até 8 mil amostras em tempo real...Uauuuu....Só por DEUS, consegui isso e devo e ele todas as coisas.
É mais ou menos por ai...espero ter contribuido de alguma forma para o bem...Obrigado