3.5 KiB
title | topic | author | theme | header-includes | |
---|---|---|---|---|---|
Construction automatique de niveaux pour le jeu de rythme osu! à partir de fichiers audio | osu | Aboujaib Alexandre - 28173 | Copenhagen |
|
Presentation du problème
Le jeu osu!
- Jeu de rythme pour PC
- Sorti le 16 septembre 2007, adapté d'un jeu pour DS
- Environ 500 000 joueurs actifs
- Se joue avec une souris/tablette et clavier
{ width=50% }
{ width=40% }
Les beatmaps (niveaux)
::: columns
:::: column
{ width=110% }
::::
:::: column
{ width=110% }
::::
:::
Exemples de cercles
Exemples de sliders
Formulation du problème
Nous nous proposons de créer deux programmes permettant au mieux, à partir d’un fichier audio donné, de construire un niveau pour osu!.
Partie I : Analyse de musique
Approche en deux temps
Spécifications
Entrée : un fichier audio (format quelconque)
Sortie : des données relatives à la musique permettant le placement des notes :
(double | (double * double)) list
Processus retenu ici
Schéma du processus
Filtres physiques & Transformée de Fourier
::: columns
:::: column
{ width=90% }
::::
:::: column
::::
:::
Résultats
Résultat de l'extraction sur une musique (Bad Apple) pendant 15s
Résultats
Résultat de l'extraction sur la même musique pendant 120s
Résultats
Complexité
Limites, saturation et améliorations
Limites, saturation et améliorations
les fréquences ne sont pas correctement détéctées ici (car trop d'harmoniques)
Limites, saturation et améliorations
Limites, saturation et améliorations
une musique "dense" fait que la méthode d'extraction des amplitudes n'est pas précise
Partie II : placement spatial
Annexe : code Python
librairies utilisées ici
quelques fonctions utiles
parse music
: extraction de la liste des amplitudes et du "sample rate"
::: columns
:::: column
{ width=80% }
::::
:::: column
::::
:::
cleaning
: retirer les fréquences trop basses et hautes
get amp distribution
: usage de files de priorité pour extraire les maxima
get frequency distribution
: fréquence maximale pour chaque point
get sliders
: fusionner les notes trop proches en des 'sliders'
draw
: afficher les résultats
quelques données de test
::: columns
:::: column
{ width=75% }
::::
:::: column
::::
:::