これは何?
まず完全に自分用にしか作ってないからろくなタイトル決めてないのは許して!
これはMIDIファイルを読み込んで解析し、Minecraftに取り込むだけで一発で音ブロック演奏動画が撮れるような設計図データを出力するツール。
有名どころだとNoteBlockStudioがあるけど、ああいう感じのやつを自分好みで好きに組んで作ったっていう感じ。
一応ツール自体は他の機能もいろいろあるんだけど、目的が全然違うからこれに絞って書いてみる。
一番のこだわりはやはりBlack MIDIを再生することに特化していること。
このツールのおかげで今まで見たことないくらいとんでもない規模の音ブロック演奏動画を作れるようになった。
このツールを使って作った動画紹介
- [Minecraft/Black MIDI] In the Hall of the Mountain King on 212,898 Note Blocks!!
In the hall of the Mountain KingのBlack MIDIをマイクラで再生してみたやつ。 このMIDIはもともとGuiter Heroをやってた海外配信者が、この音源を元に作られた無理ゲー譜面に対して挑んで絶望するという動画で知ったんだけど、 それを見てから似たような譜面を別の音ゲーでいろいろ作ってみたりしてた。 音ブロックを21万個も使っているので最初は不安だったけど、軽量化modとかを駆使しながらなんとか動画化できた。 同時発音数が凄いことになってることをアピールしたかったのであえてUIは消さずF3表示を付けながら再生している。 最後のシーンでは同時発音数がギリギリ3000を超える瞬間があり、マイクラってここまで耐えられるんだという驚きがあった。 あまりにも重すぎてヤバかったのでローカルでサーバーを立てて負荷分散しながら撮ってた。
- [Minecraft/Black MIDI] 20万個の音ブロックで「少女さとり ~ 3rd eye」
こちらも音ブロックを20万個ほど使っている演奏動画。 上のとは違いこっちは自分で作ったMIDIを使っている。 減速後に後半パートに突入するところがちょっと微妙になってしまったのが心残り。 MIDI Artを常に下側に置いており、MIDIプレイヤーで再生したかのような映像を目指して作っていた。 PCを整理していろいろ消したりしたからかそこまで負荷が気にならず、上の動画とあんまり規模は変わらない(なんならむしろ重そう)のに、シングルプレイでも余裕で再生出来てしまった。
どういうデータが出力される?
出力されるデータは「LiteMaticaと」いうmodで読み込むことを前提にしており、拡張子は「.schematic」。(もしかしたらmceditなどのツールでも読めるかもだけど未検証) LiteMaticaで読み込んでマイクラ内に張り付けると、バリアブロックで作られた16本のレールが一直線に伸び続けたものが現れる。 先端上部には石でできた足場とボタンがあり、ここでクリエイティブで飛行しながらボタンを押すことで音ブロック演奏が始まる。 移動の仕組みはテレポートを採用しており、3ブロックごとに前に3ブロックテレポート、というのを繰り返し続ける。(なのでテンポが遅いとカクカクした動きになってしまう) テンポ変更には「TickrateChangerRezurrection」というmodを使用しているが、「/tick rate」コマンドを使用しているだけなのでそれが動けば何のmodでも動くはず。 また、これとは別にMIDI Artモードも用意していて、こちらはBlack MIDIの醍醐味であるMIDI Art部分を羊毛ブロックで表現したデータを出力する。 先端にはガイド用の石ブロックを入れてあり、先端と中心をそろえるときれいに配置できるようにしてある。
こだわった機能
もともとはNoteBlockStudioを使っていたが、あれでは物量に限界があったり一部の表現ができないなどの制約があったため、それらを解消できるのを目指した。
- テレポートによる移動
各レールとは別に中央下部部分にもレッドストーンを配置しており、そこには3ブロックおきに3ブロック前へテレポートさせるコマンドブロックが並べられている。 これにより再生中は自動で前に進んでくれるので、何も気にせず最適な音量で再生してくれる。 ただし、自動でテレポートするので途中で中断することができない。(中断したい場合はおとなしくワールドを作り直すか、TickRateをめちゃくちゃ上げて処理落ちさせて途切れさせるしかない) - テンポ変更
これはNoteBlockStudioではできなかった要素(というかバニラでもできないしね) 移動のためのコマンドブロックの横に、「/tick rate」を入れたコマンドブロックを配置することで、再生中にスムーズにテンポ変更している。 読み込んだMIDIに設定してあるBPMから計算されたTickRateを入れてあるので、急に変わってもだんだん変わってもそれに合わせて変更可能。 - 音量変化
これもNoteBlockStudioではできなかった要素。 各レールの中心から左右に15ブロック伸ばした30ブロックの範囲で、ノーツ音量に合わせて配置する距離を調整することによりノーツごとの音量を調整している。 これによりBlack MIDIでよく見られる、ピアノを連打してだんだん音量を上げたり下げたりするような奏法を再現することができた。 - 32分音符の演奏 通常はリピーターの遅延1でも1RedStoneTick=2Tick分の長さにしかできないが、ピストンを使うことで0.5RedStoneTickのずれを起こすことができるので、これを利用して通常の二倍の速さで音ブロックを鳴らしている。 これはこのツールを作る前に「亡き王女のためのセプテット」を作った時に多用しているので見てみるとわかりやすいかも?
レール16本の内8本をこの0.5RedStoneTickずらした状態にすることで、常に32分音符での演奏を可能にしている。
- 大量の同時発音
音量が違う場合はそのまま配置できるが、同じ音量で沢山鳴らそうとするとレール8本分しかないので場所が被ってしまう。 その場合は、1ブロック横にずらすなどしてできるだけたくさん配置できるようにしている。 本来の場所からずらすので多少音量が変わってしまうが、そんなに大量に鳴らしているのならほぼ誤差だろう。 Black MIDIでは平気で128鍵同時押しとかを多用するので、こうでもしないとまともに鳴らせなかった。 当然バニラではこんなにたくさん発音できないので、最大同時発音数を底上げしてくれるmodが必須となる。 - バニラの音色を使いつつ、幅は広く
私のこだわりでしかないけど、音色をピアノなどに変えてしまうとマイクラ感が薄れてしまうので、できれば音色は変えたくなかった。 ただバニラでは幅が2オクターブしかないので、音の高さが違う音色をそれぞれの高さに割り当てることで、10オクターブの表現をしている。 デフォルトのハープを中心に、-2オクターブをギター、-4オクターブをコントラバス、+2オクターブをベル、+4オクターブをチャイムとして割り当てている。 チャイムがちょっと聞きづらかったり、ギターが高めの音だったりするが、まぁこれはこれでマイクラの味があって良いかなって思ってる。
MIDI Artの出力
Black MIDIと言えばMIDI Artによる装飾なのでそれも欲しいなと思い、これらを出力する機能も作ってみた。 16分音符1個あたり3ブロックの間隔なので、もとのMIDIから良い感じに見た目を圧縮して、できるだけ普通にMIDIプレイヤーで再生したときと近い見た目になるように試行錯誤している。 ただ一部のMIDIでは謎に音部分とArt部分がずれる現象が発生しており、原因がわかっていないので調査中。
バイナリでデータを構成
マイクラのデータはNBTタグというもので構成されており、最初はライブラリを使っていたが、途中で興味が沸いたので自分でバイナリで組んでみることにした。 各タグのバイトデータをどのような順番で並べたら良いかという構造を調べて、最後にバイナリデータを組み立てて出力している。 途中で思いついたので、演奏部分の出力はライブラリで、MIDI Art部分の出力は自作クラスという意味の分からない状態になっている。
まだできないこと、今後できるようにしてみたいこと
出力するデータは1ブロックずつ配列に格納するんだけど、そのせいで曲が長すぎると入りきらなくなってしまう。 xが40、yが80なので、余裕を持ってzの最大は30000くらいにしてる。 あとそんなに詰め込んでも今度はマイクラで読み込めなくなってしまうので、上下にいくつか分割してみたいな~って思ってる。 いつかそれでもっと長い曲を演奏してみたい。(The Nuker 3とかUnifyとか)
配布について
流石にこのツールは配布する気はないかな~。 他の機能がくっついてて分離が面倒なのと、あまりにも製作者にしか扱いづらい仕組みになってるっていうのが大きい。 あとは単純にこの規模の演奏動画をあまり知らないから独占できないかな~っていう気持ちも強い。 そもそもマイクラの音ブロック演奏動画で一番規模でかいのってどれくらいなんだろう? 私が今のところ4分台で20万個の音ブロックを使って演奏をしてるけど、それより多いのはあるのかな?(流石に誰かしらヤバい規模のやってそうだけど)