小ネタ 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\
というコマンドを入力すればよい。