Olá Habr! No último artigo,
“um padrão infinito baseado em números primos” , falei sobre um algoritmo que permite gerar infinitos padrões bonitos que são desenhos alienígenas ou algo tecnológico, como um dispositivo de chip. No entanto, o algoritmo para gerar padrões 2D também pode ser usado para criar melodias. Mais detalhes sob o corte.
Algoritmo de geração de melodia
Para criar melodias, criei um simples gerador de meandros com um sinal de desbotamento. Nesse caso, você pode sobrepor vários geradores de meandros uns sobre os outros. Em seguida, definimos os períodos dos geradores de meandros de acordo com as frequências das notas e definimos a amplitude dos geradores dependendo da presença da tecla “presa”. Como sinal de pressionamento de tecla, usei o valor de pixel de uma imagem 2D tirada de uma coluna vertical que pode ser movida pela imagem. A coluna contém 14 pixels, o que corresponde a 7 notas da 2ª e da 3ª oitava. Uma tecla possui apenas dois estados - pressionados ou não.
O gerador de meandros e funções para armazenar o resultado em um arquivo WAV que eu implementei como uma biblioteca separada para trabalhar com som. Ela está
aqui .
O programa para gerar música pode ser visto
aqui . É chamado simple_sound. O exe pronto pode ser encontrado no arquivo. Na saída, o programa cria um arquivo WAV "exemplo".
Exemplos de melodia
Uma das músicas mais interessantes,
example_dx1000_dy1000_x2018_y8 . O nome da melodia mostra o tamanho da mudança nas coordenadas X e Y, bem como as coordenadas iniciais. Outras melodias:
example_dx_dy_x5678_y7768example_dx_dy_y776897123example_y47exemploEm teoria, você pode refinar o algoritmo e usá-lo em jogos primitivos, para que as melodias do jogo nunca se repitam.