マジックトリョフ

ねすちの個人サークル「Magic Troffle」の告知やら何やらです。

ゲームギア音源おぼえ書きその2

5/17(日)の「僕らのラブライブ!8」おつかれさまでした(だいぶ時間経ってる)。

コミケ以外のイベントでサークル参加するのは初めてでしたが、楽しかったです。

また行きたいです。

 

ゲームギアで曲作る時のアレコレについて、制作中に壁へブチ当たったり、ツイッターで教えてもらったりしました。ありがたいです。

というわけで思い出せる限り書きます。

 

再生できないsmsファイルを再生できるようにする

最初のゲームギア音源おぼえ書き(http://ness1943.hatenablog.com/entry/2015/03/27/200441)で、生成したSMSファイルが再生できないことがあるって書きました。

そしたらツイッター上でこれにまつわる会話がなされ、RTにて流れてきました。

 

 

ありがとうございます(ありがとうございます)。

さっそく、バイナリエディタを用いてsmsファイルを書き換えましょう。

WindowsXPなのは気にしないで欲しいです(オフラインでしか使わない)。

 

f:id:NESS1943:20150608224120j:plain

1.$7fffを「$7f」に書き換えて…

 

f:id:NESS1943:20150608224127j:plain

2.128キロバイト(131072バイト)までゼロ埋めします。

 

見事、これで鳴ってくれました! 今まで鳴らなかったsmsファイルも救われることでしょう。助かりました。

 

smsファイルが128キロバイトを超えている場合は?

 高速アルペジオを多用していたり、楽曲が長い場合にはsmsファイルが128キロバイトを超えていることがあります。しかも鳴らなかった場合、どうすればいいのか?

実際困ってて、僕ラブのサークルスペースでバイナリいじってたら売り子さんから

「7fって127だよね。ファイルサイズの指定か何かかな」

というお言葉をいただきました。

 それじゃん!?って具合で、思いつきにより$7fffの値を「ff(255)」に書き換えて256キロバイトになるまでゼロ埋めしてみました。

 

f:id:NESS1943:20150608224131j:plain

1.ffに書き換え

 

f:id:NESS1943:20150608224135j:plain

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:

 
ValueSystem/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:

 
ValueRom sizeComment
$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ファイルで生成する場合はvgmplayer本体をいじる必要があるらしく…

とのことでした(ありがとうございます)。何をどう直してビルドしなおしたかは自分で調べようかなって………それでも分からなかったら聞いちゃうかも。なおソース読んでもちんぷんかんぷんだった模様。

vgmplayerのバイナリおよびソースは下記からダウンロードできます。

VGM Player - SMS Software - Maxim’s World of Stuff

 

 

連符表現内でオクターブ変更できない(未解決)

たぶんXPMCKの問題。たとえば下記のように連符表現内でオクターブ変更しても、

 {ab>cdefgab>cdefgab}4

実際には下記のように鳴ってしまいます。

 {abcdefgabcdefgab}4

o4、o5記述でオクターブ変更しても同様。というか連符内だとコマンド類が使えない?

解決策か代替案を考えたいところです。

 

 @qコマンドをはちゃめちゃ使うとテンポがおかしくなる

Dチャンネルでボコボコ@qコマンド使ってたら、再生中にDチャンネルだけテンポがおかしくなりました。

 そのときの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
/*ズレる*/

 これ単体でコンパイル→再生してもテンポはおかしくなりません。

他のチャンネルとの兼ね合いとかそういうヤツでしょうか。あとでちゃんと検証したいと思います…。

 

 

今回はとりあえずこんな感じ!