BMS数据格式规范【BMS Format Specification】

译者前言:

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

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

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

译者:nivk( nivk@nivkgames.com)




原文地址:http://bm98.yaneu.com/bm98/bmsformat.html



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

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
指示风格流派。


#TITLE xxxxxxxx
指示音乐名称。


#ARTIST xxxxxxxx
指示艺术家。


#BPM xxx
指示每分钟节拍数。 默认值: 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 // 创建一个随机数 (值为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为占位符。

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

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


  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值