maidata.txtの譜面書式

※ここに書いてある内容は、常に最新バージョンのsimaiで適用できる書式です。
書式の通りに書いてもうまく動かない場合は、simaiのバージョンを上げてみてください
"3simai"で書式が大幅に増えたため、3simai以降使用できる書式にはタイトルに【3simai】がつけられています。

  1. BPMの設定/○分音符の設定
  2. TAP・BREAKを配置する
  3. HOLDを配置する
  4. SLIDEを配置する
  5. TOUCH・TOUCH HOLDを配置する
  6. EACHを設定する
  7. 終了地点を定義する

maimaiにおけるボタン配置

 ⑧① 
⑦  ②
⑥  ③
 ⑤④ 

①="1"、②="2"……⑧="8"、のように、ボタン番号の数字をそのまま譜面の中に書き入れます。
以下、「ボタン番号」という言葉が出てきた場合は、1~8の数字を入れると思ってください。

基本的な書式

BPMを設定する

<例>
(120)

<書式>
(b)

b……BPMの値

<備考>
譜面の初めに"(120){4}"のような形でBPMと使用する音符を必ず定義しておかないといけない。しないとsimaiが泣く
曲中でBPMの値だけを変更した場合、使用する音符の値は変わらない
不安なら"(135){4}"のように音符の設定とセットで書いてあげれば安心
○分音符はBPMがあってこそ決まるものなので、譜面の初めに"{4}(120)"のように逆に書いてしまうとバグってしまう
小数使用可

○分音符を設定する

<例>
{4}

<書式>
{x}

x……○分音符の○の数字

<備考>
譜面の初めに"(120){4}"のような形でBPMと使用する音符を必ず定義しておかないといけない。しないとsimaiが泣く
小数は多分使えるが、使う人はまずいないと思われる

TAPを配置する

<例>
1,
2,

<書式>
B,

B……ボタン番号

<備考>
特になし。基本中の基本のリング

HOLDを配置する

<例>
1h[4:3],
2h[1:3],

<書式>
Bh[x:y],

B……ボタン番号
h……HOLDであることを表す文字
x……○分音符の○の数字
y……x分音符の個数

<備考>
4分音符3個分なら[4:3]。全音符3個分なら[1:3]
要は1小節という長さに「x分のy」をかけた長さになると思えばいい
「x分のy」が約分できる分数であった場合、約分することができる。できるならしておくことを推奨
h1、h2のように数字とhを逆に書いてしまうとバグってしまう

SLIDEを配置する【3simaiで進化】

<例>
1-5[4:3],
2^7[1:3],

<書式>
直線 :F-E[x:y],
弧形 :F^E[x:y],
左回転:F<E[x:y],
右回転:F>E[x:y],
v形 :FvE[x:y],
p形 :FpE[x:y],
q形 :FqE[x:y],
s形 :FsE[x:y],
z形 :FzE[x:y],
pp形:FppE[x:y],
qq形:FqqE[x:y],
屈折形:FvRE[x:y],
扇形 :FwE[x:y],

BREAK :1b-4[4:1]     ※一例。この場合だと1-4のSLIDEの始点がBREAKになる

同始点:1-3[4:1]*-4[4:1]  ※一例。この場合だと1-3と1-4のSLIDEが組み合わさった同始点SLIDEになる

3simai以降は、さらに"*"でSLIDEをつなぐことで、

1-3[4:1]*-4[4:1]*-5[4:1]*-6[4:1]*-7[4:1]

のように、いくらでもつなげていくことができる

F……始点のボタン番号
R……屈折点のボタン番号
E……終点のボタン番号
x……○分音符の○の数字
y……x分音符の個数

<備考>
4分音符3個分なら[4:3]。全音符3個分なら[1:3]
要は1小節という長さに「x分のy」をかけた長さになると思えばいい
「x分のy」が約分できる分数であった場合、約分することができる。できるならしておくことを推奨
始点に対して終点の位置がおかしかった場合、☆は動くが矢印が全く表示されなくなる
☆TAPが判定ラインに重なると、☆が動き出すまでのわずかな時間「タメ時間」が発生
タメ時間の長さは、☆TAPが判定ラインに到着した時点でのBPMにおける4分音符1つ分

全SLIDEの始点・終点の関係表【3simaiで進化】


TOUCHを配置する【3simai】

<例>
C,
E1,
B1,

<書式>
T,

T……タッチセンサー番号

<備考>
TOUCHを配置する時はmaimai でらっくすにおけるセンサー番号を指定することで設置する
Cセンサーに関しては、『でらっくす』の正確なセンサー番号に則って「C1」または「C2」と書いても構わない

TOUCH HOLDを配置する【3simai】

<例>
Ch[4:3],

<書式>
Th[x:y],

T……タッチセンサー番号
h……HOLDであることを表す文字
x……○分音符の○の数字
y……x分音符の個数

<備考>
4分音符3個分なら[4:3]。全音符3個分なら[1:3]
要は1小節という長さに「x分のy」をかけた長さになると思えばいい
「x分のy」が約分できる分数であった場合、約分することができる。できるならしておくことを推奨
h1、h2のように数字とhを逆に書いてしまうとバグってしまう
TOUCH HOLDは、カウンターではHOLDとしてカウントされる

maimai でらっくすのセンサー番号【3simai】


花火エフェクト【3simai】

<例>
Cf,
Ch[4:3],

<書式>
Tf,
Thf[x:y],

T……タッチセンサー番号
h……HOLDであることを表す文字
x……○分音符の○の数字
y……x分音符の個数
f……花火エフェクトであることを表す文字

TOUCH HOLDの場合、上記の「Thf」を「Tfh」のように"h"と"f"を逆に書いてもOK

<備考>
TOUCHであれば処理される瞬間に、TOUCH HOLDであればHOLDが最後まで処理された瞬間にエフェクト発生
なお、譜面に記載があってもオプション次第でエフェクトを出さなくすることができる

BREAKを配置する

<例>
1b,
2b,

<書式>
Bb,

B……ボタン番号
b……BREAKであることを表す文字

<備考>
b1、b2のように数字とbを逆に書いてしまうとバグってしまう
EACHの対象になっても黄色にならない

EACHを設定する【3simaiで進化】

<例>
※ T……TAP H……HOLD S……SLIDE B……BREAK

(T/T) 1/2,                          (T/T) 12,
(T/H) 1/2h[x:y],
(T/S) 1/2^7[x:y],
(T/B) 1/2b,
(H/H) 1h[x:y]/2h[x:y],
(H/S) 1h[x:y]/2^7[x:y],
(H/B) 1h[x:y]/2b,
(S/S) 1-5[x:y]/2^7[x:y],
(S/B) 1-5[x:y]/2b,
(B/B) 1b/2b,

<書式>
ノーツAの情報/ノーツBの情報

ノーツAの情報……TAP、HOLD、SLIDE、TOUCH、BREAKの書式をそのまま書き入れる
ノーツBの情報……同上
/……EACHとして扱うことを表す文字

TAPとTAPのEACHに限り、"/"を省略してもよい

3simai以降は、さらに"/"でノーツを挟むことで、

ノーツAの情報/ノーツBの情報/ノーツCの情報/ノーツDの情報/ノーツEの情報/ノーツFの情報 ……

のように、いくらでもつなげていくことができる

<備考>
基本的にノーツの情報を書き、ノーツとノーツの間に"/"を入れればよい
ノーツの順番は関係なく、内部的には"2/1" = "1/2"として扱ってくれる
TAP同士のEACHに限り、"/"を省略して数字だけ書いてもEACHとして扱ってくれる
EACHとして扱われたノーツは黄色くなるが、BREAKだけは色が変わらない
また、SLIDEの矢印の色は、全く同じタイミングで動き出すSLIDEが2本以上ある場合のみ、それらが全て黄色になる
カウンターに表示されるEACHの値は、EACHとして登場するノーツが何組あるかを表している

譜面の終了地点を定義する

<例>
&inote_1=
(120){4}
1,2,3,4,
{1}
5h[4:3],
8^5[8:7],
,

2b/3b,
,

,
E ←これ

<備考>
譜面の終了地点に設定したいところに"E"を書く。"e"はダメ
もし"E"をどこにも書いていなかった場合、MP3が流れ終わって停止する瞬間を終了地点として扱う
SLIDEの☆が動いている途中だったり、HOLDを押し続けている間に終了地点を迎えてしまうと、
それらのリングの点数が入らないので、終了地点には注意すること

終了地点は、MP3の長さを超えることはできない
例えば、MP3の長さが2分00秒00だったとしたら、終了地点が2分02秒55だったとしても2分00秒00として扱われる
2分00秒00~2分02秒55の譜面は再生されないので注意

終了地点を迎えると、再生中の曲はそこでストップしてしまう
それがイヤなら、譜面の最後のリングを配置して、その後に、

(1){1}
,
E

とでも書いておけば大丈夫だと思われる。BPM1の全音符は秒数にして240秒であるためまず大丈夫だろう

特殊な書式

HOLD・TOUCH HOLDを保ち続ける長さ・SLIDEのタメ時間・SLIDEを流す速さを直接秒数で指定する

HOLD・TOUCH HOLDを保ち続ける長さ、SLIDEの☆が流れる速さの3つに対しては、
特定の長さを指定したかったり、音符何個分の長さなのかが分からかったりする場合、
"#xxx" (xxxは秒数)と書くことで、入力した数字をそのまま秒数として設定することができます。

例えば、BPM120の8分音符の場合、単位時間は240÷8÷120=0.25秒になりますが、
これが「BPM120の8分音符」ということが分からないとした場合、"{#0.25}"と書けば、
それ以降のカンマの単位時間を0.25秒にすることができます。

したがって、

&inote_1=
(120){#0.25}
1,3,5,7,2,4,6,8,

という譜面を書いた場合、これと、

&inote_1=
(120){8}
1,3,5,7,2,4,6,8,

という譜面は全く同じ意味を持つ譜面となります。

HOLDであれば以下のように書きます。

&inote_1=
(120){1}
2h[#1.5],

SLIDEだけちょっと特殊な書き方をします。

&inote_1=
(120){1}
3-7[160#2],

このように書いた場合、
タメ時間はBPM160の長さで、☆が動く時間は2秒という記述になります。

&inote_1=
(120){1}
3-7[160#8:3],

このように書いた場合、
タメ時間はBPM160の長さで、☆が動く時間はBPM160の8分音符3つ分という記述になります。
この書式は、創作譜面で時々見られる「曲自体のBPMは変わらないのにSLIDEのBPMだけ違う」という譜面を作るときに便利です。

&inote_1=
(120){1}
3-7[3##1.5],

このように書いた場合、
タメ時間は3秒、☆が動く時間は1.5秒という記述になります。
ネタ譜面を作る時はこの記述が役立つかもしれません。

例えばBPMがどんどん加速していく地帯にリングを配置する時に、どんどん加速していくごとに小数第何位までBPMを求めたりすることをせずに、
直接秒数を指定して少しずつ調整していくことができるため、多少楽になったりします。

TAP、BREAKを強制的に☆型にする

<例>
1$,
2b$,

<書式>
TAP、BREAKの番号の後ろに"$"を入れる
BREAKも混ぜる場合は、上記の例でいうと「2b$」でも「2$b」でもよい

<備考>
"$"は、普段は○型のTAPやBREAKを☆型に変更したい時に使用する
ひとつ下の項目と併用すると、普段は☆TAPなのにSLIDE時だけ○TAPなんていう芸当も可能

SLIDE時にTAP、BREAKを強制的に○型にする【3simai】

<例>
1@-4[4:1],
2b@-4[4:1],

<書式>
SLIDEの始点の番号の後ろに"@"を入れる
BREAKも混ぜる場合は、上記の例でいうと「2b@」でも「2@b」でもよい

<備考>
"@"はSLIDEの☆TAPを○TAPに変更したい時に使用する
逆に単なる○TAPを☆TAPに変更したい時は、ひとつ上の項目をどうぞ

TAP、☆TAP、HOLDをEXリングにする【3simai】

<例>
1x,
2x-4[4:1],
3hx[4:1],

<書式>
TAP、☆TAP、HOLDの番号の後ろに"x"を入れる
TAP、☆TAPに関しては、さらにひとつ上&ふたつ上の書式を混ぜて書くこともできる
その場合でも、どちらの文字を先に書いても構わない
例えば「1x$」=「1$x」であるし、「2x@-4[4:1]」=「「2@x-4[4:1]」」である

<備考>
EXリングにすると、そのリングが明るく白みを帯びたビジュアルになる
判定はCRITICAL PERFECTとして扱われるため、でらっくスコアも「3」加算される(ふつうは「2」)

HOLDを(通称)六角形TAP風に、TOUCH HOLDを実質的な色違いTOUCHにする (つまり長押しさせないアレ)【3simai】

<例>
1h,
Ch,

<書式>
それぞれのHOLDの書式の、後ろの[x:y]の部分を全て取っ払う

<備考>
この書式を行った場合、内部的には [1280:1] となっている
なぜ1280分の1なのかというと、公式が六角形TAPを表現する際にこの速さで設定していることを仄めかしているため

疑似EACHを設定する【3simai】

<例>
1`2,

<書式>
ノーツAの情報`ノーツBの情報(`ノーツCの情報`ノーツDの情報……)

<備考>
この書式を使用すると、ほとんど同時に処理するが完全に同時ではないので黄色くならない、というノーツを設置できる
近年ではボスクラスや、あえて桃色(TAPの原色)を使う場面で公式が用いている
例でいうと、1番TAPが例えば5.000秒のタイミングで処理されるとすれば、2番TAPは5.001秒で処理されている
後ろに繋げばつなげていくほど、それが0.001秒遅れていく
遅れていくということは同時ではない=EACHでもないので、黄色くもならないし、EACHカウンターに加算されない

` ←この記号は[Shift]キーを押しながら「@」で入力できる(Windows・Mac OS共に)
普段日常で使用されることは稀で、プログラムの世界だと重要な活躍をすることがある隠れた実力を持つ記号

☆TAPが飛んでこないSLIDEを配置する【3simai】

<例>
1?-4[4:1],
1!-4[4:1],

<書式>
SLIDEの始点の番号の後ろに"?"か"!"を入れる

<備考>
まず、"?"か"!"を入れた時点で、そのSLIDEに☆TAPは飛んでこなくなる
しかし、その後の挙動が少しだけ違う

"?"の場合は、タメ時間中にSLIDEをなぞる用の☆が表示される
"!"の場合は、SLIDEをなぞり始めるその瞬間にいきなり☆が表示される

例えば、☆TAPを触らずにずっと一筆書きできるような連続SLIDEを配置する場合、
2本目以降のSLIDEを"!"にしておくと、SLIDEの軌道だけが見えてきれいに見える
一方、☆TAPをやはり触らずに文字や記号などを表現する場合、
書き順という概念があることや、どこからなぞり始めたらいいのか混乱するのを防ぐ意味合いで、"?"がオススメ

改行とタブスペースの有効活用法

&inote_1~&inote_7の譜面データに関しては、改行のほかにタブスペースを入れても無視されます。
それは言いかえれば、いくらでも改行とタブスペースを使ってもいいということです。

改行に関しては、曲にもよりますがだいたい4・8・16小節で1行余分に改行すると見やすくなります。
AメロとBメロとサビで分ける、などでもいいでしょう。
そうしておくと、いざ譜面を修正しないといけなくなった時に、間違っている箇所を探す時に見つけやすくなります。

タブスペースに関しては、例えばこんな時に効果を発揮します。
例えばこんな譜面があったとします。

&inote_1=
{1}
1,
{4}
8,7,6,5,
{1}
4,
{8}
8,8,7,7,6,6,5,5,
{1}
4,
{2}
1^4[8:1],8^5[8:1],
{1}
1b,
{4}
1b/8b,2b/7b,3b/6b,,

(1){1}
,
E

適当に書いた譜面です。
書式的なエラーはどこにもないのですが、ちょっと見にくいと思いませんか?
1小節ごとに音符がいろいろ変わってしまっていて、音符の変更に律儀に1行使った結果、こうなってしまいました。

でも、タブスペースを使えばこんな風に書けます。
(このwikiではタブスペースを書けないので、半角スペース8つで代用します)

{1}        1,
{4}        8,7,6,5,
{1}        4,
{8}        8,8,7,7,6,6,5,5,
{1}        4,
{2}        1^4[8:1],8^5[8:1],
{1}        1b,
{4}        1b/8b,2b/7b,3b/6b,,

(1)
{1}        ,
           E

はい、こんな風に書けます。どちらが見栄えよく見えますか?
もちろん人によって見やすさが違うので、実際に譜面を書くときは自分が一番分かりやすい形で書いていただければ大丈夫です。

コメント文の挿入【3simaiで記号変更】

※2simai EXpand以前では、「||」ではなく「>>」を使用します

<例>
(120){4}
1,3,5,7,

||ここから8分音符
{8}
1,3,5,7,2,4,6,8,

<書式>
譜面のコメントしたい箇所に「||コメント(改行)」のように記述する
最後の改行は必須

<備考>
「||」は半角の「|」を2つ並べたもの、全角の「||」は不可
コメントの内容は画面のどこにも表示されず、また譜面生成時にコメントの存在が譜面から消される
最後の改行がなければコメントとして認識してくれないため、バグの宝庫が出来上がる
改行が必須である関係で一番最後の行にはコメントを書けないことになるが、
大抵の場合、最後の行に書かれているのは「E」だと思われるのであまり不便はないと思われる
仕様上、プログラミングのように、「この行を取り除いたらどうなるか?」というテストも可能
コメントには基本的に何を(どんな文字を)記述してもいいが、使用不可文字にある半角の3文字は使わないこと

<使用不可文字>
半角の&、+、%を使用してはいけない
全角の&、+、%は使用可
どうしても半角の&、+、%を表示させたい場合は

「&」→「\&」
「+」→「\+」
「%」→「\%」
「\」→「\¥」

と書く


Active Message (Ver1.50~)

Ver1.50からActive Messageという機能が搭載され、再生中の好きなタイミングでメッセージの内容を変更できるようになりました。
Active Messageに関連する変数は&amsg_first、&amsg_time、&amsg_contentの3つです。

&amsg_first

最初の文字列を表示するまでの時間(秒数)を設定する
&amsg_first=3 と設定すると、初めの3秒は自動で文字がない状態になり、3秒経つと1つ目の文字列を表示する
&firstは最初のリングが判定ラインに到達する時間だが、それのActive Message版

&amsg_time

基本的に&inote_1~&inote_7に譜面を書く時と同じ書式になる。よって、

(120){4}
1,,,
1,,1,
{2}
1,1,

のような書き方をする

&amsg_timeに使う文字は、カンマ、BPM設定、○分音符の設定を除くと、【1】と【0】だけ
※E はない。書いても無視される

1 …… このタイミングで文字列を表示させる
0 …… このタイミングで文字列を消す(何も表示させなくする)

例えば、

&amsg_first=5.000
&amsg_time=
(120){1}
1,
0,
{2}
1,1,

と書いたとすると、
5秒目に1つ目の文字列を表示し、
7秒目に文字を消し、
8秒目に2つ目の文字列を表示し、
9秒目に3つ目の文字列を表示する

&amsg_content

以下のような書式で、表示させる文字を記述する

&amsg_content
┃さいた さいた
┃チューリップのはなが
┃ならんだ ならんだ
┃あか しろ きいろ

┃どのはな みても
┃きれいだな

「┃」はけいせんで変換した時に出てくる太い縦棒。これを先頭に書く
どんな文字を記述してもよいが、やはり使用不可文字には気をつける
ちなみに「┃」自体は画面に表示させることができない

<使用不可文字>
半角の&、+、%を使用してはいけない
全角の&、+、%は使用可
どうしても半角の&、+、%を表示させたい場合は

「&」→「\&」
「+」→「\+」
「%」→「\%」
「\」→「\¥」

と書く

&amsg_timeの記述の中の「1」を通過するたびに、ひとつずつ次の文字列を読み込んでいく
上記のチューリップでは1行改行されている行があるが、何もない行は無視されるので
自分の見やすいように文字列を配置するとよい

なお、&amsg_timeの記述の中の「0」を通過しても、&amsg_contentには何も影響がない
「0」はただ単に【文字を消すだけ】のことしかしない
例えば曲の歌詞の字幕を表示させようとするときに、&amsg_timeで「0」をうまく使えば記述がしやすくなる

  • コメント文が機能してない気がする・・・>>と書いても表示されてる -- e (2019-06-19 00:13:17)
  • 隣への曲線スライド実装嬉しいです!弧形スライドの記述で1^2のように書けるようにするのは難しいでしょうか? -- 名無しさん (2019-09-11 08:59:09)
  • ↑内部的に対応させましたが関係表の更新を弧形だけすっかり忘れていました……1^2は軌道を一本に絞れるので問題なく記述できます。 -- Celeca (2019-09-11 16:01:51)
  • ↑迅速な返信感謝いたします!弧形の記述でも記述できるということで、安心しました!ありがとうごさいます。 -- 名無しさん (2019-09-14 14:55:23)
名前:
コメント:
添付ファイル