miso_soup3 Blog

主に ASP.NET 関連について書いています。

音ゲー「音符池」で休符の矛盾にどう向き合ったか

答え:楽譜の正しさではなく、音ゲーのゲーム性を優先しました。

背景

7月にプロトタイプを作成し、8月に音ゲー「音符池」をリリースしました。前の記事にて、「休符の表現に矛盾があり、なんとなく休符を非表示にしている」と書きました。いくつか譜面を作成した中で、自分の中で「なんとなく」をある程度ルール化できたので書きます。最終的には、楽譜の通りに休符を表示するのではなく、一定のルールに沿って休符を非表示にしました。理由は、全部表示すると目が疲れてゲームを楽しめないからです。

どんな矛盾だったか

音ゲーに楽譜を取り込む」というテーマのもと、楽譜をそのまま表現しようとしましたが、少し変な表現になりました。

タップする音については、音価に基づいて正しい音符を表示することができました。つまり、四分音符は四分音符♩、八分音符は八分音符♪としてイラスト化して表示しました。

楽譜:

f:id:miso_soup3:20180823111648p:plain

その楽譜を音ゲーにするとこうなる:

f:id:miso_soup3:20180823112013p:plain

ただし、見てわかるように、休符はそのまま表示しておらず、八分休符を1つのみ表示している状態です。他の休符は表示していません。

f:id:miso_soup3:20180823112734j:plain

また、この画面を生成するために、表示する休符にはフェルマータを使用しました(↓下の画像)。これは、間違った楽譜の表記方法です。

ゲームの生成元となる楽譜:

f:id:miso_soup3:20180823113405p:plain

フェルマータは、記号が表す時間を延長化する、という意味です。よくある例としてフレーズの最後の音をしばらく伸ばしたいするときに使われます。)

音ゲーに楽譜を取り込む」というテーマなのに、嘘の楽譜を表示していることになります。この理由を「なんとなくそうしたいから」で済ましたくありませんでした。

正しく楽譜を表現するとどうなるか

では、楽譜通りに休符を全部表示するとどうなるか、実際にやってみました。比較動画を用意しました。

休符を全部表示するバージョン:

youtu.be

休符を一部表示するバージョン:

youtu.be

前者の全部表示するバージョンは、画面がとてもうるさく目が疲れてしまい、これは駄目だと思いました。普通の楽譜は、譜面台に配置して動くことはありません。しかしこのゲームではずっと左に動いているため、ゲーム上では楽譜通りに表示するべきではない、と思いました。

休符を表示するルール

そこで、休符は大事なところだけを表示しました。そのルールは次の3つです。

1 全パートで消費されていない時間は、どこかのパートで必ず休符として表示する

f:id:miso_soup3:20180823131845j:plain

2 他のパートの音符が時間を消費していれば、休符を表示しなくてもよい

f:id:miso_soup3:20180823131724j:plain

3 裏拍として表現したいところは休符を表示する

f:id:miso_soup3:20180823132100j:plain

このルールを守りつつ、他はバランスで休符の非表示を決めました。

実はそんな書き方の楽譜が既にある

上記のルールを、いかにも自分が思いついたように書きましたが、実際に楽譜として存在します。

例えば、打楽器ではなく、音階が存在する楽器の五線譜として書けば、先ほどのルールに一致します。

f:id:miso_soup3:20180823132540p:plain

また、バッハなどのポリフォニー(多声音楽のこと、反対語はモノフォニー)音楽の楽譜でも、一致するような表記があります。

f:id:miso_soup3:20180823134109p:plain

Fantasia and Fugue in C minor, BWV 537 (Bach, Johann Sebastian) - IMSLP/Petrucci Music Library: Free Public Domain Sheet Musicより

(↑小説の途中で四声から五声になっており、裏拍のために八分休符の表記があります。ただしそれまでの四声のときは休符は表示されていません。)

楽譜としては、このように五線譜での表記方法が正しいです(ドラム譜もそうかな?)。ゲームでは最大3パートありますが、それぞれをドミソで担当して五線譜として表現すればよかったのでしょう。しかし、音ゲーとして3パートで表示したかったために少し矛盾ができました。

終わり

ということで、休符の非表示については、楽譜を正しく表現することよりも、目が疲れないようにゲーム性を優先しました。しかし、それをルール化することはできました。でもそれって思いついたように言ってるけど、楽譜の世界でもすでに存在してたよね、ということでした。

ただ、残念ながら、ゲーム画面を生成するために、作成時は休符にフェルマータをつけています。MuseScoreに公開するときは除去しています。

ゲーム「楽譜で音ゲー」を Unity で作った話

ゲーム「楽譜で音ゲー」のプロトタイプを、Unity で作成しました。→ 追記:その後リリースしました

曲は、簡単な「かえるの歌」と、難しめな「戦闘曲35(魔王魂より)」の2曲です。UnityRoom にアップしたので実際にプレイできます。

「かえるの歌」

www.youtube.com

「戦闘曲35(魔王魂より)」

www.youtube.com

コード:GitHub - hhyyg/Miso.ScoreOtoge: ScorePond/Prototype

これから詰めた実装する段階なのですが、道のりが険しく挫けそうなので、ここで一区切りとしてブログを書くことにしました。

しくみ

まず楽譜を作成し、そこからノーツ(音ゲーで降ってくる玉のこと)を自動生成しています。

f:id:miso_soup3:20180727160232p:plain

楽譜は MuseScore(ミューズスコア)というソフトで作成し、MusicXML 形式のファイルにエクスポートします。そこからノーツの座標を計算し、Unity 上で描画します。MusicXML とは楽譜表記のための XML 形式のフォーマットです。中には、テンポ情報や、どういう音符がどの小節に配置されているか、どの楽器のどのパートが存在するか、といった情報が格納されています。また同時に MuseScore で作成した楽譜から、MP3 形式の音声ファイルもエクスポートし、Unity 上で音楽を再生します。つまりこのゲームは、楽譜である MusicXML ファイル・音声の MP3 ファイルの 2 つから成り立っています。

音ゲーでいつタップするか、というのはこのように打楽器のパートで楽譜に記載します。

f:id:miso_soup3:20180727160306p:plain

↓これが音ゲー上だとこのように描画されます。

f:id:miso_soup3:20180727160426p:plain

コンセプト:「音ゲー+楽譜」

音ゲーに楽譜を組み合わせたらどうなるのか?」これが気になり作成しました。楽譜を読める自分にとっては、音ゲーをプレイしていて常に感じるのが「これが楽譜だったらクリアも簡単だし、リズムもわかって楽しいのに…」ということです。

「楽譜を組み合わせる」とはどういうことかというと、ノーツ(音ゲーで降ってくる玉)をタップするタイミングを、距離だけではなく、記号(音符)としても表現する、ということです。

f:id:miso_soup3:20180727160710p:plain

例えば、多くの音ゲーのノーツは、以下のように全て同じ丸の図です。

f:id:miso_soup3:20180727161107p:plain

これはデレステの画面のスクショです。ノーツは上から下に流れます。

f:id:miso_soup3:20180727161233p:plain

画像:太鼓の達人 ブルーVer.(ゲームセンター向け) | バンダイナムコエンターテインメント公式サイト これは太鼓の達人の画面です。ノーツは右から左に流れます。

タップのタイミングは、「ノーツとノーツの距離」で音楽を聴きながら予測します。

(ノーツには、他にもフリックする・長押しする という違いがあります。これは「どうアクションするか」という表現で「いつタップするか」という表現ではありませんので、ここでは省きます。音ゲーでは重要な概念ではありますが。)

一方、ノーツを音符で表示した場合は、このようになります。

f:id:miso_soup3:20180727161404p:plain

音ゲーと同じように「ノーツとノーツの距離」でタイミングを表しつつも、ノーツのタイミング(=ノーツ自身がもつ時間の長さ)を「記号(音符)」で表しています。

ビットマップかベクトルの違い

この「距離」と「記号」で表すことは、例えると、画像形式の分類である「ビットマップ」か「ベクトル」の違いに似ています。例えば、「記号」である♩(四分音符)が持つ時間(音価)は、何秒、といったように絶対的な値ではなく、1/4という相対的な値であり、1拍の時間が変わればその四分音符の音価も変わります。対して、音ゲーの「距離」は、見た目では「時間」が測れません。他の距離と比較することにより、時間を推測することができますが、難しいです(音ゲー上では楽しく遊べますが)。

楽譜についての話

なぜ楽譜なのか?というと、先述のように「自分が楽譜を読めるから」にあると思います。例えば、もし私が琴奏者だったら、「琴の楽譜で音ゲーをプレイ」したい、と思っているかもしれません。

今ある音ゲーの譜面も、立派な楽譜であり、現代的な楽譜と言えます。楽譜の再設計についての記事:How I’d Redesign Piano Sheet Music – Alex Couch's portfolio – Mediumに登場する楽譜も、音ゲーに近いものがあります。楽譜にはいろいろな記譜法 - Wikipediaがあり、例えば、琴の楽譜は漢字で縦書き(参照:箏(琴)の楽譜 | 箏-三味線.info)ですし、いわゆる一般的な楽譜は、五線記譜法と言い、西洋音楽に由来します。

今ある音ゲーデレステの譜面は、攻略サイトなどに掲載されており、次のように表されています。

f:id:miso_soup3:20180727161445p:plain

画像:Trancing Pulse -アイマス デレステ攻略まとめwiki【アイドルマスター シンデレラガールズ スターライトステージ】 - Gamerch

縦の線が時間軸になっており、この画像では横線も記されています。ゲーム上ではこの横線は表示されていません。ノーツとノーツの距離を横線で区切ることにより、タイミングを分かりやすくしているのです。

「楽譜で音ゲー」は「デレステのゲーム上でもこの横線を表示したい」と同じ感じです。記号を足すために、西洋音楽の楽譜の書式を使用します。

楽譜が最初から存在するということ

音ゲーの譜面は、第三者が譜面に起こしたり、またはシミュレーションできるソフトが開発されていたり、ゆっくり練習するための動画が公開されていたりします。

そうではなく、初めから公式が楽譜を提供するべき、という思いがあります。MuseScore は、楽譜作成ソフトも出していますが、楽譜共有のプラットフォームでもあります。そういった場所を活用したいと考えています。なので、「楽譜で音ゲー」はしくみ上、初めから MuseScore に楽譜があるし、ゆっくり再生も可能、第三者が楽譜を通してノーツを作成することもできます。

レーンが横である理由

今回作成したものは、ノーツは右から左に流れる太鼓の達人方式で、タップする場所は下の方にあります。五線譜が横書き、ピアノの鍵盤が横向きなので、それを連想しています。右側をタップすると、一番上のレーンが反応します。これなんですが、プレイしにくいという意見がありますorz(3つのレーンで音の高さに違いが無いからとか)

最近 MuseDash という音ゲーを遊びました。これも太鼓の達人方式なのですが、右側をタップすると上ではなく下のレーンが反応します。このレーンとタッチ場所についてですが、自分としてはピアノの鍵盤と五線譜を表現したいのですが、ゲーム性を優先するべきかもしれません。

f:id:miso_soup3:20180727161946p:plain

(MuseDashのスクショ)

休符の矛盾

この「楽譜で音ゲー」には矛盾が存在します。それは、「ゲームに表示する休符と、ゲームに表示しない休符が存在する」ということです。これにより、音ゲーではなく静止画で見た場合に、リズムの再現が難しくなっています。楽譜なのに…。なぜ表示しない休符があるかというと、音ゲーとしてのゲーム性のために、直感的に表示/非表示にしています。まだルールが存在しないのでバラツキがあります。しかも、表示/非表示を楽譜上ではフェルマータを用いて区別しており、本来の使い方とかけ離れた記譜法になっています。(本当はフェルマータではなく休符にアクセントを付与したかったのですが、MuseScoreが対応していませんでした。仕様的には極稀な使い方なので無理ない。)

f:id:miso_soup3:20180727163208p:plain

楽譜が読めなくても遊べるか?

楽譜が読めなくても、単純に音ゲーとして遊べるゲームを目指しています。ゲーム性を保ちつつ、どこまで楽譜を組み込むことができるか実験しています。

また、この仕組みを利用して「このゲームにより楽譜が読めるようになる」ことは期待しつつも、副産物としての扱う予定です。