178 lines
3.5 KiB
Markdown
178 lines
3.5 KiB
Markdown
---
|
||
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
|
||
{ width=50% }
|
||
{ width=40% }
|
||
|
||
### Les beatmaps (niveaux)
|
||
::: columns
|
||
:::: column
|
||
{ width=110% }
|
||

|
||
::::
|
||
:::: column
|
||
{ width=110% }
|
||
::::
|
||
|
||
:::
|
||
|
||
### Exemples de cercles
|
||
|
||

|
||

|
||

|
||
|
||
### Exemples de sliders
|
||
|
||
{ width=50% }
|
||
{ width=50% }
|
||

|
||

|
||
|
||
|
||
### 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
|
||
|
||
{ width=60% }
|
||
|
||
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é
|
||
|
||
{ width=95% }
|
||
|
||
### 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
|
||
|
||
{ width=70% }
|
||
|
||
### 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
|
||
|
||
{ width=60% }
|
||
|
||
### `get amp distribution` : usage de files de priorité pour extraire les maxima
|
||
|
||
{ width=50% }
|
||
|
||
### `get frequency distribution` : fréquence maximale pour chaque point
|
||
|
||
{ width=60% }
|
||
|
||
### `get sliders` : fusionner les notes trop proches en des 'sliders'
|
||
|
||
{ width=75% }
|
||
|
||
### `draw` : afficher les résultats
|
||
|
||
{ width=60% }
|
||
|
||
### quelques données de test
|
||
|
||
::: columns
|
||
:::: column
|
||
{ width=75% }
|
||
::::
|
||
:::: column
|
||

|
||
::::
|
||
:::
|
||
|
||
### interface
|
||
|
||
 |