chapter3-side B:text編集
ここでは「譜面ソース」と「テキスト編集」について解説します。
テキスト編集を攻略する
譜面ファイルは、メモ帳やワードパッドなどのテキストエディタで開くことができます。
ためしに手近な譜面をテキストで開いてみてください。それが譜面ファイルの正体です!
一見わけがわかりませんが、攻略法はありますから大丈夫!
譜面エディタが無かった時代は誰もがこのような譜面ソースを直接記述することでbmsを作っていました。
(ここでいうソースとは、たとえば web サイトにおける「html のソース」と同じ意味です。)
BMSCの登場により、ようやく面倒なソース記述から解放され、より直感的に譜面を作れるようになったわけです。譜面エディタの作者の方々に敬礼!
現在は必要性が薄れたとはいえ、やはり譜面の仕様は知っておいて損はありません。
テキスト編集を覚えておくと、譜面作成時の選択肢がちょっとだけ増えるかもしれません。
単純なヘッダ修正
#TOTAL の微調整や、表記を微修正するとき
配置の間隔だけを変更
16分間隔のBGAループを32分間隔に変えたいときなど
一部の拡張命令を使用
ランダムローディング、各本体の独自拡張、特にナナシ拡張
譜面エディタだとうまく作れない場合
扱いにくいタイプの小節長変更を狙うときなど
このように、譜面エディタで編集するよりテキスト直打ちしたほうが手っ取り早いケースもあります。
筆者は譜面ファイルをワードパッドに関連付けしています。 なにかと便利なのでオススメですよー
じゃ、早速いってみましょう! 分からない箇所は読み飛ばしちゃって構いません!
譜面ソースの目次
譜面ソースは、以下の3つの要素から成り立っています。
- ●ヘッダ
- 「譜面の種類」や「使われているファイル」などを定義する文。
- ●データ
- 定義した音や絵のオブジェ並び、いわゆる配置を指定する文。
- ●コメント
- ヘッダやデータに該当しない、再生本体が読み取らない文。
多重定義 | 定義チャンネル |
レーンのチャンネル | 譜面の断片化 |
分解能 | BMSCで変拍子 |
左詰め機能の注釈 | 小節長 |
◆以下はソース記述上の文法のようなものです
- 再生本体が読み取る文は全て文頭に半角のシャープがつきます
- 再生本体が読み取る文は半角のアルファベットか数字で記述されます(文字列の指定を除く)
- 文のアルファベットは大文字でも小文字でも同じ物として扱われます(文字列の指定を除く)
- 必要な記述さえ満たしていれば、文を記述する順序はバラバラでもOK
①上書きの例 | ②上書き+重ね合わせの例 | ③例外、BGM チャンネル (#xxx01) |
---|---|---|
#ARTIST hitkey #ARTIST Johnny #ARTIST Kz #ARTIST sumomo |
#00111:11111111 #00111:2222002200220022 #00111:33 #00111:00 |
#00101:11 #00101:00 #00101:22 #00101:00 #00101:33 |
アーティスト欄にsumomoと表示されます。(本体によってはアウト?) |
#00111:3322112211221122という1文と同義に解釈されます。 #WAV00 だけは透過されます。 |
これを譜面エディタで見ると、BGM レーンの左端から1列おきにオブジェが配置された状態になります。(11、00、22、00、33、というイメージ) BGMだけは行数=レーン本数です。 |
BGM以外はすべて、下方の文が優先されます。
※ソースがややこしくなるので、なるべく重複記述は避けましょう。
ヘッダ
譜面の種類や使用ファイルなどを、bms 再生本体が読み取るための部分です。
ヘッダの記述に抜けや誤りがあると、再生本体が譜面を認識できず、認識しても正常に動作しません。
ヘッダ文は、「命令・半角スペース・内容」という形で記述されます。
実例を参照しながら解説します! クリック ↓ で別窓が開きます。
以下は [ (^^) / Yamajet ] の [ kami.bms ] のヘッダ部分です。
実例 | 解説 |
---|---|
*---------- HEADER FIELD | 「ここからヘッダ部分を記述します」というコメント文です。(省略も可) BMSC や BMSE で譜面を保存すると、この文が自動的に挿入されます。 |
#PLAYER 1 | 譜面のプレイモードを整数値で指定します。 1 : SP (シングルプレイ) 1人用 5keys, 7keys 2 : 2P (カップルプレイ) 2人用 10keys, 14keys 3 : DP (ダブルプレイ) 1人用 10keys, 14keys 4 : BP (バトルプレイ) 2人用 5keys, 7keys ※ #PLAYER 4 は現在ほぼ見かけません。(本体によっては対応していません) |
#GENRE foon | ジャンル欄に表示される文字列を指定します。(普通はジャンル名を記述) #genre 風雲 と書くと、ジャンル欄に 風雲 と表示されます。 ※多バイト文字の一部は正常に表示されない可能性もあります。 半角英数であれば、すべての本体で問題なく表示されます。 ※長すぎる文字列を受け取ったときの解釈は本体によって異なります。 何も表示されないか、一定数以上は切り捨てられるか、最悪の場合は落ちます。 |
#TITLE (^^) | タイトル欄に表示される文字列を指定します。(普通は曲名を記述) ※譜面の種類や難易度を付記する場合もあります。(-14keys HYPER- とか) カッコなどの記号で囲った文字列はサブタイトルとして解釈する本体もあります。 |
#ARTIST Yamajet | アーティスト欄に表示される文字列を指定します。(普通は作者名を記述) 原曲、bms、bga、譜面、と各分野ごとに複数の作者さんが担当する場合、 作者名と作者名をスラッシュで区切って併記するのが一般的です。 ※差分譜面などの場合、原曲作者さんが作った譜面と区別するために、差分作者名を併記するのがマナーだとされています。 表記例:[ Yamajet / Kz ][ Yamajet / obj. Kz ][ Yamajet / ln62 ] ※LunaticRave 独自拡張命令 #SUBARTIST (二次作者名を別記述できます) |
#BPM 140 | 譜面の開始時の BPM を指定します。(値が大きいほど速い) 現在ほとんどの本体は小数点以下の値まで細かく指定可能です。 ※実際の BPM と違う値にして、表記を偽るケースもあります。実BPM300の曲を、快適に遊べるようにBPM150扱いにしたり。BPM100と思いきや、1小節目でいきなりBPM200になったり。 |
#PLAYLEVEL 1 | 譜面の難易度のめやすを整数値で指定します。(値が大きいほど難しい) 値にゼロを指定すると「難易度不明」という扱いになります。いまのところ難易度に明確な基準はないので、勘と経験で判断しましょう。 ※体感的な難易度とかけ離れた表記は、特に初心者に対して不親切です。すくなくとも初心者向けの譜面では、難易度詐称は避けたいところです。 ちなみにこの譜面は本体によってはくそむずくなるわけですが…(; ※ナナシグルーヴでは、この欄に文字列も指定できます。 |
#RANK 0 | 譜面の判定幅を整数値で指定します。(値が大きいほど判定が広い) 0 : VERYHARD (とても狭い) 1 : HARD (狭い) 2 : NORMAL (ふつう) 3 : EASY (広い) ※省略時の解釈は本体によって異なります。 ※各 RANK ごとの判定幅の設定も本体によって異なります。 ※判定方式も本体によって異なります。「時間単位で判定するもの」と「表示のピクセル単位で判定するもの」があります。ピクセル判定の場合は原理的に、BPM が速いほど光らせにくくなります。 |
#VOLWAV 100 | 譜面を再生する音量のパーセンテージを整数値で指定します。(省略も可) 値100 or 省略時には、音ファイルがそのままの音量(100%)で鳴ります。 ※この命令は各本体の解釈やハードウェアに依存する部分が大きいため、現在は「うかつに設定しないほうが安全」という扱いになっているようです。 |
#TOTAL 83 | 「全オブジェを最高判定で拾ったときに、ゲージが何%増えるか」という、グルーヴゲージ増加量のパーセンテージを整数値で指定します。省略時の解釈は本体によって異なります。 (=たいていゲージ増えすぎます) ※譜面のゲームバランスを左右する重要な値なので必ず設定しましょう。 ちなみに 83 という値は、一般的な譜面に比べると極端に少ない部類です。この譜面はノート数も極端に少ないため、絶妙なバランスとなっています。 ※シビアすぎる値を設定する場合は、本体間のバランスも考慮しましょう。たとえばゲージ増量を #total 60 と設定したとします。その譜面は初期ゲージ値20%の nazo ならクリアできますが、(20 + 60 = 80%)初期ゲージ値9%の MixWaver ではクリアできません。(9 + 60 = 69%) |
#STAGEFILE | 譜面のロード中などに表示するタイトル画像のファイル名を指定します。タイトル画像は 640 * 480 のサイズまで表示できます。省略すると各本体のロード画面が表示されます。 ※ファイル名の指定は譜面エディタから行ったほうが確実でしょう。1文字でも違っているとファイルがロードされません。 |
BMSC で譜面を保存すると自動的に挿入されるコメント文です。(省略も可) ここに自分のメールアドレスを記述しておくのもよいでしょう。 BMSE で譜面を上書き保存すると、この文は消去されます。 |
|
%URL | BMSC で譜面を保存すると自動的に挿入されるコメント文です。(省略も可) ここに自分のサイトアドレスを記述しておくのもよいでしょう。 BMSE で譜面を上書き保存すると、この文は消去されます。 |
ここから下は、ヘッダのなかでも特に重要な定義リストです。譜面で使用する wav や bmp などのファイル名を指定します。譜面で使用するファイルは全て定義される必要があります。定義リスト番号は、2桁の16進数もしくは36進数で表現されます。(※後述) | |
#WAV01 kick.wav | 音チャンネル 01番に kick.wav を定義します。 キック、バスドラ。 |
#WAV02 kick.wav | 音チャンネル 02番に kick.wav を定義します。 = kick.wav の多重定義 |
#WAV03 clap.wav | 音チャンネル 03番に clap.wav を定義します。クラップ、手拍子。 |
#WAV04 clap.wav | 音チャンネル 04番に clap.wav を定義します。 = clap.wav の多重定義 |
#WAV05 v_f.wav | 音チャンネル 05番に v_f.wav を定義します。 ボイス「エフ」。 |
#WAV06 v_o.wav | 音チャンネル 06番に v_o.wav を定義します。 ボイス「オー」。 |
#WAV07 v_o.wav | 音チャンネル 07番に v_o.wav を定義します。 = v_o.wav の多重定義 |
#WAV08 v_n.wav | 音チャンネル 08番に v_n.wav を定義します。 ボイス「エン」。 |
#WAV09 v_foon.wav | 音チャンネル 09番に v_foon.wav を定義します。 ボイス「ふーん」。 |
#WAV0A bass.wav | 音チャンネル 0A番に bass.wav を定義します。 ベース。 |
#WAV0B ohh.wav | 音チャンネル 0B番に ohh.wav を定義します。 オープンハイハット。 |
以上がこの譜面のヘッダ部分でした。
BGA を定義する場合は、ここから #WAV と同様に #BMPxx ・・・ と続けます。画像の基本サイズは 256 × 256 です。(ちょっとでもオーバーしていると、本体によっては表示されません。)
拡張命令を記述する場合も定義リストの後に続けるのが一般的です(BMSEではここに拡張記述が並びます)
BMSC / BMSEで譜面を保存した場合と、GDACで譜面を保存した場合とでは、ソースの並びが微妙に異なります。
[ kami.bms ] と [ cyc-kami.bms ] を見比べてみてください。 前者が BMSC、後者が GDAC です。
ヘッダの補足
◆多重定義
ひとつの音を複数のチャンネルに定義して配置する手法です。★とても重要!
あるチャンネルの音を鳴らして、その音が鳴り終わる前に同じチャンネルの音を鳴らすと (リロード)、
次の音が鳴った時点で最初に鳴っていた音が途切れます。
※その際しばしばノイズが発生します(bms が音を鳴らすために利用している Direct X の仕様)
多重定義して配置すれば、音が途切れません!
同じ音でも別々のチャンネルで鳴らせば、スムーズに音を再生することができる!というわけです。
(イメージ図、音)
◆多重定義の利用例
・ドラムの連打、特にスネアロールなどを多重定義して、リロードノイズを回避。
・余韻を含んだ長いキー音などが連続する場合に、音を余韻まで丁寧に再生。
・キー音を多重定義して、演奏するタイミングのズレによるノイズ発生を予防。
・短い音などを多重定義して連続発音させることで、短音を擬似的に長音化。
・ループなどを多重定義して、波形編集の負担を軽減。
(=尺が多少合わないサンプルもキレイにループできる)
◆多重定義したチャンネルを同時発音させる手法(=音量増加)
例.[ FIRED UP / DOT96 ]
BGM で長音を7重定義し、4段階の音量差を使い分け、容量を 240KB 節約。
※音割れに注意。
※キー音でこれをやるのは推奨できません。(ネタ譜面や仮組みとしてなら別ですが)
◆あえて多重定義せず、独特な演奏感を狙う手法(=発音キャンセル)
長音や複音やループをキャンセルしたりズラしたりする例、余韻をキャンセルしてタメて最後に解放する例、
キャンセル時に発生するノイズすら「意図した音」として演奏させる例などもあり、応用例はいろいろです。
[ v/er / off-beat ]、[ cedersphere / socer ]、[ house experience / OPENSPACE ]
[ All good things... / MORRIGAN ]、[ 奇譚 / 樟 ]、[ jungle realism / hoverse ]etc
※ mp3 で聴くなどの目的で、これらの発音キャンセル譜面を wav化する場合、bme2wav の 「同じWAVが鳴っても前のを消さない」 のチェックは外しましょう!チェックを入れたままだと、音が途切れるべきところで途切れないので大変なことになります(笑)
◆豆知識
BMSC や BMSE なら、ファイルをすべて選択して定義リストにドラッグすれば、一括で定義できます。
あとは必要に応じて多重定義や定義リスト整列を行うだけです。 とっても便利!
#WAV0C kami.bms や #WAV0D foon_readme.txt などの無用な定義が混じったら消しておきましょう。
.wav 以外の拡張子のファイルも #WAV に定義できることは、例外として覚えておいてもよいでしょう。
.mp3 や .ogg のファイルを直接指定することも可能です。
(ogg の場合はビューワではプレビューできません。)
(mp3 の場合は #WAV01 kick.mp3 のように定義すれば、BMSE でも uBMplay でも問題なく再生できます。)
拡張子を消したファイルを定義してバイト単位の容量削減を行った例もあります。[ TETRINET / 葱&柳 ]
wave ファイルの拡張子だけをリネームして別ファイルに偽装し、プレイ前のネタバレを防止した例もあります。
中身が wave であれば、再生本体側はきちんと音を鳴らしてくれる…らしいです。 あくまで例外ですが。
◆WAV の定義チャンネル
書式拡張が進みつつある過渡期の現在、3種類のチャンネルが混在しています。 ややこしいので説明します。
#WAV の場合 | 単位 | 範囲 | 対応エディタ | 対応本体 |
---|---|---|---|---|
通常定義 古いフォーマット |
0-F 16進数 | 01-FF (255) | BMSC + BMSV GDAC + BMEV BMSE + uBMplay |
すべて対応 |
拡張定義1 FZ拡張 |
0-Z 限定36進数 | 01-FZ (575) | GDAC + BMEV BMSE + uBMplay |
旧 BM98 以外 ほぼすべて対応 |
拡張定義2 ZZ拡張 |
0-Z 36進数 | 01-ZZ (1295) | BMSE + uBMplay | bemaniaDX ナナシグルーヴ LunaticRave のみ? |
FZ以降の拡張定義を使用した譜面は、BMSC では開くことができません。(エラーが出て落ちます)
使用チャンネル255個以内でも、#WAV0G や #WAVFG などに定義があると FZ拡張とみなされます。
BMSE でこれを防止したい場合は、
「ファイル ⇒ 変換ウィザードを表示」
そして左の画像のようにチェックを入れれば、使用チャンネルが255個以内なら定義リストを通常定義範囲内に並べてくれます。
配置オブジェ番号も自動で置き換わります。この方法が最も簡単です。
BMS List Sorter でも同様の定義リスト操作が可能です。こちらは操作を手動で行う必要がありますが、そのぶん融通が利きます。非常に便利です。
BMSE でファイルを定義する前に
「設定 ⇒ 拡張定義を使用しない」
の項目にチェックを入れておくのも有効です。BMSC と同じ感覚で編集できるようになります。
ところで変換ウィザードは超便利です!
どんどん使っていきましょう!
ZZ拡張を使用した譜面は、BMSV や BMEV では正常にプレビューできません。
#WAVG0 以降に定義された音は、BMEV では鳴らなかったり別の音に化けたりします。
ZZ拡張を使用した譜面は、正常に再生できる本体が現在きわめて少ないため、
その譜面を遊ぶことができるプレイヤーの人数を少なからず限定することになります。
★#WAV00 は「休符」の専用チャンネルです!
ここだけは絶対に定義を空けておきましょう。
#WAV00 に音を定義すると、その譜面は休符が使えません
★例外的に、ナナシグルーヴ用の譜面では #WAV00 にも音を定義できます。
= 地雷リアクション専用チャンネル
◆BMP の定義チャンネル
#WAV と同様に、#BMPxx ・・・と続けます。
#BMP も多重定義できますが特に効果はありません。
#BMP00 は「ミス画像」の専用チャンネルです。
ミスしたときに表示される画像のファイル名を指定できます。
省略時の解釈は本体によって異なります。(黒 or 映像停止?)
#BMP00 以外に定義した画像も、POOR 画像レーン(#xxx06)ではミス画像として使えます。
いったん POOR レーンにオブジェを置いたら、それ以降は #BMP00 の画像は表示できなくなります。
#BGA(BGA拡張命令)
たしか BM98de から実装された「定義した画像の座標を指定した一部分を BGA に表示できる」命令です。
1枚の大きな画像を用意して、その表示座標をたくさん定義しておけば、画像1枚でスクロール表現ができたりします。記述形式が分かりにくい・対応本体もまちまち・などの理由から、現在はあまり見かけません。
画像の定義チャンネルは、#WAV と同じく 通常定義 / FZ拡張 / ZZ拡張 の3種類です。
ミス画像チャンネルを含めると、使える画像は 256枚 / 576枚 / 1296枚 となります。(+タイトル画像)
譜面エディタやビューワの対応状況も、だいたい #WAV の場合と同様です。BGA 独自拡張命令は山ほどあるので本体の対応状況はここでは割愛。 詳細は各本体ヘルプをご覧ください。
◆wav以外の音声ファイルを使う場合
ogg などを使う場合、定義欄は .wav のままでも読みこんでくれる本体もあります。(DDR、ナナシ、LR など)
これらの本体はロード時に該当するファイルが見つからなければ、同名の別拡張子ファイルを探してくれます。このタイプの本体で遊ぶことを想定した譜面なら、wav で譜面を作り、wav を ogg に一括変換するだけでOK!
wav 以外のファイルの場合、定義欄で拡張子まで厳密に指定しないと読み込んでくれない本体も存在します。
たとえば MixWaver などで mp3 を再生させる場合、#WAV01 kick.mp3 のように記述しなければなりません。
このへんはとてもややこしいので、譜面ごとに推奨する再生本体を明記しておくのが本来ベターなんですが、
そもそも現在の bms シーンでは mp3 はあまり推奨されないフォーマットです。なるべくなら使わない方向で…
データ
音や絵などの配置を記述する部分です。ここの記述がおかしいとすべてが台無しです。
データ文は、「小節番号・チャンネル番号・半角コロン・内容」という形で記述されます。
小節番号は3桁、チャンネル番号は2桁、内容は定義リスト番号(2桁)の組み合わせです。(※)
※小節長チャンネルだけは例外で、つねに #xxx02:n と記述されます。n はその小節の長さを表します。
通常の4/4拍子は小節長1となります。小節長1のときはこの文を省略できます。
小節長を変更する場合は、4/4拍子の小節長を1としたときの割合 n を10進法の半角数字で指定します。
たとえば7/4拍子なら、小節長は 7 ÷ 4 = 1.75 ですから、#xxx02:1.75 と記述します。
実例を参照しながら解説します! ほうら ↓ クリックヒア!
以下は [ (^^) / Yamajet ] の [ kami.bms ] のデータ部分です。
実例 | 解説 |
---|---|
*---------- MAIN DATA FIELD | 「ここからデータ部分を記述します」というコメント文です。(省略も可) BMSC や BMSE で譜面を保存すると、この文が自動的に挿入されます。 |
#000(ゼロ小節目)にはオブジェがないので省略されています。 ここに限らず、省略可能なデータはすべて省略されています。 ※キーオブジェをゼロ小節目に配置する際は多少の注意が必要です。 ブランク小節を挟んでから譜面再生を開始する本体(MixWaverなど)と、 ブランクなしでゼロ小節目から再生を開始する本体(nazoなど)があります。 前者でのプレイを想定してゼロ小節の1拍目にキーオブジェを置くと、 後者でプレイしたときに最初のオブジェが叩けなくなります。 |
|
#00112:00060600 | #00112:00060600 #001 は小節番号。 12 チャンネルは 1P側 2番キー。 半角コロンで区切り。 音チャンネルを 00 06 06 00 の順に等間隔に配置。 この例の場合、小節を4等分するリズムですね。 音チャンネルが4個並んでいたら、それはつまり4分音符なのです! ちなみに #WAV00 休符チャンネル #WAV06 v_o.wav このように、鳴らす「場所」と「音」と「リズム」がまとめて記述されます。 「00 で休符を置く」という感覚に慣れるのが、テキスト編集のコツです! |
#00114:05 | #001 の 14チャンネル (1P側 4番キー) に : 音05 |
#00115:00000008 | これはもう読めますよね! ヒント: #001 15 : 00 00 00 08 |
#00101:0100020001020100 | #001 の 01 (BGM) に : 01 00 02 00 01 02 01 00 多重定義の配置であることに注意!これは8分キックのどっどっどどどっ |
#00101:0300040003040300 | BGM レーンのチャンネルはすべて 01 です。 これはキックと同時に鳴る8分クラップ (多重定義含む)、ぱっぱっぱぱぱっ |
#00101:000B000B000B000B | #001 01 : 00 0B 00 0B 00 0B 00 0B これは8分の裏打ちハット。 |
#00101:0A000A000A0A0A00 | #001 01 : 0A 00 0A 00 0A 0A 0A 00 リズムはさっきのキックと一緒。 |
BMSC / BMSE で保存すると小節と小節の間が1行空きます。(詰めても可) | |
#00212:0006070000000000 | #002 12 : 00 06 07 00 00 00 00 00 この配置も多重定義です! |
#00214:05 | もうヒントいらないよね! |
#00215:0000000800000000 | ノーヒント! |
#00216:0000000000090000 | ヒント: チャンネル 16 = 1P側スクラッチ、です。 |
#00201:0102010200000000 | 慣れるとソースをパッと見るだけで音が聴こえます。 |
#00201:0304030400000000 | 変拍子や BGA を記述する場合も、考え方はまったく同じです。 |
#00201:000B000B00000000 | 「小節を何等分するか」 大事なポイントはこれだけです。 |
#00201:0A0A0A0A00000000 | つくづく神ソースだと思います。 |
以上がこの譜面のデータ部分でした。
省略可能な記述は省略されているので、最初は分かりにくいかもしれませんが、こうするとどうでしょう?
#001 を8分間隔に書き直して、省略された箇所を一部埋めた例です。※この記述でも正常に遊べます。
横倒しに見ればそのまんま譜面エディタなのがお分かりいただけましたでしょうか? ガッテンガッテン
◆注意点
音や絵の定義チャンネルを2桁で表現している為、配置も必ず2文字ワンセットで指定しなければなりません。
#00111:010101010
などと奇数個で記述したり
#00111:01 0001 0001
などとスペースを挟んだりするとアウトです。
#00111:キック4つうち
などと記述するのも当然アウトです。後から書き直すのは面倒なので注意。
#00111:YamajetisSugoi
これは ZZ拡張の7分音符となりますが、特に配置が面白くなるわけではありません(^^)
※区切りの半角コロン(:)をセミコロン(;)と打ち間違うと、GDACは以降をコメント文と誤解釈します。
※変なソースを受け取ったときの解釈は本体によって異なります。(=遊ぶ本体によって違う配置になる)
データの補足
◆おもなチャンネル番号
まず、キー以外のレーンのチャンネル。
#xxx01 | BGM |
このチャンネルに限り、1行=レーン1本です。 BMSC では28行、 GDAC では30行、 BMSE では32行まで表示されます。 同時発音数があまりに多くなると、発音しきれなくなる場合があります。 ハードウェアのスペックにもよりますが、同時10音を超えるとちょっと危ない? ※発音数の軽減策 音をまとめ録りする、一部の BGM オブジェを 1/192 ずらす、など |
#xxx02 | 小節長 | その小節の長さを指定します。小数値指定も可。詳細は 別項 を参照。 このチャンネルに限り、オブジェとしては扱いません。数値指定のみです。 譜面エディタによって管理法が異なります。 BMSC / GDAC では、小節の表示間隔は小節長には影響されません。したがって BPM と相関関係にあるタイプの小節長操作が容易になります。 反面、小節長を音価の和として扱う変拍子の編集は非常に困難です。 BMSE では、小節長の値によって各小節の表示間隔が変動します。 小節長が音価の和に分解できる値であれば、変拍子入力が容易になります。 反面、小節長を BPM との相関関係で扱うタイプの操作はやや苦手です。 「BMSC は割り算、BMSE は足し算」というイメージで考えるとよいかも? |
#xxx03 | BPM | BPM 1 ~ 255 の範囲内で BPM を途中変更します。 値は2桁の16進数 (01-FF)で指定します。 たとえば4拍目で BPM を 255 に変更したい場合は、 255 (10進数) = FF (16進数) なので、#xxx03:000000FF と記述します。 一種の 「叩かないオブジェ」 として配置する、と考えるとよいでしょう。 BMSC では、BPMオブジェを 192分間隔で何個も連続させると保存エラーが出ます。 (エラーの再現条件はちょっと分かりませんが こんな例 はアウトです) 追記:思い出したんですが、音や絵も 192分が何個も連続するとアウトでした。たしか定義番号が同じか違うかでも変わったような… BMSE では、BPMオブジェは通常オブジェと同様に何個でも置くことができます。 |
#xxx04 | BGA | BGA レーンです。#BMP の定義リスト番号を並べて配置します。 定義範囲が 00-FF に収まっている場合、画像未定義の空ナンバーを配置すると、 色番号 #000000 (黒) のファイルをロードした状態と同じに解釈されます。 (現在主流の本体ではすべてそうなりましたが、アウトな本体もあるかも…) ※拡張定義でこれをやると、本体によっては他の定義ナンバーの画像に化けます。 |
#xxx06 | POOR | POOR(ミス画像)レーンです。 #BMP の定義リスト番号を並べて配置します。 ※一度ここに画像を配置すると、以降 #BMP00 の画像は呼び出せなくなります。 |
#xxx07 | LAYER | レイヤーのレーンです。 #BMP の定義リスト番号を並べて配置します。 通常は透過色は #000000(黒)です。本体によっては透過色も指定できます。 通常定義の範囲内であれば、空定義を配置することでレイヤーを解除できます。 |
#xxx08 | 拡張BPM |
BPM256 以上、または小数値のBPM(拡張BPM)を配置します。 BMSE での編集を強くおすすめします! BMSE で編集する場合は、以下の5行は読み飛ばして構いません。 ------------------------------------------- 拡張BPMオブジェを配置する際は、あらかじめ拡張BPM定義を行います。 たとえば4拍目で BPM を 280 に変更したい場合、まずヘッダで #BPM01 280 のように番号と数値を定義し、それからデータで #xxx08:00000001 と定義番号を指定して配置します。 #BPMxx n という、一種のオブジェ定義として考えるとよいでしょう。 ------------------------------------------- BMSE の場合、拡張BPMオブジェは1個につき拡張BPM定義ひとつを消費します。 BPM 140 - 280 - 140 - 280 と変化する場合、拡張BPM定義ふたつを消費します。 #BPMxx の定義番号は、本体によっては 01-FF までしか対応していないため、 拡張BPMのBPM変更命令は、譜面内で 255回以内 にとどめておくのが無難です。 拡張BPMオブジェが255個以内であれば、01-FF の定義番号内で配置されます。 拡張BPMオブジェが256個を超えた時点で 01-ZZ の定義番号に切り替わります。 つまり、BMSE では拡張BPMオブジェは最大1295個まで置くことができます。 拡張BPMオブジェを譜面内に1296個以上置くと、保存時にエラーが出ます。 その際、拡張BPMに指定した数値 n が 「1295までの連番」 に書き換えられます。 ------------------------------------------- #BPMxx n を使用した譜面は、BMSC では開かないように注意してください! うっかり上書きすると基本BPM が書き換わり、拡張BPM定義や配置が消えます。 ヘッダの #BPM n と誤解釈するためです。 ナナシグルーヴなら等価の命令 #EXBPMxx n を使うことで回避できます。 |
#xxx09 | STOP |
ストップシーケンス = 譜面スクロールを一時停止させる拡張命令です。 停止時間は 「192分音符を1とした整数値」 で指定します。BMSE おすすめ! 192:1小節分の時間だけ停止 96:半小節分の時間だけ停止 48:4分音符1個分だけ停止 こんな感じ。 音符指定なので、その時点での BPM によって停止時間も変動します。 BMSE での扱いは拡張BPMと同様です。停止1回1定義、推奨255回以内。 ※極端な値はネタ以外では勘弁して下さい;(100時間停止とか昔ありました) ※bemaniaDX では記述方式が異なります。(詳細は本体ヘルプ参照) ※ふぃーりんぐぽみゅ せかんど では、停止時間が小節長変更命令に依存します。 ------------------------------------------- 拡張BPM と同様に、番号と数値を定義して「オブジェのように」配置します。 #STOP01 384 = 「2小節ぶん」の停止時間 を、#STOP01 に定義。 #xxx09:00000001 = #xxx の4拍目に、#STOP01 を配置。 ⇒ #xxx の4拍目で、2小節ぶんの経過時間、一時停止します。 ※このとき4拍目のライン上にあるオブジェはすべて再生されます。 音や絵に加え、BPM変更オブジェも再生されます。(BPMが変わると同時に停止) |
#xxx0A- | その他 | ナナシグルーヴ独自拡張チャンネルです。詳細は本体ヘルプ参照。 |
つぎに、キーのレーンのチャンネル。
#xxx11-15 | 1P側 鍵盤 | 通常の鍵盤オブジェ(1~5番)を配置します。たたくオブジェです。 |
#xxx16 | 1P側 スクラッチ | 通常のスクラッチオブジェを配置します。こするオブジェです。 |
#xxx18-19 | 1P側 鍵盤 | 通常の鍵盤オブジェ(6,7番)を配置します。鍵盤との番号違いに注意。 チャンネルが飛んでいるのは、5鍵盤時代の名残です。 じつはこの 18-19 は、7鍵盤のために用意された拡張チャンネルなのでした。 7鍵盤の拡張子を .bme にするのは、非対応本体に読み込ませないためです。 (もっとも、7鍵盤非対応本体は現在では 旧BM98 のみです。) |
#xxx2n | 2P側 オブジェ | 2P側に通常のオブジェを配置します。 |
#xxx3n | 1P側 不可視 |
不可視オブジェを配置します。(=音のアサインだけを変更するオブジェ) BMSC や BMSE では 「Ctrl +書き込み」 で配置できます。 不可視オブジェを使用した譜面を BMSC で保存すると、不可視を置いた小節に最大28行の #xxx01:00 文が挿入され、その下に不可視オブジェ文が記述されます。 ↑ 容量の無駄です(← |
#xxx4n | 2P側 不可視 | 2P側に不可視オブジェを配置します。 |
#xxx5n | 1P側 ロングノート | #LNTYPE 1 のロングノートオブジェを配置します。(=長押しオブジェ) BMSE では 「Shift + 書き込み」 で配置できます。 #LNTYPE 1 なので、必ず始端と終端の両方を記述しましょう。 また BMSE では、LNオブジェを BGM にそのまま移動させてはいけません。 (予期せぬエラーが発生して強制終了します。気をつけましょう) |
#xxx6n | 2P側 ロングノート | 2P側に #LNTYPE 1 のロングノートオブジェを配置します。 |
#xxx17,27 | フリースクラッチ | スクラッチレーンにフリースクラッチ地帯を配置します。 18keys (ダブルプレイ PMS) では、このチャンネルも鍵盤として使用します。 oct/fp モードでは、このチャンネルをフットペダルに使用する本体もあります。 フリースクラッチ = スクラッチ自由演奏地帯です。 フリースクラッチをそのまま配置できるエディタは BMSC のみ、 フリースクラッチを遊べる本体は現在 BM98 / BM98de のみです。 配置したオブジェから4分音符ぶんの長さがフリーゾーンとなります。 この間は判定を気にせず好き勝手にスクラッチをこすることができます。 フリーゾーンをつなげたり、通常のスクラッチと重ねたりすることも可能です。 ※フリースクラッチレーンに不可視オブジェを置くと (#xxx37, 47)、旧BM98 では譜面ロード時にエラーが出ます。 ほかにも本体によってはアウトな置き方があった気がします。→宿題 |
◆分解能
配置部分の文字列の長さは、音符の長さ(音価) と小節長(拍子) によって決まります。
たとえば小節長1(4/4拍子) のとき、配置部分の文字列の長さは例外なく以下になります。
音価 | データの扱い | データ長 |
---|---|---|
全音符 | 小節を定義番号で 1等分する |
xx |
2分音符 | 小節を定義番号で 2等分する |
xxxx |
4分音符 | 小節を定義番号で 4等分する |
xxxxxxxx |
8分音符 | 小節を定義番号で 8等分する |
xxxxxxxxxxxxxxxx |
16分音符 | 小節を定義番号で 16等分する |
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
32分音符 | 小節を定義番号で 32等分する |
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
リズムが細かくなるにつれて、文字列の長さも倍々になります。音価というのがそもそも
「4拍子小節を何等分するか」の相対的な比率を示すものですから、当然といえば当然ですね。
ちなみに、普通は192分音符まで配置できます。( #xxxnn: の後に384文字まで記述できます。)
BMSC や GDAC、やや古めの再生本体の分解能は 192 に設定されています。
分解能192 = 小節を 1/192 まで細かく扱うことができる、という意味です。
グリッド「FREE」でオブジェを置くときは、その小節を192倍の解像度で眺めるということですね。
音符 | 全 | 2分 | 4分 | 8分 | 16分 | 32分 | 64分 | 3分 | 6分 | 12分 | 24分 | 48分 | 96分 | 192分 | |
192分単位 での長さ |
192 | 96 | 48 | 24 | 12 | 6 | 3 | ★ | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
BMSE や uBMplay、 nazo やナナシグルーヴなどでは、分解能をかなり細かく設定することができるようです。
細かく分解できるソフトほど、譜面再生時の正確さが向上します。(ややこしい変拍子や一部のソフランなど)
★重要!
分解能192 の場合、192分単位でうまく割り切れないリズムは正確に表現できません!
たとえば 128分音符を正確に表現するには、分解能384以上が必要となります。
「分解能192で割り切れないリズム」 が含まれた譜面を BMSC や GDAC に通すと、
ソース内の該当行は 「192分単位での近似値」 の配置に強引に書き換えられます。(※後述)
◆変拍子を配置する場合
5拍子でキックを4つうちさせる場合を考えてみましょう。4つうちっていうか5つうち?
#wav01:kick.wav #xxx02:1.25 #xxx11:0101010101 |
← #wav01 にキックを定義 ← 小節長1.25を宣言 = 5/4拍子 = 4分音符5つぶんが1小節 ← 小節を5等分するリズムを配置 = 小節長1.25のとき、これは4分音符 |
テキスト直打ちならこれだけで済みます。
変拍子をうまく扱ってくれる譜面エディタ BMSE や beditor の場合も、これだけで済みます。
しかし小節表示間隔がつねに一定である BMSC や GDAC で変拍子を編集しようとすると、かなり大変です。
またこのソースを BMSC や GDAC に通すと小節を頑張って5等分しようとしてピザなソースが出力されます。
#xxx11:
0100000000000000000000000000000000000000000000000000000000000000000000000000
010000000000000000000000000000000000000000000000000000000000000000000000000000
0100000000000000000000000000000000000000000000000000000000000000000000000000
010000000000000000000000000000000000000000000000000000000000000000000000000000
0100000000000000000000000000000000000000000000000000000000000000000000000000
↑192分に書き換えられてしまいました(ここでは改行していますが実際は一行にズラッと並びます)
読むべきデータ量が増えて本体側に負担がかかりますし、結局のところ美しく5等分しきれていません。
192分音符(00)2個分の誤差が出ます(より正確に5等分する為には分解能 960 が必要です)
また、曲によっては無駄データが膨大な量になります(拙作差分例:仮組み1MB ⇒ text編集後150KB )
BMSE ならこういった面倒ごとは一切意識せずに済みます。変拍子は BMSE で編集しましょう!
しかし環境によっては BMSE が使用できないケースも考えられます。そこでオマケとして小技を紹介します。
◆BMSC +テキスト編集で、変拍子を配置する
たとえば5拍子を作りたい場合はどうするか。考え方としてはこうです。
「BMSC で "6拍子" として作り、"余りの1拍" をテキストで削る」
1.まず BMSC 上でグリッドを 1/24 にして、余る拍の部分を空オブジェFFで埋めます。
(FF でなくても、空定義であればなんでも構いません。 ここでは例として FF を使います。)
2.空オブジェ群をコピーして、5拍子にしたい小節すべてに貼り付けます。
3.このラスト1拍は無いものと考え、あとは普通にオブジェを置いていきます。
余る拍を FF で埋めた状態では、小節内で使えるグリッドは残り20本あります。
小節を20等分するリズム = 5拍子における16分音符です。
つまり、この状態であれば「5拍子時の16分音符」までを置くことができます。
1/24 のグリッドラインを 「5拍子16分のライン」 とみなして配置していきます。
筆者は補助線を表示すると見た目うるさく感じるので、かわりにこんなことをします。
「5拍子化したときの4分音符/8分音符」の目安を設置。
(まず BGM に書き込み、そのまま BGA に移動)
BGA レーンがすでに埋まっている場合は、
鍵盤6・7レーンや2P側に置くこともあります。
(もちろん、目安としての用が済んだら消します。)
空っぽの状態からオブジェを配置する場合、
2P側レーンを表示すると BGM が遠のくため、
人によっては編集しづらく感じるかもしれません。
各自やりやすい工夫をてきとうにやるといいです。
4.プレビュー時は、5拍子予定小節の小節長を1.5にすれば、「5拍子+空1拍」で聴けます。
(小節長1.5 = 6/4拍子です。 編集する段階では擬似的に6拍子として扱うしかありません)
5.5拍子時の32分音符を置きたい場合は、まず空オブジェのリズムを細かくしておきます。
(これを行う理由と "回避策" がピンとくる方であれば、このステップは省略しても構いません。)
グリッド 1/24 = 5拍子16分なので、倍の細かさの5拍子32分は 48分間隔で置いていきます。
が、BMSC には 1/48 のグリッドがありません! 仕方ないので FREE で 4/192 ずつ 置きます。
今回は手間を省くため以下のようにしました。
1/24 で連打配置 ⇒ 4/192 ずらしてコピペ ⇒ 5拍子32分連打 \(^o^)/
6.こんな調子でひとまず完成したとします。 したことにします。
最終的に5拍子にしたい小節はすべて、小節長を1.25にしておきます。 (=5/4拍子)
ここでいったん保存。
7.この譜面をテキストで開きます。 ワードパッドだとこんな感じに FF が並んでいるはずです。
(※画面に収まりきらないので、下の画像は左のほうをカットしています。)
8.そしてこの状態から、ケツの FF をすべて削除。 ワードパッドならこんな感じです。
置換後の文字列の欄は何も入力せずにすべて置換。 これで一括で消せます。
FF で文字列を検索すると、必要な記述まで消えてしまう可能性があるので注意しましょう。
(たとえば DF ⇒ F0 とオブジェ配置が続く場合、"FF" で引っかかってしまう。)
9.これで "余りの1拍" が消せました! 無事に消せるとこんな感じになります。
↑ すみません、5拍子なのに小節長の入力を忘れてます (^^) 手抜きしまくりバレた (^^)
とにかくケツの FF をうまく消すことができたら、この譜面を別名で保存します。
FF を消したほうの譜面はテストプレイ用、
FF を消す前の譜面は編集用です。
これを繰り返して煮詰めていきます。 以上、BMSC での5拍子作成の例でした。
多少面倒ですし、無駄な記述も混入してしまいますが、テキストオンリーで作るよりは簡単確実です。
他の拍子や、BGA や BPM レーンの場合も、手順はまったく変わりません。
7/8拍子
小節長1で作成し (8/8 - 1/8)、ケツの8分音符1個ぶんは FF で埋めておきます。
7/4拍子
小節長2で作成し (8/4 - 1/4)、ケツの4分音符1個ぶんは FF で埋めておきます。
17/16拍子
小節長1.5で作成し(24/16 - 7/16)、
ケツの16分音符7個ぶんを埋めておきます。
そのように準備してから、配置して煮詰めて、最後にテキストで "余る拍" を消します。
空オブジェ FF の配置個数は、本来は各レーンのリズムの解像度に合わせるのが丁寧です。
この例でいえば、4分音符しか使わないレーンなら FF は1個置けば済みます。(#00111:0101010101FF)
(じつはもっと効率よく作る方法もありますが、慣れないと間違えやすいのでここでは紹介しません)
分かりやすさ優先で、FF は一律4個 と覚えておけば大丈夫です。追記:大丈夫じゃneeeeeeee
リズムの解像度なんかは、後からいくらでも合わせられるので最初は気にしなくても構いませんが、
「最初に埋めた FF よりも細かいリズム」を使う場合だけ注意。 いかに「後で簡単に消す」かを考えます。
◆別の方法
5拍子であれば、「4拍子 + 1拍」という具合に小節そのものを2つに分けてしまう方法もあります。
「小節長1の小節 + 小節長0.25の小節」のような扱いです。 小節長と配置をちょっと変えるだけ。
これなら BMSC のみで作れるうえ、割り切れないリズムの扱いに悩む必要もほとんどありません。
7拍子なら「4拍子小節 + 3拍子小節」という感じですね。 3拍子なら BMSC でも簡単に作れますし。
お手軽な反面、小節線が拍子と合わないのがネックです。 でもいろいろ試してみるのも面白いですよ。
◆結論 → こんなことするより BMSE 使ったほうが早い
しかし完全無欠に思える BMSE でも、作りたい譜面の方向性によっては編集に不向きな場合もあります。
小節長の扱いは 音価の足し算(変拍子入力) に特化しているため、BMSC ほど割り算の融通が利きません。
「実際の BPM は 280 だけど、プレイするには速すぎるから譜面は BPM 252 で流そう!」なんてとき、
BMSC なら全小節長を 0.9 にして、BPM を 252 に変えるだけで済みます。[実例1]
しかし、音価が基準の BMSE で同じ操作をするのは困難です。
「実際の BPM は 140 だけど、きまぐれで譜面は BPM 175 にしてみよう!」 なんてときも、
BMSC なら全小節長を 1.25 にして、BPM を 175 に変えるだけで済みます。[実例2]
この操作を BMSE で強引に行って保存すると、64分配置の行が 240 分配置に書き換えられます。
小節長をBPMの比率として扱う場合、BMSE ではソースがスマートになるとは限りません。
「半小節ごとに BPM が+1されていく」 みたいなわんぱくなソフランネタは BMSC の専売特許といえます。
しかしもちろん、変拍子や拡張定義をふんだんに使いたいときは BMSE の右に出るエディタはありません。
ソースがチャンネル別にまとまる GDAC も、#random なんかを使う際に併用すると非常に便利です。
各エディタの特徴を把握して、用途によって使い分けることが肝要です。 テキストエディタも含めて。
◆BMSCで編集したいのに、拡張定義を使っていて開けない
…なんてときこそテキスト編集の出番です! 譜面をいくつかの "部品" に分けましょう!
BGA だけ ZZ拡張、 WAV は通常定義・・・なんて場合は、BGA だけを選り分けます。
1.BGA のヘッダ部分のみをテキストで抜き出して別名保存し、これを BMSE (A) で開く。
2.元譜面を BMSE (B) で開き、BGA オブジェを全コピーして、BMSE (A) に貼り付けて保存。
3.残った音部分を BMSC で開き、のびのびと編集。
4.最後に音と絵をテキストで統合。
BGA は通常定義、WAV は ZZ拡張・・・なんて場合は、BMS List Sorter をうまく使うとよいですね。
1.WAV定義リストと曲の構造とをじっくり観察し、譜面をてきとうに選り分けて別名保存。
(「前半/後半」とか、「ドラムパート/音階パート」とか、あとで編集しやすい形に分ける。)
2.部品譜面のバックアップコピーを作ってから、各WAV定義リストを通常定義にソート。
(変換ウィザードの「未使用定義削除」や、BMS List Sorter を活用します。)
3.各部品を BMSC で編集し保存。
4.バックアップを参照しつつ、各部品の定義リストを再びソートして、分解前の状態に戻す。
5.各部品をテキストで統合。 (変なソフランとかしてなければ、BMSE 間でコピーしてもOK)
※この手順を応用すれば、複数の bms 作品を譜面1枚にまとめることも簡単です。(メドレー差分など)
BMSC でやりたいことが単にソフランの倍率操作だけである場合
わざわざ面倒なことをしなくても、
BMSE で BPM だけ置いて保存 ⇒ テキストから小節長のみズラッと指定 (※) ⇒ おしまい。
※面倒であれば BMSC に代行してもらいましょう。 譜面をパーツに分ける発想は同じです。
仮に #100 - #200 までの小節長操作 (BMSC型の自由倍率ソフラン) を行いたいなら、
「ソース抽出用の空譜面」 を作成して BMSC で小節長だけを入力し(実例3)、
ここから該当データだけを切り取って、目的の譜面ソースに貼り付けます。
この考え方は、込み入ったランダムローディング譜面などを作る場合にも応用できます。
工夫すればなんとかなる(かもしれない)という可能性をちょっとだけ提供するのがテキスト編集です。
コメント
再生本体が譜面ロード時に無視する文です。あってもなくても構いません。
◆ヘッダ部、データ部、チャンネル等のインデックス
BMSE | *---------------------- HEADER FIELD *---------------------- MAIN DATA FIELD |
BMSC | *---------------------- HEADER FIELD *---------------------- MAIN DATA FIELD %URL %MIXI |
GDAC | ;Created by GDA Creator Professional Ver.xx ;Header ;Part 1 ;Part 88 ;Part 99 |
beditor | /***** CREATED/MODIFIED USING BEDITOR *****/ /* HEADERS */ /* MAIN DATA */ |
他にもあるけど、ざっとこんな感じです。1個だけウソが混じってます?_?
各エディタに譜面を通すと、それぞれのコメント文が自動的に挿入されます。
BMSE は、インデックスと拡張命令以外の全コメント文を保存時に消去します。
他本体から出力されたインデックスも、BMSE で譜面を上書きすると消えます。
GDAC は、半角セミコロン以降をすべてコメントとして解釈します。
#xxx11:01010101 ;キック4つうち
このようにデータの後にコメントを挿入することも可能らしいですが、
この文がどの本体でも問題なく処理されるかどうかは筆者は検証していません。
◆再生本体が対応していない命令
本体そのものが旧式なため対応していない拡張命令、あるいは他本体の独自拡張命令です。
再生本体が対応していない命令をロードすると、それらはコメント文として解釈され単に無視されるか、
あるいは既存命令との誤解釈を起こすなどして、なんらかのエラーを返します。
もしくは正常に再生されません。 (その場合、意図した譜面にならない可能性があります。)
旧式本体に読ませてしまいがちな拡張命令を紹介します。
拡張定義
対応範囲外の定義ファイルは再生されません。 #BMP の ZZ拡張は特に危険度が高いです。
拡張BGA
BGA の座標定義。 ほとんど見かけませんが一応。 たしか nazo はサポートしていません。
拡張BPM
256以上または小数点の値のBPM。 BMSE 標準搭載なので、拡張であることを忘れがちです。
ストップ
これも忘れがちですが拡張命令です。
ロングノート
最近の本体は自動でLN譜面を識別してくれて便利な反面、.bml への拡張子変更を忘れがち。
小節長
通常命令ですが、大きすぎる値や小さすぎる値はカバーしきれない本体も。(bemaniaDX など)
ロングノート対応本体はたいてい拡張BPMやストップにも対応しているため、それらを使ったときはLNでなくても拡張子を .bml にすることで、旧式本体に譜面を読ませないようにする方法もあります。
独自拡張命令の場合、なるべく既存命令と競合しないよう配慮されているはずなので比較的安全ではあります。
しかし筆者は全ての本体で全ての命令を検証したわけではありません。アウトな場合もあるかもしれません。
独自拡張命令についての詳細は、各本体ヘルプを参照してください。
※ナナシグルーヴや ふぃーりんぐぽみゅ せかんど などで採用されている #COMMENT "xxx" は、ここでいう
"コメント文" ではなく、れっきとした拡張命令です。(譜面選択時に表示される文字列を定義します)
◆その他
製作者さんの隠しメッセージ、隠し要素のヒントなどです。じつは意外とたくさんあります。ここで実例を挙げるのはマナー違反と思われるので避けます。何かの折に見つけた方は一人でうっとりしましょう。
文頭にダブルスラッシュ(//)などを入れて区別したり、区別も何もなくそのまま文章を挿入したり、ファイル偽装のために顔文字などを数KBぶん挿入して念入りに容量調整したり、readme.html の拡張子を .bms に変えると隠し譜面が遊べたり( html ソースがまるごとコメント文扱い)、本当にさまざまな例があります。
なんというか無駄な遊び心が愛しいです。
しかし繰り返しますがこれらのコメント文は BMSE で譜面を保存するとすべて削除されます。どうしても消されたくない場合はコメントの文頭に半角シャープを入れれば大丈夫ですが、文の内容によっては本体が誤解釈をする可能性があります。 何か目論んでおられる方は気をつけてください。
その他、応用例や注意点
◆BMSC の抱える地雷「左詰め」
まだ BMSC を使っておられる作家さんも多いので、僭越ながら注意を促す意味でいちおう書いておきます。
BMSC では、「環境」タブの「保存の際に編集情報を記録する」のチェックを外すと、
BGM のオブジェをすべて左詰めにすることができます。[ kami.bms ]で試してみるとこうなります。
左詰めにすると、BGM から無駄な記述が無くなるので譜面のファイル容量が少し減ります。
BGM レーンを右端まで広々と使っている譜面は #xxx01:00 文がいくつも入る。
容量の無駄になります。
以下の例の場合、前者と後者は同じ内容だが…
前者は容量の無駄になります。
#xxx01:11111111 #xxx01:0022002200220022 |
#xxx01:1122112211221122 |
4分打ちと裏打ちを別レーンに分けていた場合 | 同じレーンに詰めれば15文字節約できる。 |
という理屈で、なんでもかんでも乱暴に左に寄せます。
たしかにこういうのが何十小節も積み重なると、削れる文字数も馬鹿にならない量になります。筆者の差分作成経験では 40KB くらい減らせた例もありました。
でもこれをやってしまうとあとから譜面を編集するのが非常に面倒になります。
画像を見れば、BGM のパート並びがメチャクチャになっているのがお分かりいただけるかと思います。
しかも [ kami.bms ] の場合は容量がビタイチ変わりません (^^)
「ここまでして容量を削っていた時代もありました」という涙ぐましい昔話なんですが、この左寄せ機能によるメリットを実感できる場面はいまやほとんどありません。減らせてせいぜい数十KB ですから雀の涙、むしろデメリットのほうが大きいです。この機能の内実を分かったうえで使っておられる場合はまったく問題ありませんが、知らずにチェックを外してしまっている場合、あとで大惨事を招く可能性があります。BMSC をメインで使っておられる方は、いま一度ご確認いただければと思います。
もしチェックが空いていたら、チェックを入れなおすことを強くおすすめします。
◆BGMを並べ替える
BGMをうっかり左詰めにしてしまった
最近でもたまに見かけます
差分を作りたい譜面のBGMが左詰めだった
昔の作品なんかでは結構あります
DPを作る際などに、BGMが遠くて編集しづらい
これは筆者の個人的なワガママ
こういったときは、編集しやすいように BGM を並べ替えてしまうのも手です。
BGM のオブジェが少なければ、オブジェを1個1個移動させたほうが早い場合もありますが、
ふつうはそんな面倒なことやってられないのでエディタの検索機能をフル活用します。
ためしに、さきほど間違えて左詰めにしてしまった [ kami.bms ] を BMSE で元に戻してみます。
1.検索窓を開いて、頭からケツまでの BGM すべてを選択範囲に指定し、
(この作業、一括でできるといいな! "1P側" "2P側" "BGM" "Etc"
大チェックボックスから「各チャンネル全体のオンオフ」ができると便利かなーと思います)
オブジェはなんでもいいけど、とりあえずキックを指定。(#WAV01-02)
こんな感じ。
するとこうなるので、 ⇒ 「BGM のキック全部」をまるごと右にズラす。
(左詰めにしたので、右側はガラ空き)
2.こうやってパートごとに選り分けていきます。
つぎはそうね、なんでもいいけどベースあたりを。(#WAV0A)
この際、必ず「最初から最後までガラ空きのレーン」に移動させるようにしましょう。
他のオブジェと重なる場所に移動させると、曲そのものが変わってしまいます。
また、選択したパートによっては配置がテトリスみたいにメチャクチャになってるので、
うっかり右に寄せすぎてBGMレーンの欄外に飛び出したりしないように注意しましょう。
そういう危ないパートは、2P側とかの作業スペースにいったん退避させてから
てきとうに並べなおすといいです。
並べなおすときも、曲の最初から最後までいちいち選択するのは面倒です。
各レーンごとに検索窓からボコボコ指定していけば、手早く整形できます。(左図参照)
とまあ、こんな感じで「選り分け ⇒ 整形」を繰り返していけば、
左詰めになってしまったBGMも、編集しやすく並べなおすことができます。
たいていの曲なら、これを数回も繰り返せばだいたい中身が把握できるようになります。
あるいはループ主体の曲であれば、ループの最小単位を見極めて、そこだけを復元してからコピーしまくれば、
それだけで済むこともあります。(筆者はほとんどの場合そうしています。)
ちなみに [ kami.bms ] の場合は、BGMのオブジェが少ないうえ
左寄せにしてもあんまり配置が散らからないような構造だったので、
じつは1個1個オブジェを選択したほうが簡単に並べ直せるんですが(笑)、
あくまで他のケースに応用するための説明として、この方法を紹介しています。
DP譜面編集用にBGMを見やすくする場合も、同様の手順で手早く整頓できます。
「叩かせる可能性がありそうなパート」だけをBGMの 「左端からだいたいレーン5本以内の範囲」 に移動させておけば、全画面表示にしたときに「1P側+2P側+BGM」が一望できるので、とても編集しやすくなります。オマケで容量が減る場合もあります(笑)
あと編集モード (矢印) 中は、"Shift を押しながら移動"で縦ズレを回避できます。
◆ダイレクト入力
ツールバーはしょっちゅう使うから分かりますよね。
ステータスバーもグリッド FREE のときなんかはものすごくお世話になりますね。
ダイレクト入力枠って何コレって話ですけど、ここからデータを直接入力できます。
たとえばこう打つと、
こうなります。
( #BMPfo と #BMPon が、1小節目の BGA レーンに2分間隔で配置されました。)
BMSE なら、「BGM と小節長」以外の全チャンネルを直接入力することができます。
(BGM はどのレーンも全部 #xxx01 になるので入力できません。入力するとバグって落ちます)
(小節長も扱いが特殊なので、入力は一応できるけど止めておきましょう。表示が変になります)
ソースを打てたところで普通に編集したほうが普通は早いと思いますが、
たとえばこの [ cyc-kami.bms ] の BGA をゼロから配置する場合なんかはどうでしょう?
定義を見てみると、どうやら連番で順番に並べればオッケーのようです。
なので、な~~~んにも考えずダイレクト入力枠に16進数の連番を打ち込めば、
あれ、なんか違くね? こまかすぎじゃね?
…うっかり96分配置にしてしまったようです
置いた配置をいったん全部消して、ダイレクト入力枠から余計な文字列を消して、再度エンター。
これで64分間隔の1ループが配置できました。
いかがでしょう? ループの部品を連番で配置するだけなら、
普通に置くよりダイレクト入力のほうが早いのでは?
ループの部品さえ打ち込んでしまえば、
あとはコピーするなり移動するなり好き放題ですから、
つまりこれは、ゼロからオブジェを書き込むときに
最も効果を発揮する機能といえそうです。
こういう機能もありますよ~、という記事でした。
◆配置間隔の変更
いろいろ方法はあるんですけれども、いちおうテキスト編集の解説なので、それに沿った方法を紹介します。
ちょうどいいので再び [ cyc-kami.bms ] にご登場ねがいましょう。譜面をワードパッドで開きます。
#00104:0102……(中略)……3F40
この行のコロン以下の文字をダブルクリックし、
#00104:0102……(中略)……3F40
「配置文字列」 だけを選択しコピー。これを行のケツに2回貼り付けると、
#00104:0102……(中略)……3F400102……(中略)……3F400102……(中略)……3F40
こうなります。
一見なにがなんだか分かりませんが、
この緑色の棒に見えるモノは
BGA の 192分配置です。
64分配置 × 3 = 192分配置 という、単にそれだけの話なんですが。
ちなみにプレビューすると
ちゃんと3倍速でループします(笑)
リズム分解能とデータ文字列長の対応関係を理解すると、簡単にいろいろできるようになります。
絵のループ単位を把握すれば、再生速度を早めたり遅くしたり、ちょっとしたアレンジも可能です。
曲のループ単位を把握すれば、ソフランその他の小節長演出もお手軽にできます。
なにか譜面で試してみたいことを思いついたときに、こういう方法もあるということを知っておけば、
もしかしたら手間が省けたりして役に立つ・・・こともある・・・かもしれません。
◆BMSC + テキスト編集で拡張命令
BMSE が使えない環境でも、工夫すれば拡張命令を記述できます。
BMSC で #LNTYPE 1 のロングノートを配置
#LNOBJ xx を使えば済むけど一応紹介。ここに載っている方法がそれです。
BMSE でいう緑オブジェ(LN)を、編集段階では2P側の通常オブジェとして配置し、保存。
テキストから、2Pチャンネル(#xxx2n)をすべて1PLNチャンネル(#xxx5n)に置換。
#LNTYPE 1 の宣言記述と、譜面拡張子の変更をお忘れなく。
BMSC で拡張BPMやストップシーケンスを配置
考え方は上と同じです。BGA レーン(#xxx04)に空オブジェxx を置いて保存。
テキストでそれを書き換え。#BPMxx n または #STOPxx n のオブジェ定義記述も忘れずに。
方法を詳しく知りたい方は こちら なども併せてご覧ください。
◆小節長について
BMSE は小節長を音価の和(積?)として扱っています。拍子入力の分母の最小は 64 です。
ということはつまり64分音符でうまく割り切れない小節長は正確に表現できません!
ごくまれに例外もありますが、基本的には小節長の値は 0.015625 の倍数しか扱えません。(1 ÷ 64 )
それ以外の値が含まれた譜面を BMSE に通すと、「64分単位での近似値」に丸められます。
たとえば元の小節長の値が 0.01 であれば、0.015625 に書き換えられます。
※ BMSE で開いただけでは、正確な小節長の値は分かりません!
なぜなら譜面を開いた時点で、もうすでに丸められて表示されている可能性があるからです。
拍子タブを一瞥しただけで値を判断してしまうと危険です。(例:[ X / sasakure.UK ]
幸いそういった例はあまり多くはありませんが、怪しいなと思ったらテキストから確認しましょう。
小節長を使った演出をタイプ分けすると、こんな感じになります。
BMSE の守備範囲 | BMSE の守備範囲外 |
---|---|
ほぼあらゆる変拍子 単純な倍率のBPM変化 小節途中でのBPM変化 |
複雑な倍率のBPM変化(別項参照) 極端に長い小節長(16 以上) 極端に短い小節長(0.015625 以下) |
ようするに 【 視覚的な演出 】 の行き過ぎたタイプが "守備範囲外" に該当します。
BMSE の守備範囲外の小節長を狙う場合、他の譜面エディタもしくはテキスト編集が必要になります。
◆小節途中でのBPM変化
IIDX の [A] 的なタイプ。【基本BPM拍 + BPM変化後の拍】という、一種の変拍子として扱います。
たとえば 「BPM90 の4拍子曲を、4拍目で BPM180 にしたい場合」 は
低速3拍 + 倍速2拍 (※低速時の1拍相当) = 合わせて5拍と考えます。⇒ BMSE 超推奨
BMSE でこの例を編集するなら、まず4拍目に BPM180 を置き、
⇒ 2倍速だから、4拍目からの全オブジェ間隔を2倍に広げよう!
⇒ 拍が1拍ぶん足りない! ので拍子を 5/4 に!
やりたいことを順繰りにやっていけば済みます。
"小節長" なんて単語は意識する必要すらありません。
BMSC で同じことをやろうとすると、つじつまを合わせるのが非常に面倒です。
そもそも 「小節内の全オブジェを5拍子間隔に置き直す必要があること」 が直感的に分かりません。
たとえそこまで分かっても、5拍子 = 小節を5等分 = 192 ÷ 5 = 38 あまり2 = \(^o^)/
◆複雑な倍率のBPM変化
【 BPM : 小節長 】この比の割合は、曲の実BPMや拍子が変わらないかぎり一定となります。
これを利用したBPM変化演出が 自由倍率ソフラン です。小節長を完全に比として扱います。
BMSE で扱える小節長は 64分の倍数値に限られるため、こうしたタイプの操作には向きません。
◆極端に長い小節長
小節線を見せないことで "ブレイク感" を狙う心理演出。小節長を視覚効果として扱います。
BMSE で入力できる拍子の上限は 64/4拍子なので、小節長16が最長となります。
それ以上は自動的に短縮されます。
怪しい譜面を読ませる際は注意が必要です。(拙作差分例:#034 )
ただしおそるべきことに、BMSE は小節長16以内であれば自由自在にオブジェを置けます。
なので、たとえば こんな例 も作れてしまいます。(1小節192分 × 小節長16 = 分解能 3072 )
◆極端に短い小節長
小節線の滝を降らせて圧迫感/加速感を演出します。視覚的なスキップノイズというか。
筆者はアレンジプレイゾーンなどに突入する際の目印としてこれを試してみたこともあります。
BMSC は比を扱いやすいため、昔の作品では小節長の値を百分率で入力した例が多いです。
たとえば 小節長1% ( 0.01 ) を 100小節続ければ、経過時間1小節ぶんの滝が設定できます。
もしその譜面を BMSE に通すと、100/100 が 100/64 に書き換わり、16分音符×9個分ズレます。
スキップノイズ譜面を BMSE に読ませる場合は注意が必要です。(例.[ 人間の盾 / 赤蓮舞踊師嵐堂 ]
◆その他
小節長によって、音の尺ズレをカバーした例もあります。
例.[ Ether dive / Umber Green ]開幕時の 001.wav は微妙にテンポと同期しきれていません。
音だけ聴くと7小節ぶんに感じるし実際の扱いも7小節のはずですが、小節長7にすると譜面がズレます。
なので、BMSC で小節長をてきとうにいじって、生演奏のゆらぎとかモタリとかを吸収しています。
拍子入力の厳密さが要請される BMSE では、なかなかこういうてきとうな操作はしづらいです。
※小節長24が16になったり、誤差が積もり積もって 200/64 とかになったりすると悲惨な事になりますが
丸め誤差 1/64 程度なら、ほとんど違いは分かりません。丸め処理に気づかない場合すらあります。
なので、BMSE に「比の譜面」 を通したとしても、たいがいの場合は大丈夫です!
◆パスタソース
#title / #artist | 原曲 |
---|---|
U9 / futher | L9 / paraoka |
Sofa $15 -> $1/ sta feat.DJ MRYM | kusofumen lovers |
t(^x^)t~~ / paper company | (^^) / Yamajet |
L / (^^) | L9 / paraoka |
「韓国」について / Mr.Mountain | ninth / sta |
これらはいわゆるクソ譜面に分類されるものです。(なかでも一番ひどい "鑑賞譜面" と呼ばれるタイプ)
とくに後者2例はまともに遊べる代物ではありません。
しかしいずれも稚気に溢れていて、インパクトは絶大です。積極的におすすめはできませんが、テキスト編集の貴重な作例です。興味がある方は探してみてください。
chapter4では異なるアプローチについて紹介します