ゲームギア音源おぼえ書きその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
/*ズレる*/
これ単体でコンパイル→再生してもテンポはおかしくなりません。
他のチャンネルとの兼ね合いとかそういうヤツでしょうか。あとでちゃんと検証したいと思います…。
今回はとりあえずこんな感じ!
僕らのラブライブ!8告知
いつも告知に使ってるケロログ、たまにログインできなくなるので激おこです。
ラブライブ!のゲームギア音源カバー第三弾!
2015年5月17日(日) 僕らのラブライブ!8
ライ17「Magic Troffle」にて頒布
-----------------
TITLE
ギアライブ!3
頒布価格:500円
トラックリスト
1.それは僕たちの奇跡
2.No brand girls
3.SENTIMENTAL StepS
4.Oh, Love&Peace!
5.どんなときもずっと
COVER:ねすち [ TwitterID : NESS1943 ]
DESIGNER:みつぷ [ TwitterID : mitpu ]
JASRAC許諾番号:R-1540874
試聴↓
-----------------
よろしくお願いいたします。
ゲームギア音源おぼえ書き
ケロログの方(http://www.voiceblog.jp/ness1943/)を使っているのですが、長文を書くのには向いてないので、はてなブログつくりました。
最近ゲームギア音源を用いたアレンジ曲を作って同人誌即売会で頒布しています。機会があったのでどう作ってるのかおぼえ書き程度に記述することになりました。自分がド忘れしてもこれを読めばきっと大丈夫。
「自分はこうしてます」という内容で記述していきます。『こういう作り方もあるよ!』とか『こういうソフトウェアもあるよ!』とかありましたら教えていただけると嬉しいです。
準備→手順→その他情報って順で書いてます。 いちど全体を読んだ方が良いでしょう(構成下手(あとで直したい))
あと、WindowsXP~Windows7辺りを使ってることが前提です。macやLinuxだとどうするんだろう…。
用意するもの
・ゲームギア本体
さいきん中古ショップでもあまり見かけないですね…。
・Everdrive GG
http://shop.retrogate.com/Everdrive-GG-EDGG.htm ←更新停止されてたようだ
http://shop.krikzz.com/main.sc ←今はこっちで販売されてる
上記サイトにて77ドルで購入できます。「Out-of-Stock」となっているときは品切れですが、たまに入荷しているので一日一回チェックしてみると良いでしょう。
・microSDカード
Everdrive GGは、ROMデータを入れたmicroSDカードを挿し込んで使います。1枚用意しておきましょう。
・ゲームギアのカートリッジ
Everdrive GGは基板だけで届くので、ガワが必要です。ガワが無いと本体に挿すことができません。安いソフトを一本購入しておくと良いでしょう。
・DTC-20(特殊な形のドライバー)
http://www.amazon.co.jp/dp/B001YH89IS/ref=cm_sw_r_tw_dp_lMqfvb1RHBX6A
ゲームギアのカートリッジを分解するためのドライバーです。
制作環境
MMLを記述し、コンパイルして.vgmファイルに変換する作り方でやっています。この辺りはmck wikiを読んだ方が大変詳しく書いてあります。
自分の環境を記述します。
http://wikiwiki.jp/mck/?%C0%A9%BA%EE%B4%C4%B6%AD%A4%CE%BD%E0%C8%F7#m5e6e125
・XPMCK
http://jiggawatt.org/muzak/xpmck/
記述したMMLを、.vgm形式のファイルへコンパイルします。.vgmはVideoGameMusicの略だそうです。10種類ぐらいのゲーム機に対応してるけどちょっと怪しいコンパイラだよね、という話を聞きましたが真実は分かりません。
ゲームギア向けにコンパイルできるのは現在コレしか知りません…ほかにもあったら教えていただけると嬉しいです。
・KbMedia Player
http://hwm5.gyao.ne.jp/kobarin/
色んな形式のファイルをPC上で再生することができるプレイヤーです。制作中はこのプレイヤーで鳴らして音を確認しています。環境設定についてはmck wikiを参照…。
もしかしたらin_vgm.dllというプラグインを入れる必要があるかもしれません(もう設定したときの記憶があいまい)。その場合は下記ページから入手できます。
http://www.smspower.org/Music/InVgm
・SMS VGM Player
http://www.smspower.org/Music/SMSVGMPlayer
楽譜データのような存在である.vgmファイルにプレイヤーをくっつけて、ゲームギア上で動作する.smsファイルにするツールです。
MMLを書きます
MMLについては、mck wikiおよびそこから辿れるページを参照!
ppmckおよびmck向けにMMLを書いている方は、そのままの書き方で大丈夫かと思います。が、xpmckでは新コマンドが追加されています。下記マニュアルを読むと、xpmck用のコマンドと、機種ごとにどのコマンドが使えるか知ることができます。
http://jiggawatt.org/muzak/xpmck/manual.html
コンパイルします
コマンドラインで下記の文を実行します。出力するvgmファイル名はお好みで。
xpmc.exe -sgg sample.mml sample.vgm
-sggは「ゲームギア用にコンパイルしますよ」ってオプションです。詳細はマニュアル参照。生成したvgmファイルを前述のプレイヤーにてPC上で再生して、鳴ってくれるか確認しましょう。
エラーおよびワーニングがある場合は教えてくれるので、MMLを直してあげましょう。だいたいは「その音域(低すぎるor高すぎる)は正しく再生できないよ」か「譜面の長さが違うチャンネルがあるよ」だと思います。
コンパイルするときの実行文の末尾に「]」(半角閉じ括弧)を入れると、譜面の長さがチャンネルごとに表示されるのですが、本来のコンパイルオプションはどう書くのだろう。
smsファイルにします
SMS VGM Playerを用いて、.vgmファイルを.smsファイルにします。同ソフト内のreadme.txtをあらかじめ読んでおきましょう。コマンドライン上における実行文は下記のとおりで、出力するsmsファイル名はお好みでどうぞ。
copy /b vgmplayer.stub+sample.vgm sample.sms
ゲームギア本体で再生します
生成したsmsファイルをmicroSDカードにコピーします。ファイルの設置場所は直下で大丈夫です。そしてEverdrive GGにmicroSDカードを挿し、ゲームギア本体でsmsファイルを起動するとVGM Playerが立ち上がって再生できます。
一連の流れはこんな感じです。
あとは気にしてるコトと、参考にしてるページ。
ゲームギア音源についてザックリと
参考ページ
DCSGのノイズについて - Simple Inspiration
ゲームギアの音源チップであるSN76489は、矩形波3音+ノイズで演奏できる。デューティー比は50%のみだけど、ノイズをうまく使うと6.25%の矩形波を出せる。
Implementation specific notes SEGA Game Gear Volume range is 0..15. The lowest playable note is A in octave 2. Channels A, B, C are tone channels that output square waves. Channel D is used for noise. @0 selects white noise and @1 selects periodic noise. Limited panning is supported (negative values means full left, zero means center, positive values means full right). EP and MP can be used together, but they will interfere with eachother. For the noise channel the octave setting is irrelevant. The noise generator has four different clock settings that is determined by the current note MOD 4. Below is a list of what each note corresponds to: c, e, g+: High pitch c+, f, a: Medium pitch d, f+, a+: Low pitch d+, g, b: Pitch determined by channel C. By selecting periodic noise generation with pitch determined by channel C it is possible to use the noise channel as a kind of extra tone channel.
XPMCKのマニュアルより引用。以下自分の解釈。
・一番低く出せる音は、o2のa。
・Dチャンネルの音色を@0に指定するとホワイトノイズ、@1に指定するとPeriodic Noise(6.25%矩形波)が出る。
・Panは左100%、中央、右100%の三択。だと思う。
・ノイズの音程について。カテゴリ内(例:c,e,g+)で高さの違いは無いので、お好みで記述して良い…はず…。自分はc,c+,dで記述してる。
c,e,g+:高い。シンバル・ハイハット・スネアで使ってる。
c+,f,a:中ぐらい。たまにタムっぽく使うぐらい。
d,f+,a+:低い。バスドラムに使ってる。
d+,g,b:Cチャンネルにて指定している音程。
d+,g,bをちゃんと使えると表現の幅むっちゃ広がると思うけど、まだ全然つかえてない。
Dチャンネルの音色を@1に指定し、高さはd+で発音タイミング&長さを記述し、本当に鳴らしたい音程をCチャンネルへ書くことで、6.25%矩形波の音程をコントロールできる。っぽい。
個人的な気持ち。
・複数チャンネルで同じ高さの音を鳴らすと、当然ながら変な音がする。
・o7ぐらいの高い音も出せるけど、高い音はちょっと音痴になる気がする。
・タイを表現するとき「^」か「&」で記述するが、^で書いてると譜面の長さカウントがおかしくてコンパイル時にワーニングとなる場合がある。なるべく&で記述するようにしてる。
・KbMedia Playerだと、6.25%矩形波が鳴らないかもしれない。
・vgmファイルのときにPC上で再生すると鳴ってくれるのに、いざsmsにしてゲームギア実機で起動するとVGM Playerが動いてくれない場合がある。どんな記述をすると動いてくれないのか、まだ不明。
その他の参考ページ
ぽんRev!! 個人的備忘録: Everdrive GG 届いた~
Everdrive GGを購入した人のブログ記事。どんな感じなのか見せてくれています…ありがたや。microSDを頻繁に抜き挿しするならケースの加工をしましょう、と記述してあります。自分は以下のように加工しました。
microSDの抜き挿し部分を、カッターナイフとはさみで豪快に切除しています。もっと安全な方法があったかもしれません。あと、内側の一番上にある出っ張り(伝われ)がmicroSDの抜き挿しの際オジャマになるので削りました。
実機演奏をしている方のブログ記事。SMS VGM Playerの存在はこのページで知りました。
おわり
とりあえず知ってることは大体書いた…と思います。更に思い出したことがあったり、新しく知る事があった場合は追記していくつもりです。「ここ間違ってるよ」とか、ここに記述されてない情報があったら教えてくれるととっても嬉しいです。
2015/4/14 修正
EverDrive GGを販売してるサイトは移転してたようなので、リンクを修正。