--- title: "Construction automatique de niveaux pour le jeu de rythme osu! à partir de fichiers audio" topic: "osu" author: "Aboujaib Alexandre" theme: "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 ![logo](osuLogo.png){ width=50% } ![tablet](tablet.png){ width=40% } ### Les beatmaps (niveaux) ::: columns :::: column ![Définition d'une beatmap](wikibeatmap.png){ width=110% } ![Beatmap en jeu](gameplay.jpg) :::: :::: column ![Liste de nouvelles beatmaps](MapList.png){ width=110% } :::: ::: ### Exemples de cercles ![](exemplesEditeur.png) ![](rcMusicRepresentation.png) ![](rcDifficultySpike.png) ### Exemples de sliders ![](sliderSimple.png){ width=50% } ![](sliderWave.png){ width=50% } ![](rcOffScreen.png) ![](rcSliderPath.png) ### 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 (avec un format quelconque) *Sortie :* des données relatives à la musique permettant le placement des notes #### Processus retenu ici ![](trame.png) ### Filtres physiques & Transformée de Fourier ::: columns :::: column ![](filters.png){ width=80% } :::: :::: column ![](fft.png) :::: ::: ### Résultats ![](dataBad.png){ width=60% } ### Résultats ![](dataBigBad.png) ### Résultats #### Complexité ![](complexity.png){ width=95% } ### Limites et saturation ![](tetris2.png) ### Limites, saturation et améliorations ![](saturation.png) # Partie II : placement spatial # Annexes : code Python ### `parse music` : extraction de la liste des amplitudes et du "sample rate" ::: columns :::: column ![](code/parsing_1.png){ width=80% } :::: :::: column ![](code/parsing_2.png) :::: ::: ### `cleaning` : retirer les fréquences trop basses et hautes ![](code/cleaning.png){ width=60% } ### `get amp distribution` : usage de files de priorité pour extraire les maxima ![](code/getDistr.png){ width=50% } ### `get frequency distribution` : fréquence maximale pour chaque point ![](code/getFreqs.png){ width=60% } ### `get sliders` : fusionner les notes trop proches en des 'sliders' ![](code/getSliders.png){ width=75% } ### `draw` : afficher les résultats ![](code/display.png){ width=60% }