热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BM98数据格式规范【BMSFormatSpecification】

译者前言:有很多音乐游戏都使用了此格式或此格式的变种,这里举一些例子:《节奏地带》、《VOS》、《劲乐团》、《MYDJ》、《太鼓达人》《MYO2》、《DJMAX》、《超级乐者》、

译者前言:

有很多音乐游戏都使用了此格式或此格式的变种,这里举一些例子:《节奏地带》、《VOS》、《劲乐团》、《MYDJ》、《太鼓达人》《MYO2》、《DJMAX》、《超级乐者》、《超级舞者》等均使用了此格式及其变种。

但还有一些游戏类似:《节奏大师》、《劲舞团》、《OSU!》、《巨星》等游戏使用的则不是此格式。

以上仅作一些游戏使用格式的区别及应用场景示例,请读者自己体会~

译者:nivk(nivk@nivkgames.com)






以下为译文(因原文地址中所示内容版本过早,译者从其他地方更新了更多内容进来):

BMS格式规范

原作者: Urao Yane(yaneurao@gmail.com)

"BMS"是指"音乐源文件"。后缀名为"bms"的文件都被认为是"BMS"格式文件。这种文件格式是由"Urao Yane"和"NBK"联合研发的。该格式原本是给BM98(2000年左右发行的一款打碟机模拟器游戏)所研发的。但是现在,所有人都可以自由免费的使用该格式。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

<命令行>

一行以 "#" 为开始的才是需要解析的命令。所有其余的都可以忽略(均视为注释)。BMS文件在程序运行时才解析。另外,命令行中的字母是不区分大小写的。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

<头数据>

#PLAYER 1
指示当前是玩家1在游戏。


#PLAYER 2
指示当前是玩家2在游戏。


#PLAYER 3
指示当前是双人游戏。


#GENRE xxxxxxxx
指示风&#26684;流派。


#TITLE xxxxxxxx
指示音乐名称。


#ARTIST xxxxxxxx
指示艺术家。


#BPM xxx
指示每分钟节拍数。 默认&#20540;: 130


#MIDIFILE xxxxxxx.mid
指示当前使用的MIDI背景音乐。


#PLAYLEVEL x
指示歌曲等级。


#RANK x
判定级别。
x为0 :非常难, x为1: 难, x为2: 正常, x为3: 简单

 

#VOLWAV xxx
指示相对的音量控制(百分比)。


#WAVxx yyyyyyyy.wav
指示波形数据文件。xx的范围是01到FF(十六进制),yyyyyyyy.wav是wav文件名。


例如:
#WAV01 HOUSE01.WAV // 在WAV通道的01数据位使用HOUSE01.WAV文件。
#WAV02 HOUSE02.WAV // 在WAV通道的02数据位使用HOUSE02.WAV文件。
#WAVFF HOUSE03.WAV // 在WAV通道的FF数据位使用HOUSE03.WAV文件。


#BMPxx yyyyyyyy.bmp
指示位图文件。xx的范围是01到FF(十六进制),yyyyyyyy.bmp是位图文件名。
位图大小必须是256 * 256(最大色彩数为65536,16位色)


例如:
#BMP01 HOUSE01.BMP // 在BMP通道的01数据位使用HOUSE01.BMP文件。
#BMP02 HOUSE02.BMP // 在BMP通道的02数据位使用HOUSE02.BMP文件。
#BMPEE HOUSE03.BMP // 在BMP通道的EE数据位使用HOUSE03.BMP文件。


但是,在BMP通道的00数据位(即:#BMP00)定义的是一个特殊的数据。
这个位图的作用是在于玩家发挥失常时反馈显示所用。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

// 以下是一个随机触发函数的示例
// 译者注:如果翻译为Javascript则是这样……

var num = (Math.random() * 2 + 1) | 0;
switch (num) {
case 1:
// console.log("00111:31313131");
break;
case 2:
// console.log("00113:32003232");
break;
}


#random 2 // 创建一个随机数 (&#20540;为1或2)


#if 1 // 如果随机数字等于1的时候...
#00111:31313131 // 这里将被执行到...
#endif


#if 2 // 如果随机数字等于2的时候...
#00113:32003232 // 这里将被执行到
#endif

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

<通道信息>

#aaabb:cccccccc


aaa: 轨道编号 (从 000 到 999)
bb : 你要发送的消息的类型。(从 00 到 FF)
cccccccc : <具体的消息内容>


<类型通道编号摘要>

01 : BGM(WAVE背景音乐)
02 :节拍03 : 变速(改变每分钟节拍数),默认为4/4拍即为1
04 : BGA(背景动画)
06 : 改变用户被Miss判定时显示的位图
07 :Layer位图
09 :暂停
11 - 19 : 玩家1按键通道
21 - 29 : 玩家2按键通道
51 - 59 :玩家1长音通道
61 - 69 :玩家2长音通道

<示例>

#00302:0.75

这一行表示第三小节为3/4拍


#00211:03030303

这一行表示002通道中有一个玩家一的按键事件列表,该列表中有4个对象,每个对象被触发时(用户在音符下落的时候正确击打时)都会播放WAV通道数据位为03的音频。并且这4个对象均匀的排列在一个节拍中(根据   [消息内容数量:消息内容长度 / 2]   来确定一个拍是几分音符)。
译者注:关于这一个命令的轨道如下表所示(同样使用上面一行命令做为演示数据),从以下表中可以看出,此小节是4分音符为一拍的:
















01/42/43/4
03030303

请尝试以下操作:


#00211:0303030303


#00211:0303000303


#00211:010101
译者注:此段提示,此轨道是3/4拍的,4分音符为一拍,每小节3拍。
#00211:00020202

译者注:此段中的00为占位符。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

这个文档及&#26684;式是自由免费的
我希望有朝一日,我的BMS&#26684;式能遍布在全世界!
译者注:你已经做到了……

BM98数据格式规范【BMS Format Specification】,布布扣,bubuko.com


推荐阅读
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • 本文探讨了Java编程语言中常用的两个比较操作符==和equals方法的区别及其应用场景。通过具体示例分析,帮助开发者更好地理解和使用这两个概念,特别是在处理基本数据类型和引用数据类型的比较时。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 本文列举了构建和运行 Struts2 应用程序所需的核心 JAR 文件,包括文件上传、日志记录、模板引擎等关键组件。 ... [详细]
  • 本文介绍了一个来自AIZU ONLINE JUDGE平台的问题,即清洁机器人2.0。该问题来源于某次编程竞赛,涉及复杂的算法逻辑与实现技巧。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
author-avatar
in冷霜天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有