Nota: Não estou perguntando como criar um clone de um deles. Estou perguntando sobre como eles funcionam.
Tenho certeza que todo mundo já viu os jogos em que você usa seus próprios arquivos de música (ou os fornecidos) e os jogos produzem níveis baseados neles, como Audiosurf e Beat Hazard .
Aqui está um vídeo do Audiosurf em ação, para mostrar o que quero dizer.
Se você fornecer uma música heavy metal, terá um conjunto completamente diferente de obstáculos, inimigos e experiência de jogo de algo como Vivaldi.
O que me interessa é como esses jogos funcionam. Eu não sei muito sobre áudio (bem, do lado dos dados), mas como eles processam a música para entender quando ela se acalma ou quando está acelerando? Eu acho que eles poderiam apenas alimentar os valores de afinação (supondo que esse tipo de coisa exista nos arquivos de áudio) para formar um nível, mas isso não explicaria completamente.
Estou procurando uma explicação, alguns links para artigos sobre esse tipo de coisa (tenho certeza de que há um termo ou termos para isso) ou mesmo uma implementação de código aberto desse tipo de coisa ;-)
EDIT: Após algumas pesquisas e uma pequena ajuda, descobri a FFT (Fast Fourier Transform). Talvez isso seja um passo na direção certa, mas é algo que não faz sentido para mim ... ou se encaixa no meu conhecimento físico das ondas.
fonte
Respostas:
O termo que você procura é processamento / análise de sinal. Existem muitas técnicas envolvidas, mas a fundamental que esses jogos fazem uso é Detecção de batida . Isso tenta calcular o andamento da música e onde estão as batidas em uma medida e, portanto, separar os obstáculos a uma distância apropriada para coincidir com cada batida.
A maneira como os jogos sabem quando "entrar em ação" etc pode variar de muito simples e medir a amplitude (volume) da forma de onda ou algo mais complexo, como isolar o volume de certas frequências e medir seu volume.
Se você estiver interessado, consulte o Digital Signal Processing para ver como você pode analisar as formas de onda, que é essencialmente o que esses jogos estão fazendo na fase de carregamento.
Esses links são bons para você começar:
Introdução à
Teoria e Técnicas de Processamento de Som da Música Eletrônica
Introdução aos Filtros Digitais
Espero que ajude :)
-Raio
EDIT: Acabei de ver sua edição sobre as transformações de Fourier e pensei em acrescentar algumas dicas, embora não seja especialista em nada!
FFT é uma maneira de calcular a transformada de Fourier real de uma forma de onda. Basicamente, se você carregar um arquivo de áudio no Audacity , verá a forma de onda com a linha do tempo na parte superior, conhecida como domínio do tempo . A FFT converterá um sinal do domínio do tempo no domínio da frequência (basicamente todas as frequências que ocorrem no áudio).
Essa conversão é útil para análise espectral. Em um exemplo de jogo, se você fizesse uma transformação de Fourier, poderia calcular facilmente a quantidade de ocorrências de alta frequência no áudio e, a partir disso, adicionar efeitos visuais cintilantes, estrelas ou algo associado a sons tipicamente de alta frequência. Para as frequências baixas, você pode ter monstros grandes e glutões movendo-se no tempo com os sons graves, etc.
fonte
Aqui está uma excelente série de tutoriais em sete partes sobre este tópico, da Badlogic Games. Eles cobrem tudo, desde o básico até a implementação.
http://www.badlogicgames.com/wordpress/?cat=18
Eles tentam imitar o algoritmo Audiosurf com código e tudo.
fonte
Os dados provenientes da análise da variação da energia espectral são suficientes para gerar esse tipo de mapa. Aqui, o problema pode estar se houver muitos dados para processar: não que tipo de dados são usados, mas como.
Depois de ver alguns vídeos, estou começando a acreditar que os dados são movidos ainda mais no domínio do recurso (domínio do tempo -> domínio da frequência -> domínio do recurso). O software gera dados usando as alterações de energia espectral e tenta reconhecer os recursos conhecidos, depois usa as informações sobre os recursos para configurar o mapa. O reconhecimento pode ser feito por clusterização, probabilidade máxima, redes neurais, algoritmo genético e assim por diante.
Depois de concluir o reconhecimento, você tem informações como: onde o recurso se encontra no tempo e na frequência , que tipo de característica é encontrada, a velocidade que o vetor de característica está se movendo e assim por diante; você pode usar esses dados para alimentar um algoritmo de geração de mapas, deixando espaço para melhorias, como criar algoritmos de reconhecimento melhores, reconhecer mais famílias de recursos, extrair mais dados, encontrar novas maneiras de "renderizar" esses dados e assim por diante.
fonte