osutipe/pptx/presentation.md

178 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Construction automatique de niveaux pour le jeu de rythme osu! à partir de fichiers audio"
topic: "osu"
author: "Aboujaib Alexandre - 28173"
theme: "Copenhagen"
header-includes:
- \AtBeginDocument{\title[Construction automatique de niveaux pour osu!]{Construction automatique de niveaux pour le jeu de rythme osu! à partir de fichiers audio}}
---
# 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 dun **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
![](trame.png)
### Schéma du processus
![](process.png)
### Filtres physiques & Transformée de Fourier
::: columns
:::: column
![Un exemple de filtre](filtre_ex.png){ width=90% }
::::
:::: column
![Illustration de la FFT](fft.png)
::::
:::
### Résultats
![](dataBad.png){ width=60% }
Résultat de l'extraction sur une musique (Bad Apple) pendant 15s
### Résultats
![](dataBigBad.png)
Résultat de l'extraction sur la même musique pendant 120s
### Résultats
#### Complexité
![](complexity.png){ width=95% }
### Limites, saturation et améliorations
![](tetris2.png)
### Limites, saturation et améliorations
![](tetris2.png)
> les fréquences ne sont pas correctement détéctées ici (car trop d'harmoniques)
### Limites, saturation et améliorations
![](saturation.png)
### Limites, saturation et améliorations
![](saturation.png)
> 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
![](libs.png){ width=70% }
### quelques fonctions utiles
![](aux.png)
### `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% }
### quelques données de test
::: columns
:::: column
![](sample1.png){ width=75% }
::::
:::: column
![](sample2.png)
::::
:::
### interface
![](sample3.png)