ゲームギア音源おぼえ書きその2
5/17(日)の「僕らのラブライブ!8」おつかれさまでした(だいぶ時間経ってる)。
コミケ以外のイベントでサークル参加するのは初めてでしたが、楽しかったです。
また行きたいです。
ゲームギアで曲作る時のアレコレについて、制作中に壁へブチ当たったり、ツイッターで教えてもらったりしました。ありがたいです。
というわけで思い出せる限り書きます。
再生できないsmsファイルを再生できるようにする
最初のゲームギア音源おぼえ書き(http://ness1943.hatenablog.com/entry/2015/03/27/200441)で、生成したSMSファイルが再生できないことがあるって書きました。
そしたらツイッター上でこれにまつわる会話がなされ、RTにて流れてきました。
@YS_fragile 再生出来ない場合は、smsファイルの$7fff($4c)の所 を$7fに書き換えたうえで、ファイルを0で埋めて128kバイトにすると再生できる場合があるようです。
— osoumen (@osoumen) 2015, 5月 2
ありがとうございます(ありがとうございます)。
さっそく、バイナリエディタを用いてsmsファイルを書き換えましょう。
WindowsXPなのは気にしないで欲しいです(オフラインでしか使わない)。
1.$7fffを「$7f」に書き換えて…
2.128キロバイト(131072バイト)までゼロ埋めします。
見事、これで鳴ってくれました! 今まで鳴らなかったsmsファイルも救われることでしょう。助かりました。
smsファイルが128キロバイトを超えている場合は?
高速アルペジオを多用していたり、楽曲が長い場合にはsmsファイルが128キロバイトを超えていることがあります。しかも鳴らなかった場合、どうすればいいのか?
実際困ってて、僕ラブのサークルスペースでバイナリいじってたら売り子さんから
「7fって127だよね。ファイルサイズの指定か何かかな」
というお言葉をいただきました。
それじゃん!?って具合で、思いつきにより$7fffの値を「ff(255)」に書き換えて256キロバイトになるまでゼロ埋めしてみました。
1.ffに書き換え
2.256キロバイト(262144バイト)までゼロ埋めする。
見事、鳴ってくれました!ありがたや。256キロバイトを超えた場合はどうするのかな、という疑問はまだありますけどとりあえずOKです。そこまで容量がかさむことは無いと思いますし…。
と思ったんだけど全然違った。
下記ページに、ROMサイズについて書いてありました。というかリージョンコードについても書いてありました。
ROM Header - Development - SMS Power!
Region code (0x7fff, 0.5 bytes)
The high 4 bits of the 16th byte of the header give the region and system for which the cartridge is intended:
Value System/region $3 SMS Japan $4 SMS Export $5 GG Japan $6 GG Export $7 GG International Only the export SMS BIOS actually checks this.
ROM size (0x7fff, 0.5 bytes)
The final 4 bits give the ROM size, which may be used by the BIOS to determine the range over which to perform the checksum. Values are:
Value Rom size Comment $a 8KB Unused $b 16KB Unused $c 32KB $d 48KB Unused, buggy $e 64KB Rarely used $f 128KB $0 256KB $1 512KB Rarely used $2 1MB Unused, buggy
ほんとは256キロバイトまでなら後ろを0にすれば良く、512キロバイトまでなら1にすればいいみたいです。それより大きくなることは避けた方が良さそう(バグがあるっぽい)。
$ffにしたときは何で鳴ってくれたんでしょーかね。
ゲームギア実機で鳴らすとパンが効かない(モノラルになる)
これはまだ実問題として遭遇してないのですが、osoumenさん曰く
自分も以前ハマりました。GGの仕様なのか、everdriveの仕様なのか、regioncodeがsmsになっているとsmsモードで起動するのでステレオが有効にならないみたい。 http://t.co/4oIexISw1i
— osoumen (@osoumen) 2015, 5月 2
xpmckで作ったggが実機でステレオで鳴らない原因が解った。これだ。 http://t.co/57kcunYpUB
— osoumen (@osoumen) 2014, 1月 22
smsとして実行されていたっぽい。$7cとかに書き換えればいいみたい。
— osoumen (@osoumen) 2014, 1月 22
適したリージョンコードを設定してあげれば良いとのことです。
と、思ったんですが、.ggファイルで生成する場合はvgmplayer本体をいじる必要があるらしく…
@NESS1943 @YS_fragile どうもすみません。バイナリ版のvgmplayerはgg用のパンが無効化されていて、あの方法だけでは駄目だったようです。無効化を外してビルドしました。これで大丈夫かと思います。 https://t.co/G0uJCmeCcg
— osoumen (@osoumen) 2015, 5月 5
とのことでした(ありがとうございます)。何をどう直してビルドしなおしたかは自分で調べようかなって………それでも分からなかったら聞いちゃうかも。なおソース読んでもちんぷんかんぷんだった模様。
vgmplayerのバイナリおよびソースは下記からダウンロードできます。
VGM Player - SMS Software - Maxim’s World of Stuff
連符表現内でオクターブ変更できない(未解決)
たぶんXPMCKの問題。たとえば下記のように連符表現内でオクターブ変更しても、
{ab>cdefgab>cdefgab}4
実際には下記のように鳴ってしまいます。
{abcdefgabcdefgab}4
o4、o5記述でオクターブ変更しても同様。というか連符内だとコマンド類が使えない?
解決策か代替案を考えたいところです。
@qコマンドをはちゃめちゃ使うとテンポがおかしくなる
Dチャンネルでボコボコ@qコマンド使ってたら、再生中にDチャンネルだけテンポがおかしくなりました。
テンポいじってないのにドラムパートが勝手に遅くなる事案 pic.twitter.com/9JtMpMHScs
— ねすち@イカID→ness1943 (@NESS1943) 2015, 5月 13
そのときのDチャンネル部分だけ別で保存してたのですが
D t135
D l8 v13
/*よつうち2拍*/$4{@q8v13dv10@q1cv13@q8dv10@q1c@q4v13}
/*Love&Peace 144行目*/
D dr4ddr4d@q4 [$4()@q8v13dv10@q1cv13@q8cv10@q1cv13@q4]8
/*ズレる*/
これ単体でコンパイル→再生してもテンポはおかしくなりません。
他のチャンネルとの兼ね合いとかそういうヤツでしょうか。あとでちゃんと検証したいと思います…。
今回はとりあえずこんな感じ!