小ネタ 2010-008

Rhythm Zoneで遊ぶ


1. Rhythm Zoneで遊ぶ

 SteamでPC用の音楽ゲーム「Rhythm Zone」というのが発売されていたので、購入した。(2010-07-23)
 
 ゲーム内容は、この画面写真のとおり、GuitarHeroやRockBandのような音楽ゲームである。
 遊んでみた感じはギター演奏でなく、鍵盤(キーボード)のキーの少ないゲームでBeatManiaとかに近いようだ。


 最大の特徴は、このゲームは音楽データをMP3形式などでインポートして譜面データを自動生成してくれることである。

 試しに、
 ・フリー音楽素材 MP3・MIDIを無料で提供 『SAM Free Music』
 というサイトで配布されているDaybreakという曲のMP3ファイルを使って譜面データを自動生成してみた。
 
 あと他にも、http://www.nicovideo.jp/watch/sm11490824とか。

 結構、音源の音をちゃんと認識して音ゲーっぽく配置した譜面が自動生成されている。
 MP3ファイルで自動譜面生成(自動ステージ生成)で遊べるゲームというと、AudioSurfやPSPの昇天ビートなどがあるが、これらに比べてちゃんと普通の音ゲー譜面が生成されているのが良い。


 Vocaloid初音ミクの楽曲を色々試してみた。
 携帯ゲーム機のPSPで、初音ミクProjectDIVAというゲームが出ているが、そのあたりの曲を入れて楽しむと、自分用のカスタムの音ゲーとして楽しめそうな感じ。まずは、既に持っているProjectDIVAの1作目のUMDから曲を吸い出したりしてみたい。



2. Rhythm Zoneでギターコントローラーを接続して遊ぶ

 以前に、ギターヒーローのギター型コントローラーについて調べた。
 PLAYSTATION3版のギターヒーローのコントローラーが、PCに接続すると標準のゲームパッドとして認識されるので良い。
 Rhythm Zoneのオプションメニューで、ボタンのアサインでゲームパッドのボタンを割り当てをすることができる。
 Frets on Fireで遊ぶのもよいのだが、譜面を自分で作るのが難しいというのがネックだった。Rhythm Zoneの譜面自動生成がありがたい。

 「けいおん」というアニメの曲を入れて楽しむと、自分用のカスタムの音ゲーとして楽しめそうな感じ。
 Youtubeの動画で高音質のものを探して、その動画からMP3ファイルに変換して使うとよい。

 できれば、RhythmZoneのmodで、Frets on Fireのmodのようにゲーム画面のカスタマイズをしたいと思った。
 




3. Rhythm Zoneの内部について調べる

 RhythmZoneのmodについて調べてみたのだが、どうやってmodしてスキンとかを変更したらよいのか分からなかった。早々に挫折な感じ。

 ゲームがインストールされている先「C:\Program Files\Steam\steamapps\common\rhythm zone\」のディレクトリの構成は、下記の通り。
 
 rhythmzone.exe, steam_api.dllという2つのファイルと、
 local,tools,rhythmzone_Dataというディレクトリが存在する。

 上記の rhythmzone.exeがゲームの実行ファイル本体。

 各ディレクトリの中身は、

 local\
   fusion.bin

 tools\
   ffmpeg\bin\
     ffmpeg.exe
   fingerprint\
     lastfmfpclient.exe
     libcurl.dll,libfftw3-3.dll,libfftw3f-3.dll,libsamplerate-0.dll,tag.dll
   gamedata\
     Analyze.exe
     VampCli.exe
     vamp-onsetsds.dll,svml_dispmd.dll,ipps***.dll,ippv***.dll,libguide40.dll,libiomp5md.dll,libmmd.dll,libmmdd.dll,libsndfile-1.dll
   oggvorbis\
     vorbis_converter.exe
   tagReader\
     tagReader.exe
   vcredist_x86\
     vcredist_x86.exe

 rhythmzone_Data\
   Assembly - CSharp - first pass.dll
   Assembly - CSharp.dll
   Assembly - UnityScript - first pass.dll
   Assembly - UnityScript.dll
   ICSharpCode.SharpZipLib.dll
   System.***.dll
   level0,level1,level2,level3,level4
   sharedassets0.assets, sharedassets1.assets, sharedassets2.assets .. sharedassets5.assets

   etc\
     mono\***
   lib\
     UnityDomainLoad.exe
     UnityScript.Lang.dll,UnityEngine.dll,Mono.Data.Tds.dll,Mono.Security.dll,System.***.dll
   unuty\
     mono-1-vc.dll
   Plugins\
     ICSharpCode.SharpZipLib.dll,mastercontroller.dll,sqlite3.dll,steamDll.dll,System.***.dll
 
 と、なっている。

 このディレクトリ構成を見ると、いくつかのオープンソースソフトウェアが使用されていることが分かる。
 ・MONO  ・ ・ ・ C#言語で.NET互換を使うためのフレームワーク
 ・Vamp plugins ・ ・ ・ 音源を解析して、中の情報を抽出するソフトウェア(これが自動譜面作成のキモの部分)
 ・OggVorbis ・ ・ ・ 音楽ファイルの圧縮形式Ogg形式のライブラリ
 ・FFmpeg ・ ・ ・ マルチメディアファイルの形式変換ソフト
 ・tagReader ・ ・ ・ MP3タグ情報を調べるソフト
 ・fingerprint ・ ・ ・ 音楽ファイルの固有の特徴(?)を抽出してlast.fmの楽曲fingerprintデータベースを調べるソフト(?)
 ・SQLite3 ・ ・ ・ データベース管理ライブラリ
 等が使用されているようだ。

 (Unity - proprietary 3d game engine)

 MP3ファイルを自分で登録して自動生成された楽譜を取り出して、Frets on Fire等のフリーソフトウェアな音ゲーで使いたいと思った。




4. Rhythm Zoneの楽譜の内部形式について調べる

 参考になりそうな情報を下記のblog記事で見つけた。
 Rhythm Zoneはセール待ちでいいかもね…http://wkm-wakame.blogspot.com/2010/07/rhythm-zone_22.html

 ゲーム本体とは別に、ユーザーデータは、ディレクトリ"C:\Program Files\Steam\userdata\数字列\数字列\local\Data_l\Analysis\"に保存されているそうだ。


 例えば、このページの最初で変換して試したDaybreakの変換結果は、Analysisの直下に次のように保存されている。

 フォルダ名"1014062661129243848684530000"

 10140626611279911268.ogg
 10140626611279911268_FP

 10140626611279911268\
   novice.xml
   easy.xml
   medium.xml
   hard.xml
   insane.xml
   volume.curve
   low.curve
   high.curve

 [ download (4.4MB) ]

 上記のデータのうち、
 .oggファイルは音楽データ本体、
 .xmlは生成された楽譜データ、
 .curveは、音量の調整データ(?)と思われる。

 .wavファイルがエラー時に残ることがあるそうだが、MP3ファイルのtagに日本語で入力してなかったせいか、自分はそういうことがなかった。


 XMLの楽譜データの形式は、
 例えば、上記のnovice.xmlの内容は、次のようになっている。

<song>
<sectionTimes></sectionTimes>
<beats></beats>
<eventTimes>0.475,4.060,7.655,10.392,13.925,16.335,18.400,21.137,23.335,26.905,30.126,34.075,37.252,39.895,42.668,45.265,48.850,53.335,56.915,60.490,63.155,65.860,69.445,72.183,74.825,77.505,80.294,82.890,86.465,90.710,93.150,96.406,98.540,100.795,104.550,107.955,111.535,114.665,116.680,119.643,121.835,124.015,126.841,131.010,134.006,137.505,141.085,144.675,147.355,150.045,153.620,158.090,160.840,163.410,168.054,170.840,173.100,175.165,177.815,180.250,182.333,184.949,188.524,190.780,193.460,197.481,199.500,201.965,204.475,207.403,211.033,213.123,216.315,219.000,221.690,224.410,227.220,229.730,232.440,234.675,237.012,240.640,244.060,247.655,250.950,253.925,256.175</eventTimes>
<eventBins>2,2,1,1,2,1,1,1,4,2,2,2,2,4,8,1,4,2,4,2,1,2,4,2,2,4,4,4,1,4,8,4,1,4,2,4,2,4,4,2,4,1,4,8,4,2,2,8,4,4,4,2,4,8,2,1,9,8,8,2,4,1,1,4,8,1,9,8,1,1,4,4,4,6,8,1,8,1,1,4,8,1,1,2,1,1,8</eventBins>
<eventSustains>0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000</eventSustains>
<eventPowers>0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0</eventPowers>
<trackLoudness>-12.558</trackLoudness>
</song>

 ぱっと見た感じでは、
 ・タグ<eventTimes>が、楽譜内の音符の開始時間。
 ・タグ<eventBins>が、楽譜内の音符がどのレーンにあるのかという情報。
 ・タグ<eventSustains>が、楽譜内の音符の長さ(?)。
 ・タグ<eventPowers>が、楽譜内の音符の強さ(?)。
 だと思われる。




5. Rhythm Zoneの譜面自動生成ソフトを単体動作させる

 Rhythm Zoneの内部で、次のようなコマンドで譜面自動生成ソフトを呼び出している。

 "c:\program files\steam\steamapps\common\rhythm zone\tools\gamedata\Analyze.exe C:\PROGRA~1\steam\userdata\11701306\38900\local\Data_l\Analysis\101406~2\10140626611280655309.wav C:\PROGRA~1\steam\userdata\11701306\38900\local\Data_l\Analysis\101406~2\10140626611280655309\"

 これは、
 簡単に書くと、
 Analyze.exe ○○○.wav △△△\
 となり、Analyze.exeというコマンドの引数が2つで、1つめがwavファイル名、2つめが結果の出力先のディレクトリである。


 このAnalyze.exeの入っているgamedataフォルダだけ、どこか別の場所にコピーしても動作する。

 例えば、d:\にコピーした場合、
 d:\gamedata\Analyze.exeという場所に実行ファイルが置かれる。
 そのとき、d:\mp3\test.wavというwavファイルを解析するには、

 まず、mkdir d:\gamedata\outputというコマンドで出力先ディレクトリを作成し、

 d:\gamedata\Analyze.exe d:\mp3\test.wav d:\gamedata\output\
 というコマンドを入力すればよい。






自動生成した譜面は、BM98stepmaniaの形式に変換するのもよいかもしれない。