Je remets en ligne de l'explication sur les formats BMS et BME utilisés sur les simulateurs Beatmania étant donné qu'il y a très peu de ressources à ce sujet en français et même en anglais. En même temps c'est plutôt normal vu que ça reste très marginal comme jeu.
Explication générale du format
Le format BMS (Be-Music Script) est un type de fichier utilisé pour représenter les notes d'une musique Beatmania ou Pop'n'Music. Il a été créé (si je ne me trompe pas) à la base pour Be-Music, certainement un des premiers simulateurs Beatmania. Il a ensuite laissé la place au format BME (E pour extension ou truc du genre :p), du fait qu'avec l'apparition de IIDX on ne joue plus avec 5 mais avec 7 touches.
La particularité du format BME est que c'est une extension du format BMS et par conséquent il assure la rétrocompatibilité (pour peu que ce soit bien codé).
Du côté utilisation, ce format est le plus largement utilisé sur les simulateurs Beatmania existants (en fait je crois que c'est le seul) autant pour les rip des mix officiels que pour les créations indépendantes. C'est donc inconcevable que je fasse le simulateur sans la prise en charge de ce format. Ne pas le faire serait aussi stupide que de faire un éditeur de texte qui ne lit pas les fichiers texte.
Coté technique, la structure du format est assez simple. Il s'agit d'un simple fichier texte contenant les informations de la musique.
2 parties :
- Définition des propriétés de la musique
- Déroulement de la musique
La principale ressource disponible sur le web qui décrit ce format est la spécification du format BME. On y trouve la structure générale d'un fichier type et la liste exhaustive des différents paramètres possibles. Cependant la partie du déroulement de la musique n'est pas très clair; petite explication :
Les événements (notes, changement de tempo, etc...) sont répartis par mesure. Un message va donc être composé du numéro de la mesure de 0 à 999, du type du message (note, note de fond, image de fond, ...) et ensuite des événements à proprement parler.
Par exemple, je veux assigner le son 15 à la touche 1 et le faire jouer sur les 4 pulsations de la mesure 1 :
#00111:15151515
Maintenant je veux assigner le son D8 à la touche 2 et le faire jouer sur les 2 premières pulsations de la mesure 1 :
#00112:D8D80000
Concrètement comment c'est interprété ?
- On prend d'abord les 3 premiers numéros pour obtenir le numéro de la mesure
- On prend les 2 suivants pour obtenir le type de message (ici 11 = touche 1 et 12 = touche 2)
- On prend ensuite tout ce qui se trouve après les <<:>>, ça correspond au message de la mesure
Chaque <<objet>> est codé sur 2 caractères, ici on a des <<15>>, des <<D8>> et des <<00>>. <<00>> étant un objet particulier signifiant qu'il ne se passe rien.
- On répartit tout les objets du même message également sur la mesure.
Pour l'exemple 1, le message 15151515 contient 4 objets donc on va diviser la mesure en 4 et y répartir ses objets dessus :
Temps : 0/4 1/4 2/4 3/4
15 15 15 15
Magie ! Le son 15 est donc joué sur les 4 pulsations de la mesure soit tout les 1/4 de mesure.
Pour l'exemple 2 :
Temps : 0/4 1/4 2/4 3/4
D8 D8 00 00
On a donc bien ici D8 de joué les 2 premières pulsation de la mesure. Si on aurait voulu les jouer sur les 2 premiers 1/8 de mesure il faut diviser la mesure en 8 soit y rajouter 4 <<00>> : #00112:D8D8000000000000
Note : le message #00111:15151515 est égal au message #00111:1500150015001500 : Dans les 2 cas, les objets <<15>> sont placés sur les temps 0/4, 1/4, 2/4 et 3/4.
La spécification ne précise pas non plus, même si peu utilisées, comment fonctionnent les notes tenues. Pour ça, c'est pas très compliqué : on définit dans le message un point de départ et un point d'arrêt. Le point de départ est un objet correspondant à un son et le point d'arrêt peut être n'importe quel objet excepté <<00>>. Par exemple le message #00151:B000EE00B000EE00 va donner les notes tenues suivantes :
##__##__ soit #_#_
# : note tenue pendant 1/n de la mesure
_ : rien pendant 1/n de la mesure
Et une précision concernant les notes invisibles présentes dans la spécification, celles-ci servent en fait à mapper d'autres sons sur les touches essentiellement si le joueur veux improviser quelque chose pendant certaines parties vides.
(Merci à Ultra Violette, créateur du simulateur Be-Pachi Music, pour son aide sur ce format)
Spécification plus détaillée du format
La spécification anglaise du format est en fait bien vieille et une nouvelle bien trop plus complète et est en écriture et uniquement en japonais ici. Elle regroupe tout les paramètres rajoutés par les différents simulateurs sur le format dont certains sont très peu utilisés, y'a un peu de tri à faire. Si comme moi, vous ne savez pas lire le japonais, Google translate bien qu'il donne une traduction plutôt bizarre permet quand même de déduire le sens des éléments.
Merci à Yamajet pour ces précisions.