LEVELも編集できる新バージョンができました!
Lunar Magic/音楽の追加
このページについて
OWやLEVELに新しい音楽を追加するツールの使い方を紹介します。
が、勝手に書いているので、おかしいところは修正して行ってください。
事前準備
まず、こちらからツールをダウンロードしてください。(右クリで保存)

ちなみに、C:¥SMW¥というフォルダを作って入れて置くと、その後トラブルがおきにくいです。
もし、お使いのコンピューターにjavaが入っていない場合、
こちらからダウンロードし、インストールしてください。
ダウンロード
自分のPCでjavaが使えるかどうかの見分け方
test.batというテキストファイルを作り、その中に
@echo off addmusic > log.txt exit
と書いて、ツールと同じフォルダに置き、実行して、生成されたlog.txtに
[ヘルプ] ここに ヘルプが 表示される 予定です
と書かれていれば、そのPCではこのツールがそのまま使えます。
NoClassDefFoundErrorなどと出る場合、環境変数CLASSPATHに.を付け足すと吉です。
どうしても起動しない場合は、環境変数CLASSPATHの値を全部消し、「.」のみにする。
[例] @echo off set CLASSPATH=. addmusic > log.txt exit
初めてROMに音楽を入れる場合
前バージョンの場合は
ROMの名前を、SMW.smcに変え(1MBに拡張した物。しかし、ルナマジで1度以上弄った物は使えない。Expandを使う。)を使用してください。
また、初期化.batというテキストファイルを作り、それに
@echo off addmusic SMW.smc INIT pause exit
と書いて、実行してください。
注意!
同じROMに、2度同じことをすると、ROMが完全に破壊されます!
2度実行しないように注意してください!
音楽を入れる
2. 音楽を入れる
プログラムのあるフォルダと同じ場所に 11.txt 〜 18.txt(LEVELに挿入する場合は20.txt〜39.txt) を用意しましょう。 この 11 〜 39 の数値が Lunar Magic の音楽の設定におけるBGM番号となります。 これらのテキストファイルはしかるべき文法で書かれた楽譜データで、 このデータをSMW的なバイナリ形式に変換してファイルにぶちこむわけです。 コマンドプロンプトを呼び出し、「addmusic (ファイル名)」を打って実行して 不可解な文字列が大量に出てきて最後に「成功」とかそういうのが出たら成功 です。「失敗」とかそういうのが出たら何らかのエラーが出ています。 こちらのコマンドは何回行っても大丈夫です。
が、容量の超過には注意しましょう。予防措置がありませんのでね。
容量オーバーするとファイルが破壊されちゃいます(笑)。
入れることのできる音楽データの最大値は、
「変換後のデータの合計が 9600 バイトくらい」です。
はい、これそのままです。
よくわからない人は、
入力.batというテキストファイルを作り、それに
@echo off addmusic SMW.smc >log.txt
と書き、ツールと同じ場所において実行してください。
その後、log.txtを開いて、
11.txt のサイズ: 2008 track0: d7 bytes track1: f8 bytes track2: 8a bytes track3: 2f bytes track4: 2f bytes track5: 33 bytes track8: d bytes 合計 793 バイト 12.txt のサイズ: 1342 track0: c1 bytes track1: 77 bytes track2: dc bytes track8: 55 bytes 合計 654 バイト 13.txt のサイズ: 3478 track0: 1ad bytes track1: a1 bytes track2: 19a bytes track3: 17c bytes track4: 13b bytes track5: 46 bytes track8: ab bytes 合計 1970 バイト 14.txt のサイズ: 1305 track0: a5 bytes track1: 105 bytes track2: c2 bytes track8: d8 bytes 合計 889 バイト 15.txt のサイズ: 2417 track0: 103 bytes track1: 8e bytes track2: 8d bytes track3: d4 bytes track4: d4 bytes track8: 4e bytes 合計 1095 バイト 16.txt のサイズ: 816 track0: 55 bytes track1: 52 bytes track2: 51 bytes track3: 29 bytes track8: 28 bytes 合計 365 バイト 17.txt のサイズ: 1080 track0: 9f bytes track1: 72 bytes track2: 84 bytes track8: 29 bytes 合計 483 バイト 18.txt のサイズ: 1301 track0: 9d bytes track1: 98 bytes track2: 7c bytes track3: 24 bytes track4: 39 bytes track8: 3b bytes 合計 620 バイト ファイルへの書きこみに成功しました
と書かれていればOKです
README補完
音色
番号 | 音程 | コメント |
0 | +12 | ローパス気味の方形波(スクエアリード)。Hollow |
1 | 0 | ローパス気味のノコギリ波。木管楽器、ストリングスなど |
2 | +29? (+5) | 鉄琴、オルゴール系。音程がずれる |
3 | +12 (0) | 木琴 |
4 | 0 | パルスのようなノコギリ波?(Claviや1/4矩形波を連想)。癖の強い音。金管楽器、弦楽器など |
5 | 0 | ピチカートストリングス? |
6 | 0 | 6/16矩形波のような音。木管楽器、弦楽器など |
7 | 0 | スチールドラム |
8 | 0 | フラットレスベースのような音 |
9 | -5 | ホンキートンクピアノ。減退音 |
10 | +18 (+6) | 打楽器 |
11 | 0 | @1の音色のアタックを強めた音 |
12 | -5? | でっていうパーカッション |
13 | 0 | エレピ(電気ピアノ)。ゲームオーバーの音 |
14 | 0 | スラップベース。他の使い方もあるかも |
15 | +8 | オーケストラヒット |
16 | 0 | @13を減退音にした音 |
17 | 0 | ディストーションギター。5度の倍音が強い |
18 | 0 | @1に若干アタックの癖をつけたもの |

音色はわりと単純な波形音に近いものが多いです。こういった音色は、ビブラートや音の立ち上がり、奏法などに気を使うことで、いろいろな役割を持たせられます。
音符
ソ ,ラ ,シ ,ド ,レ ,ミ ,ファ はそれぞれ
c+,d+,e+,f+,g+,a+,b
…多分
修正されてcがドになるようになりました。ただし、仕様として一部の楽器は音がいくらかずれています。
注意集
- くれぐれもINIT二重がけ・txtファイルのサイズ超過に注意。
-
曲は#0#1#2...のうち、もっとも短いやつが終わった時に全体がループする。
あらかじめチャンネルをたくさん用意しておくと、#0から書き始めた時に試しにかけると鳴らないってことが起こる。 -
新型スクロール土管をEasyPipeで導入したROMに音楽を追加すると
ROMが物故割れるようです。どうしても併用したいならPipesで導入してください。
Mummlを使う

AddMusic用のMumml設定ファイルです。詳細は付属ドキュメントをご覧ください。
サイズ軽量化Tips
-
同じ長さの音符が連続するとき、音長表現は最初の音符にのみ付属
- c4d8e4f8と書くよりもc8^8d8e8^8f8と書いた方が短い
- ただしqの値が変更されるときは、音符は必ず音長を伴う
-
音長が127を超えたとき、余った長さは自動的に2分音符のタイで表現される(AddMusic仕様)
- [r1]8 = [r2^2]8よりも[r2]16の方が音符が少なくなるのでサイズが縮む
- 自前で2分音符を並べた方が全音符を書くよりサイズが縮む(修正可、後述)
-
テンポを半分にすると、音符の長さ表現も半分で済む
- ただしテンポを下げると、音を滑らかにつなぐことがやや困難になる
-
長さの異なる音符が絡むセルフディレイでは、vの方がqよりサイズが大きくなる
- vとqのディレイでは方法によって鳴りが異なるので、適宜取捨選択が必要
-
エコーの使い方次第でディレイとサイズ軽減の両方を選べる場合もある
- テンポアップ時でも同様にエコーがかかることに留意すべき
- それ以前に、重要でないディレイは思い切って削ってしまう方が得策
-
ループには多少の容量が必要、MMLの縮小がデータの縮小につながるとは限らない
- 譜面とログをよく見て、サイズの縮むループの書き方を模索すべき
- クオンタイズの短い音符を有効活用する(例: q7F c8r8d8r8e8r8 → q3F c4d4e4)
全音符の連続を軽量化する修正
現在のAddMusicでは仕様上、c1c1と書くよりc2^2c2^2と書く方が軽くなってしまいます。 以下、これらを同等にするための修正方法を示します。ソースコード「Henkan.java」中の
//音長が長すぎるとき input(0x60);
これを次のようにします。
//音長が長すぎるとき if(last_long != 0x60 || update_q[tr]) input(0x60);
当然、修正内容を反映するにはjavacによるコンパイルが必要です。
これは非公式的な修正であり、もしかしたら不具合があるかもしれません(たぶん大丈夫だと思いますが)。
levelに音楽を入れたい
ツールが更新されて、ツールで挿入できるようになりました! Lunar Magic/音楽の追加
以下過去の情報
もったいない情報だったのでスレからコピペ
簡易説明か… ?まずバイナリエディタ・LunarAddress・電卓へのショートカットをかためて置いておく ?空っぽのROMにいつもの方法でOW音楽を挿入 ?そのROMをプレイしOW画面でSPCを吐かせる(SPCA) ?Levelに挿入したい方のROMの方をプレイし、Level画面でSPCを吐かせる(SPCB) ?メモ用のテキストファイルを用意する ?バイナリでSPCAを開く
SPCAの解析編 ?SPCAもSPCBも、最初からヘッダ100バイトを削除しておく。 これでSPCはSPCじゃなくて純粋なARAMのデータとなった。 ?アドレスA-1360と1361を見る。そこがbgm1のあるアドレスだ。 ?1362.3がbgm2、1364.5がbgm3。さっき何番にOWを挿入したか? bgmNなら1358+2Nから2バイトがデータのありかだ。 ただしバイナリでは総じて位が反対に表記してある。 たとえば「1234」ならバイナリには「34 12」と書いてある。 bgmNのデータのありかをメモに書いておこう。 そしてそこへジャンプ。自分の場合は29A5だった。 ?自分の場合そこには(29A5)こんなデータが書いてあった。 7A2D 7A2D FF00 A529 (一小節分のデータ2D7Aを2回やってから29A5に戻る) 当然Wikiのbgm.txtも参照してくれ。 ここの内容もメモに書いておこう。 そしてこれの表す意味を自分なりに説明して添えておこう。 ?さっき出てきた1小節分のデータにジャンプ。自分の場合は2D7A そこには各chのデータのありかがある。 CD29 232A AD2A B62A 252C 0000 0000 0000 こんな感じ。
?あ、それもメモにそのまま書いておく。 (29CD 2A23 2AAD 2AB6 2C25)とひっくり返したものも 隣に書いておくと後で便利。 多分OWのBGM入れるツールの仕様で、チャンネルデータは固めて置いてあると思う。 それの示す先へジャンプ ?ch0データの最初と、使用している最後のチャンネルのデータの最後にマーキングしておくと便利かも。各chのデータは00が終了の合図。 ?多分チャンネル毎のデータの先にもまだデータがあると思う。 そこはおそらくループの内容。 ch毎のデータの中にE9abcdefてのがあちこちにあると思う。 これは確かアドレスcdabの処理をef回繰り返すってことで そのcdabがチャンネル毎のデータの次にあるやつにあたる。 だからこの部分も移植しなければならない。 以上がSPCAの内容である。 これをそのままSPCBの空いている場所に移せばいいんだが、 途中でアドレス指定してジャンプってのが幾度となく出てきたと思う。これを全部移植先に合うような数字に変えなければならないのだ。特にE9......は大量にあるので厄介。
>>260 今言っているのは、OW用BGM挿入ツールで入れてから Levelに無理やり移植するというめちゃくちゃ遠回りの話。 どうせプログラムを作るなら直接入れれるやつがいいけどなあ。 あと>>259の?の2行目に訂正 「1358+2N」でなくて「135E+2N」、むしろ「1360+2N-2」 〜SPCBに移植編〜 ここからはさっき書いたメモを見ながら作業をする。 ?SPCBを見てみよう。アドレス5FDCから空白があるので ここに曲をもってこよう。LevelのBGM20(未使用)を望みの曲にしよう。 levelも同じで1360+2*20-2=139EがBGM20のありかを示す。 そこをDC 5Fに変えてしまおう。 ?5FDCのところに解析編?の内容を移す。 ただしここからは一般的な説明はとても難しいから 自分の場合どうやったかを言って行く。 自分はSPCAでは アドレス29A5 : 7A2D 7A2D FF00 A529(2D7Aを2回→29A5に戻る) だった。 これをSPCBの5FDCに移すなら例えばこうすればよい。 アドレス5FDC : E45F E45F FF00 DC5F(5FE4を2回→5FDCに戻る) そして5FE4から移植編?の内容を移すことになる。
?5FE4には「ch毎のデータのありか」を移す。 SPCAでは自分の場合 CD29 232A AD2A B62A 252C 0000 0000 0000であった。 まずこれをSPCBにコピペして置こう。…※ このままじゃだめ。 そしてコレの次(5FF4)からは解析編??のデータを全部コピペしてしまおう。 そのあと再び※を見る。 SPCBでは29CDでなくて、コレ↑の次のアドレス5FF4にとぶようにしたい。 29CF→5FF4だから+3627である。 ならば他のも(0000を除く)全部+3627すれば、 その先の全チャンネルのデータのありかに対応してくれる。 ?最後に、解析編??のデータをさっきコピペしたが、 このままではいけないのはループ処理E9....(アドレス)である。 ....を全て+3627。めんどくさいけどこれでOK
じゃあ昨日の続きを書こうか。 昨日の段階で、SPCBは完成。ここで見落としがないか確かめよう。 E9の後は大体同じくらいの数字が来るはずだ。 この全てに+3000くらいをしてるわけだから、 E9で検索をかけてそのあとにひとつだけ他のより3000程小さい数字が出て来ていないか確かめよう。OKなら次へ。計算機大活躍。 〜SPCBへの変更をROMに適用編〜 ROMの改造では、PCアドレスとSNESアドレス(?)が違うということに注意しなければなら ない。 PCアドレスとは、ROMをPCのバイナリエディタで開いたときのアドレス。 SNESアドレスとは、ROMで「ここへ飛べ」と指定するときに使うアドレス。 LunarAddressで互いに変換できる。 まずどうゆう仕組みでARAMはエミュに送られてるのか説明。 ここで改造したいほうのROMをバイナリで開き348を見てみよう。 A9 D6 8D0000 A9 AE 8D0100 A9 0E 8D0200 とある。 それぞれ2つめに注目。 これは「SNESアドレス0EAED6に送るARAMのデータがある」と宣言している。 さてここでLunarAddressの登場。 SNESにとって0EAED6は、PC上では0730D6だそうだ。 バイナリ0730D6を見てみると FD41 6013 1816 AA18....とある。 3つ目以降に注目。これは正しくSPCBのアドレス1360にあったデータだ。 2つ目は、「次の所をARAMの1360として送るよ」ということ。 1つ目は、送るデータのサイズをあらわしている。 FD41 6013 dataが延々と続く(この部分がサイズFD41) 0000 0005 ←転送終了の合図 こういう仕組みだ。
SPCには8000を境に前半と後半的なものがあるようで、 今話してるのは前半の送り方ね。 SPCBの改造箇所は前半になっているはずだから、 ROMでも改造するのは前半だけでいいと思う。 さて、ROMのdata部分を昨日作ったSPCBの前半のそれにすり替えて FD41のところを調整すればいいってことになるが、 残念ながら元のよりデータが大きくなってるので入らない。 だから別の空いているところにデータを入れることになる。 どんな曲を入れたかによって変わるけど、 改造前は5FDCまでしかなかった前半が6000台くらいまで占めるようになったと思う。 ?1360から改造箇所のラスト(ここでは6666としようか)までをコピー ?ROMの、どこでもいいけど分かりやすくするため 1F1360から1F6666までにペーストしようか。 ?1F135Eに6013と書く ?1F135Cに、ペーストしたデータのサイズを書く。 6666-1360+1でいいかな?ひっくり返して書く。 ?ペーストしたデータの後を00000005とする。 ?最後に、LevelのARAM転送はPC0730D6にデータがある! となっていたところをPC1F135Cにすりかえる。 PC1F135C=SNES3E915Cだから、PC348を見て A9 5C 8D0000 A9 91 8D0100 A9 3E 8D0200 と変えてセーブしよう。 ミッションコンプリート! バックアップは当然取って作業しましょう。
良くある質問
Q. | 質問 | A. | 答え |
Q. | Javaをインストールしても使えません | A. | 環境変数の設定はしましたか? |
Q. | log.txtに書いてある事が違うんですが、それでもいいんですか? | A. | 最後の一行がファイルへの書きこみに失敗しましたになっていなければ大丈夫だと思います。 |
Q. | log.txtに成功と書かれていたのですが、音楽が全く消えてしまいました・・・ | A. | 初期化してください。 |
Q. | パッチしようとしたら addmusic は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されてません とでるんですが・・・ | A. | Javaをインストールしてください |
Q. | 1MBを超えたROMで音楽導入したらlog.txtには成功って書かれてたのにエミュでROM起動したらグラフィックがおかしくなってしまいます。 | A. | グラフィックを挿入し直しましょう |
Q. | しかるべき文法で書かれた楽譜データとは? | A. | MMLです |
Q. | addmusicとかテスト.batするとヘルプ(ry がでるんですが 1秒ほどで消えてしまいます どうすれば・・・ | A. | 問題ありません。ちなみに、addmusicの横に > log.txtとか書いておけば、結果がテキストファイルに出力されて見やすくなります。 |
Q. | MIDIファイルをMMLに変換するにはどうすればいいのでしょう? | A. | tinymmを使用してください。 |
Q. | SPCをMMLにするには? | A. | SPC2MIDI→Tinymm ただし変換したときにテンポがおかしくなることがあります。 |
Q. | Javacのコンパイルってどうやるの? | A. | Javaの開発キットをDLしてください |
Q. | 初期化.batを実行したらフリーズする | A. | 1MB以上の改造済みのROMに実行するとROMが壊れます。また、音楽番号を挿入していないものにするとサウンドが鳴らなくなったり、フリーズしたりします。 |
Q. | Lunar Magicで弄ったあとのROMを使いたい。バグなしで? | A. | 無理。どうしてもという場合は自分でいったん他のROMに入れてから目的のものに入れなおせ。 |
Q. | Pipesって(スクロール土管)原始的な方法のやつ? | A. | Wiki嫁 |
Q. | javaダウンロードしてあって、「addmusic(ファイル名(本当は入力))LEVEL」と入力すると、 addmusic は内部コマンドまたは外部コマンド、操作〜認識されてませんとでるのですが? | A. | "addmusic"を"addmusic.class"としてみるといいかも |
Q. | 環境変数とは? | A. | ググレカス |
OnePointAdvice
質問する前にマニュアル、wikiをよく読みましょう。
(Lunar Magic/音楽の追加やLunar Magic/音楽の書き方等を参照)
コマンドプロンプト段階でエラーが出るときは、ダウンロードしなおしたり、バッチファイルを作り直してみたりしましょう。
LEVELも編集できる新バージョンができました!
Lunar Magic/音楽の追加