2009年9月21日の日記を表示中

2009年 9月21日 (月)

銀河お嬢様をアレする

先日,PSPの銀河お嬢様伝説コレクションに収録された3つのゲームをPCエンジン実機上で動かすことに挑戦したわけですが,サファイアはBGMの先頭にノイズが入り,ユナはデモは出るけどタイトル画面まで到達しないといった状況で,一応動くけどまだ完全ではないといった状況でした.で,本日はその続きに挑戦.前回気になった点を中心に色々と調査をして対処してみました.以下その際のメモが延々と続きます.結末と手順だけ知りたい人は読み飛ばして次のエントリを参照してくださいw

ユナの3トラック目が無音

まず,at3ファイルが無音なユナの3トラック目について.他の曲から察するに,これ,テーマソングが抜けてるんじゃないかという気が.当初 usrdir/content/sound/bgm/atrac3/48k/yuna_title.at3 にある この歌が流れるんだろうと思って引っ張ってこようとしたんですが,hcdファイルの情報から求まる3トラック目の曲の長さに対して5秒ほど長く,無音部分を切ったところで詰められそうになかったので断念 (´・ω・`).やっぱ違うのかなぁ・・・.エミュレーションの過程でここだけファイルを差し替えるとか,あんまり現実的な感じがしないし・・・.

これはPCエンジン版を手に入れないとわからんかなーと思いつつも一応ニコニコ動画を探してみたらそのものズバリの動画を発見しました.・・・うは,全然違う歌だし (;´Д`).しかもコメント見たらPSPだと無音だったとか書いてあるし (;´Д`).というわけでPSPから吸い出した場合,ここは音楽流れないのが正解なようですね.権利関係?残念な話です.

ユナの1トラック目が長い

次に,ユナがタイトル画面まで到達できない点について.これはデータトラックの開始セクタがずれてるのが悪いんじゃないかと予想.ずれる原因は,at3をデコードしてwavファイルにする際に,hcdファイルから求まるサイズと違うサイズのファイルができてしまうことにあります.なので,単純に無音部分を切ったり,逆に先頭や末尾に0を足したりして,本来期待されるファイルサイズに揃えれば良さそうなものなのですが,ここで1つ問題が.

先頭トラックの「こんにちはー!ユナでーす!」ってやつの長さが,hcdファイルから求まる再生時間よりも1秒ほど長いのです.両端の無音部分を削ってもまだ全然足りないため,ひょっとして2トラック目のプリギャップに食い込んでいる? でもこれだと焼くときに非常に辛そう・・・.うーん.

いやでも何か全体的にhcdファイルから求まるサイズよりも大きめのwavファイルができやすい傾向にあるような・・・.ひょっとしてツール側の設定の問題だったりするのか? そこで試しに HiMDRendererのパラメータを適当に色々いじって試してみたところ,Overlap sizeをいじると再生時間が目に見えて変わることが判明.あれこれ数を試した結果,160くらいにしたらちょうどいい再生時間となりました.気持ち悪いけどまあこれでいいや.

サファイアの音楽の開始部分にノイズが入る

先日,何も考えずにHiMDRendererで抽出したwavファイルをそのままCDに焼いて動かしたところ,ナレーション (15トラック目) の先頭にブツッっという盛大なノイズが乗る問題があったわけですが,これもwavファイルの長さのずれが原因・・・だと思っていたら実は全然違って,HiMDRendererでwavファイルに変換した時点でノイズが乗ってました.確認してみると,これ以外にもwavファイルの時点でノイズが入っているトラックがいくつか・・・.

HiMDRendererのオプションを色々いじってみたり,Sony ATRAC3 Audio Codec 0.98 を消して代わりに SonicStage CP (4.4) を入れて動かしてみたりしたんですが状況は変わらず.HiMDRendererは1.00beta4で最新だしなぁ・・・.うーむ.というわけで,これは観念して手で切ることに.どうせhcdファイルから求まる再生時間よりwavファイルの再生時間の方が長いから前後の無音部分をある程度カットしなきゃならないんでー.GoldWaveで先頭のノイズ部分をカットして完了.はー,エレガントじゃないな.

焼くのに適したツール

CDRWINのデモ版だとさすがに遅いので他にないか探してみたところ,ImgBurnなるツールを発見.試しに天外魔境で実験してみたところ,BINARYまじりのCUEシートを何の文句もいわずに処理してくれて,オリジナルと同じ配置で焼くことに成功.銀河お嬢様伝説コレクションに収録されている3作は,トラックの構成が (PCエンジンの中では) 普通みたいなんで,とりあえずこれでいけそうです (プリギャップ部分のデータが全然違うのがちょっと気になったけど,ゼロ埋めするわけじゃないのかな?)

その他

どっかにトラックの情報とかまとまってないかなーと思って探してみたら,ここにすごいデータベースがありました.素晴らしすぎる.このページによると,ユナは3バージョンあるようで,銀河お嬢様伝説コレクションに収録されているのは10トラック目のISOファイルのCRCから察するに,Galaxy Fraulein Yuna {HRH310827-3FAFT} というやつみたいです.ユナ2はCRCが掲載されていませんでしたが,サファイアはCRCが掲載されており,銀河お嬢様伝説コレクションに収録されていたのと一致してました.データの改変はないようですね.

銀河お嬢様をアレする 完結編

とまあ,先に述べたようにもやしていた部分が概ねすっきりしたので,集大成ということでユナのメディアを作り直してみました.手順はこんな感じ.以下の記述は usrdir/content/cdrom/hcd5078 以下のファイルが対象ですが,他でも多分同じなので適宜読み替えてください.

  1. at3ファイルをHiMDRenderer 1.00beta4を使ってwavファイルに変換する
    • Overlap sizeは160に設定 (それ以外はデフォルトのまま)
    • Sony ATRAC3 Audio Codec 0.98 か SonicStage CP (4.4) を入れておく
  2. wavファイルの先頭にノイズが入っていないかを確認し,入っている場合は波形エディタなどで除去
  3. ここの末尾に添付されている pcebin.zip を展開して,pcebin.c をコンパイルし,出来上がったバイナリでbinファイルを解凍
  4. hcdファイルではトラック毎の情報が列挙されており,4列目が開始セクタで5列目がセクタ数なので,ここから各トラックのプリギャップ時間を求める
    • 多分こんな式 → (開始セクタ - (前のトラックの開始セクタ + 前のトラックのセクタ数)) / 75
    • 直前がオーディオトラックのデータトラックには3秒入り,直前がデータトラックのオーディオトラックには2秒入るのが一般的らしい (少なくともPCエンジンでは)
  5. hcdファイルのセクタ数を元に,オーディオトラックのデータサイズを導出し,それにぴったり合うようにwavファイルを加工する (データトラックは最初からサイズが揃っているので調整不要)
    • 期待されるオーディオトラックのデータサイズはhcdファイルに書かれているセクタ数×2352で導出 (ちなみにデータトラックは2352倍ではなく2048倍)
    • at3ファイルから作ったwavファイルから一旦RIFFヘッダを除去 (以下これを生データと呼ぶ)
    • 生データが期待されるオーディオトラックのサイズよりも小さい場合,生データの先頭か末尾に足りないサイズ分0を加え,期待されるサイズに揃える (どっちに足すかはお好みで / とにかくサイズを揃えることが重要)
    • 生データが期待されるオーディオトラックのサイズよりも大きい場合,生データの先頭や末尾の無音と思しき部分を削り,期待されるサイズに揃える (どっちから削るかもお好みで)
    • すべての生データのサイズが期待されるオーディオトラックのサイズと一致するようになったら,再度生データにRIFFヘッダをつけ直してwavファイルに戻す
  6. CUEシートを記述する
    • すべてのトラックのサイズが期待されるサイズとぴったりあっているはずなので,CUEシートにはプリギャップの情報と各トラックのファイル名を書き記せばOK
    • 以下ユナの例 (ファイル名は適宜自分の環境に合わせる)
      FILE "yuna1_01.wav" WAVE
        TRACK 01 AUDIO
          INDEX 01 00:00:00
      FILE "yuna1_02.iso" BINARY
        TRACK 02 MODE1/2048
          PREGAP 00:03:00
          INDEX 01 00:00:00
      FILE "yuna1_03.wav" WAVE
        TRACK 03 AUDIO
          PREGAP 00:02:00
          INDEX 01 00:00:00
      FILE "yuna1_04.wav" WAVE
        TRACK 04 AUDIO
          INDEX 01 00:00:00
      FILE "yuna1_05.wav" WAVE
        TRACK 05 AUDIO
          INDEX 01 00:00:00
      FILE "yuna1_06.wav" WAVE
        TRACK 06 AUDIO
          INDEX 01 00:00:00
      FILE "yuna1_07.wav" WAVE
        TRACK 07 AUDIO
          INDEX 01 00:00:00
      FILE "yuna1_08.wav" WAVE
        TRACK 08 AUDIO
          INDEX 01 00:00:00
      FILE "yuna1_09.wav" WAVE
        TRACK 09 AUDIO
          INDEX 01 00:00:00
      FILE "yuna1_10.iso" BINARY
        TRACK 10 MODE1/2048
          PREGAP 00:03:00
          INDEX 01 00:00:00
        
  7. ImgBurnなどでCUEシートを読み込んで焼く

以上です.wavファイルと生データの相互変換 (というかヘッダ取ったり付けたりするだけだけど) にはsoxを使いました.生データの切り詰めは head と tail を使い,0の付加は /dev/zero から dd で必要な分だけ末尾に追加するとかやってます.どれも一般的な処理なんで,真似してみようと思う方は適宜手慣れたものをお使いになればよいかと・・・.バイナリエディタだけでもできるし.

で,上記手順で作ったユナのCDを実機にかけてみたところ,前回到達できなかったタイトル画面が見事に表示されました (ただしタイトル画面は無音 (´・ω・`)

銀河お嬢様伝説ユナも実機で動作

もちろんゲームもプレイ可.

千秋お姉ちゃん!

というわけで,PSPの銀河お嬢様伝説コレクションから吸い出したデータを実PCエンジンで動かす話は多分これでおしまい.あんまりコースター作らずに済んでよかったなー.

お疲れ様でした

いやー,しかし今回はプリギャップとかATRAC3とか,普段触れないような話題満載で色々と知見が増えました.特にATRAC3は曲者ですね.ユナの1トラック目の長さにどんだけ悩んだことか・・・.AT3 Converter なるツールを使うとPSP上でat3をwavに変換できるようなので,こっちの方がちゃんとしたファイルを作れるのかも.PSP持ってないので試せませんが・・・いい加減買うべきか? 次また何か出たら考えよう.

それから,プリギャップやPCエンジンのCDの構造などに関してはこちらこちらが非常に参考になりました.こうしてまとまった情報があるのは本当に有り難いことですね.読んでるうちにセーラームーンがすげー欲しくなってきたw

さて,サファイアで遊ぶかー.

銀河婦警伝説サファイア

前回は起動確認だけだったので,ちゃんと遊ぶのは今回が初だったり.ノイズをカットして,念のためオーディオトラックのサイズをきちんと揃えたメディアを作り直してみたので非常にいい感じです.

・・・うーむ,超初見殺しだなこのゲームw.知らないと即死ポイント多すぎるw.2回目からはかなりマシになりましたが,先に進むのが怖くなりますねw.あと画面が狭いのも結構辛い.もう少し自機を小さくするとかすればよかったのかな?

一方,前にも書きましたが,音楽は超いいですね.知ってる中だと怒首領蜂に近いかな.あと演出もかなりかっこいい.これだけでも価値アリかと.アマゾンで2,600円くらいで新品買えるので,1bitの狂いもない本物でなければいやだというのでなければ買ってみるのもよいのではないかとー.吸い出して実機で動かせば2人同時プレーもできるしw

あ,ゲーム中の画面撮ってなかった.代わりにちょっと時代を感じるデモ画面とか置いときますねw.普通のアニメーションだと何も感じないのに,こういドットドットしてるやつだと異常に盛り上がるのはなぜなんだろうなー.

サファイアデモ画面

パイロット4人.シャルロットが一番使いやすいかも.チャージショットを使うとまた違うのかもしれませんが (チャージショットの存在に気づかず遊んでたw).ジャスミンは多分ツンデレ.

サファイア

シャルロット

ヘレナ

ジャスミン

なんでここで喋らないのか不思議だ.勿体ないぜ,マジで.

ステージ間のデモ

[コメントを書く]

solino 2009/09/26(土) 15:40:31
発売日に買ったマスターを所持していますが、
面データを読み込んでいるからです。>声なし。
nosuke 2009/09/27(日) 03:20:19
うおー,発売日に買われたのですか!すげー!
自分,毎週欠かさずファミ通読んでたのに存在にすら気づかず
知ったのはずっと後になってのことでした(笑)
> 面データを読み込んでいるからです。>声なし。
おおーなるほど.そういえばよく使われたテクニックなような気も.

ダライアスプラス

PCエンジン出したついでにこの前買ったダライアスプラスを動かしてみました.

なに!ダライアスαプレゼントだと!? どんくらい出回ったんですかねこれw

ダライアスαプレゼント

普通に起動した.

ダライアスプラス

スーグラだと背景が多重スクロールするのがすごいということなのか? ・・・ぬ,スーグラのAV端子の接触が悪くなっているな.要メンテかな・・・.

[コメントを書く]

solino 2009/09/26(土) 15:42:46
確か、ちらつかない程度だったと思います。
CD版を懐かしのボディソニックでやると結構きます。
nosuke 2009/09/27(日) 03:23:56
バーチャルクッションというやつですかー.
PCエンジンはほんと奥が深いw
solino 2009/09/28(月) 12:21:16
いえ、避暑地の椅子のような本当のボディソニックチェアですw
ここで書いちゃいますけど、私は電子系、半田系スキルがあまりないのでご自分で色々出来る方は羨ましいですね、色々な記事楽しませてもらっております。
nosuke 2009/09/30(水) 02:47:03
なるほどー,椅子に音響装置が組み込まれているタイプですね.
どんくらいだろうと思って値段見てビビりましたw
> 色々な記事楽しませてもらっております。
恐縮です.ありがとうございます.
楽しくても辛くても,何らかのネタになればいいかなーと思って
色々やって書いていますw
電子工作関係は昔からずっと人の後を追いかけて真似してばかりなので,
実は基礎的なスキルがあまりないんですよね (´・ω・`)
この辺も勉強せねばなーと常々思っているのですが,なかなか・・・

T60 HDD交換

上記作業の途中でwavファイルとかいじりまくってたらついにHDDの/home が 100% に達してしまいましたw.というわけで,いい機会なので昨日買ってきた500GのHDDに交換することに.・・・って容量がわからないだと!? fdisk でつないでみたところ,容量が不明なのでシリンダ数を入力しろとか言われます.うー,何入れればいいんだろう.トラック・シリンダ・セクタの関係が未だによくわかってないんだよなー.実態と違ったりするんだっけこれ?なおさらわからん・・・.

ひょっとして fdisk が古いのがいけないのかと思い,util-linux を 2.12r から ng-2.16.1 に上げてみたところ,今度は2Tのディスクとして見えるようになってしまいました.アホかw

これ以上はまるのも嫌だったので,諦めてWindows側にサクッとつなぎ,パーティションテーブルを作成.これを再度Linux側に持ってきたら今度は正しい容量で見えるようになり,無事領域のフォーマットに成功しました.ふー.こういうときにHDD-USB変換アダプタは超便利ですな.持っててよかった.

あとはGenoto Liveで起動して rsync して,最後にもう1回古い方で起動して新しい方に grub を書き込んで終わり.T60内蔵のものを交換したところ,無事起動してくれました.しばらくはこれで安泰だ.よしよし.

2009年9月21日の日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2009年9月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ