├── images ├── m4a_data_diagram.png ├── Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_01.png ├── Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_02.png ├── Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_03.png ├── Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_04.png ├── Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_05.png ├── Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_06.png ├── Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_07.png └── m4a_data_diagram.drawio ├── _config.yml ├── index.md ├── Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis.md ├── Summary_of_GBA_Standard_Sound_Driver_MusicPlayer2000.ja-JP.md ├── Summary_of_GBA_Standard_Sound_Driver_MusicPlayer2000.md ├── LICENSE.md └── Conversion_Tools_for_Video_Game_Music.md /images/m4a_data_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveemu/vgmdocs/HEAD/images/m4a_data_diagram.png -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman 2 | title: VGMDocs 3 | description: Resources for Video Game Music 4 | encoding: UTF-8 5 | -------------------------------------------------------------------------------- /images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveemu/vgmdocs/HEAD/images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_01.png -------------------------------------------------------------------------------- /images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveemu/vgmdocs/HEAD/images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_02.png -------------------------------------------------------------------------------- /images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveemu/vgmdocs/HEAD/images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_03.png -------------------------------------------------------------------------------- /images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveemu/vgmdocs/HEAD/images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_04.png -------------------------------------------------------------------------------- /images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveemu/vgmdocs/HEAD/images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_05.png -------------------------------------------------------------------------------- /images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveemu/vgmdocs/HEAD/images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_06.png -------------------------------------------------------------------------------- /images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loveemu/vgmdocs/HEAD/images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_07.png -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | # Table of Contents 2 | 3 | * Allround 4 | * [Conversion Tools for Video Game Music (Focuses on Sequenced Music → MIDI)](Conversion_Tools_for_Video_Game_Music.md) 5 | * Genesis 6 | * [Guide for Extracting FM Synth Presets of Sega Genesis](Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis.md) 7 | * GBA 8 | * [Summary of GBA standard sound driver (MusicPlayer2000)](Summary_of_GBA_Standard_Sound_Driver_MusicPlayer2000.md) / [GBA 標準サウンドドライバ(MusicPlayer2000)の概要](Summary_of_GBA_Standard_Sound_Driver_MusicPlayer2000.ja-JP.md) 9 | 10 | Creative Commons License 11 | -------------------------------------------------------------------------------- /images/m4a_data_diagram.drawio: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis.md: -------------------------------------------------------------------------------- 1 | # Guide for Extracting FM Synth Presets of Sega Genesis 2 | 3 | This article explains some methods useful for viewing or dumping FM synthsis parameters (i.e. register values) of Sega Genesis sound chips. 4 | 5 | This article covers the methods for YM2612 (aka. OPN2, the FM synth chip of Genesis), but some of informations can apply to SN76489 (the DCSG chip) too. 6 | 7 | * Dump VGM file by [Kega Fusion](http://segaretro.org/Kega_Fusion) 8 | * Extract instrument presets from VGM file by [vgm2pre](https://vgmrips.net/wiki/Vgm2pre) 9 | * Play VGM file and mute channels by [foo_input_vgm](https://vgmrips.net/forum/viewtopic.php?p=5638#p5638) 10 | * Convert VGM file into Genesis ROM by [VGMPlayer](http://www.smspower.org/maxim/SMSSoftware/VGMPlayer) 11 | * View register values in real-time with [Exodus](http://www.exodusemulator.com/) 12 | 13 | ## Dump VGM file by Kega Fusion 14 | 15 | [Kega Fusion](http://segaretro.org/Kega_Fusion), a good Genesis emulator, is able to log sound during the game play as [VGM file](https://en.wikipedia.org/wiki/VGM_(file_format)). 16 | 17 | ![Kega Fusion Screenshot](images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_01.png) 18 | 19 | If you want to read a detailed ripping guide, see [Project2612 ripping tutorial](https://vgmrips.net/wiki/Project2612_ripping_tutorial). 20 | 21 | ## Extract instrument presets from VGM file by vgm2pre 22 | 23 | [vgm2pre](https://vgmrips.net/wiki/Vgm2pre) is a small tool for extracting instrument presets from VGM file. 24 | 25 | ![VGM2Pre Screenshot](images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_02.png) 26 | 27 | There are various formats for an instrument preset. Output file format can be chosen from Preferences window (Tools › Preferences). 28 | 29 | ![VGM2Pre Preferences Screenshot](images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_03.png) 30 | 31 | [TFI](https://vgmrips.net/wiki/TFI_File_Format) is prefered for [FMDrive from Aly James Lab](http://www.alyjameslab.com/alyjameslabfmdrive.html). Please choose the one that suits your goal. 32 | 33 | By pressing Dump button, the output file will be saved. You can load the file by a proper tool or VST plugin, or view it by hex viewer, since the TFI file format is quite simple. 34 | 35 | ## Play VGM file and mute channels 36 | 37 | I prefer to use [foobar2000](http://www.foobar2000.org/) with [foo_input_vgm](https://vgmrips.net/forum/viewtopic.php?p=5638#p5638). You are able to mute certain channels from Preferences panel. 38 | 39 | ![foo_input_vgm Chips Options Screenshot](images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_04.png) 40 | 41 | If you want to try other ones, see [VGM Players \- vgmrips](https://vgmrips.net/wiki/VGM_Players). 42 | 43 | ## Convert VGM file into Genesis ROM by VGM Player 44 | 45 | [VGMPlayer](http://www.smspower.org/maxim/SMSSoftware/VGMPlayer) allows you to convert the VGM log into a music player ROM. 46 | 47 | ![VGMPlayer Startup Window Screenshot](images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_05.png) 48 | 49 | Main window will appears by pressing the ROM Builder button. 50 | 51 | ![VGMPlayer Main Window Screenshot](images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_06.png) 52 | 53 | Add VGM files by the Add Tracks button first, then press Build Rom button, and a file named vgmPlay.bin will be saved. That is the converted ROM image. 54 | 55 | ## View register values in real-time with Exodus 56 | 57 | Sometimes you might want to view register values in real-time. [Exodus](http://www.exodusemulator.com/), an awesome emulator features a lot of debugger functions, is able to display the sound register values in real-time. 58 | 59 | Open a ROM and the YM2612 debugger (from the menu, Debug › Mega Drive › YM2612), then you will see register values there. 60 | 61 | ![Exodus Screenshot](images/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis_07.png) 62 | 63 | ## Credits 64 | 65 | 99% of this article is the translation from the following [gocha](https://github.com/gocha)'s article. I appreciate it very much. 66 | 67 | [メガドライブの音源の音色設定(レジスタ値)を確認・ダンプする](http://gocha.hatenablog.com/entry/How_To_Dump_Genesis_YM2612_Registers) 68 | -------------------------------------------------------------------------------- /Summary_of_GBA_Standard_Sound_Driver_MusicPlayer2000.ja-JP.md: -------------------------------------------------------------------------------- 1 | # GBA 標準サウンドドライバ(MusicPlayer2000)の概要 2 | 3 | 任天堂のゲームボーイアドバンスのSDKには、ゲームで音楽や効果音を鳴らすためのサウンドドライバライブラリが添付されています。 4 | このドライバは公式には AGB MusicPlayer2000 あるいは m4a と称されており、しばしば非公式に Sappy という名前でも呼ばれます。(以降は MP2k と称します) 5 | 6 | 必然的に、MP2k は(とくに日本国内でリリースされた)非常に多くのゲームで使用されています。 7 | また、古くから多くの人々によって解析されてきたため、とても多くの解析情報やツールが存在します。 8 | 9 | 本記事では MP2k への深い説明はしませんが、MP2k の概要と詳細を知るための各種リソースを紹介します。 10 | 11 | [English version](Summary_of_GBA_Standard_Sound_Driver_MusicPlayer2000.md) 12 | 13 | ## MusicPlayer2000 の仕様概要 14 | 15 | ほとんどあらゆることは以下のドキュメントで説明されています。 16 | 17 | [Romhacking.net - Documents - GBA "Sappy" sound engine information](https://www.romhacking.net/documents/462/) 18 | 19 | 主な説明をまとめると MP2k は次の特徴を持ちます。 20 | 21 | * ソフトウェア合成によるPCMサウンド(DirectSound)+GB互換サウンドが使用可能 22 | * PCMサウンド(DirectSound) 23 | * 再生周波数は 5734 ~ 42048 Hz の間で選択可能(デフォルトは 13379 Hz) 24 | * チャンネル数は 1~12 の間で選択可能(デフォルトは 8) 25 | * インストゥルメントごとの ADSR 設定が可能(8-bit) 26 | * 線形補間ありのリサンプリング 27 | * ディレイ固定の単純なリバーブ(エコー)エフェクトを搭載 28 | * ミキサーの処理速度や出力品質はあまり良くない(遅い、量子化ノイズが多いなどの問題があります。詳細は上記ドキュメントを参照) 29 | * GB互換サウンド 30 | * 矩形波×2 + 波形メモリ×1 + ノイズ×1 31 | * データフォーマット 32 | * MIDI/AIFF ファイルをアセンブリ(*.s)にコンバートし、GBA ROM をビルドする 33 | * シーケンスデータは SMF Format 1 のようなマルチトラックフォーマット(分解能は 24) 34 | * サンプルデータは無圧縮の符号つき 8-bit PCM(Microsoft Wave とは符号が逆なので注意) 35 | * BGM と SFX の区別はない。すべてのサウンドはシーケンス+バンクの組み合わせで構成される 36 | 37 | じつは、この標準サウンドドライバはシステムROM(BIOS)にも実装されています。ただし、MP2k ドライバがバグ修正や改良を加えた互換ドライバとしてリリースされた都合上、それらのシステム関数は実際の商用ゲームでは基本的に使用されていません。GBA の BIOS 関数については、[GBATEK](https://problemkaputt.de/gbatek.htm) を参照してください。 38 | 39 | ## バージョン&バリエーション 40 | 41 | 知る限りでは、MP2k には次の標準的なバリエーションが存在します: 42 | 43 | |説明 |使用ゲーム例 | 44 | |------------------------------------|-----------------------------------------------| 45 | |古いバージョン (めったに使われない) |桃太郎まつり, ぼくは航空管制官 | 46 | |ステレオ版 |悪魔城ドラキュラ: Circle of the Moon | 47 | |モノラル版 |キャッスルヴァニア: 白夜の協奏曲&暁月の円舞曲 | 48 | |新しいバージョン? |ロックマンEXE5, ぷよぷよフィーバー, マザー3 | 49 | 50 | 注: ここでは、マイナーバージョンの小さな相違点は同一と見なします。 51 | 52 | また、いくつかのゲームでは MP2k を改善・拡張した互換ドライバが使用されています。 53 | 54 | * ポケットモンスターシリーズ(圧縮サンプルを扱える) 55 | * 黄金の太陽など、株式会社キャメロットによって開発されたタイトル 56 | * メトロイドフュージョン、メトロイドゼロミッション 57 | * など 58 | 59 | ## MusicPlayer2000 ドライバ関数の基本利用 60 | 61 | 基本的には 4 つの関数を使用して動作します。 62 | 63 | まずは初期化ルーチンで m4aSoundInit 関数を呼び出し、サウンドを初期化します。 64 | 65 | ```c 66 | void m4aSoundInit(void); 67 | ``` 68 | 69 | VBlank 割り込みハンドラでは、割り込み直後に m4aSoundVSync 関数を呼び出します。 70 | 71 | ```c 72 | void m4aSoundVSync(void); 73 | ``` 74 | 75 | メインルーチンでは各フレーム(約1/60秒)ごとに m4aSoundMain 関数を呼び出します。 76 | 77 | ```c 78 | void m4aSoundMain(void); 79 | ``` 80 | 81 | あとは m4aSongNumStart 関数で曲番号を指定して演奏を開始します。 82 | 83 | ```c 84 | void m4aSongNumStart(u16 n); 85 | ``` 86 | 87 | これらの関数のアドレスは通常 saptapper (MP2k 向けの自動化されたリッピングツール)で検出することができます。 88 | 89 | [loveemu/saptapper: Automated GSF ripper](https://github.com/loveemu/saptapper) 90 | 91 | 内部的には、これらの関数を通じて曲を再生すると、サウンドドライバは再生に関する情報を Music Player のインスタンスに保存します。通常、複数の音楽プレイヤーのインスタンスが存在し、ひとつはBGM用、他方は効果音用といった使い分けがなされます。曲をどの Music Player のインスタンスで再生するかは、その曲のヘッダーによって決まります。 92 | 93 | ## ROM / RAM データマップ 94 | 95 | ![MusicPlayer2000 ROM/RAM Data Map](images/m4a_data_diagram.png) 96 | 97 | さらなる詳細については、[m4a_internal.h](https://github.com/pret/pokeruby/blob/master/include/gba/m4a_internal.h) や [sappy.txt](https://www.romhacking.net/documents/462/) を参照してください。 98 | 99 | ## MusicPlayer2000 シーケンスのコマンド一覧 100 | 101 | シーケンスデータのイベント一覧を下表に示します。 102 | 103 | 原則として、1バイト引数は 0~127 の範囲内の値を使用し、0x80 ~ 0xFF の範囲は使用しません。 104 | 105 | |コマンド |シンボル |引数 |繰り返し |説明 | 106 | |-------------|-----------|----------------------------------------|---------|------------------------------------------------------------------------------| 107 | |0x00 ~ 0x7F |n/a |n/a |可 |コマンド自身を第一引数として、前回の繰り返し可能コマンドを繰り返す | 108 | |0x80 ~ 0xB0 |W00 ~ W96 |void |不可 |デルタタイム(Wait) | 109 | |0xB1 |FINE |void |不可 |トラック終了 | 110 | |0xB2 |GOTO |u32 dest |不可 |指定先アドレス(0x8XXXXXX のような絶対ハードウェアアドレス)にジャンプ | 111 | |0xB3 |PATT |u32 dest |不可 |パターン開始(サブルーチンジャンプ、ネスト不可) | 112 | |0xB4 |PEND |void |不可 |パターン終了 | 113 | |0xB5 |REPT |u8 count, u32 dest |不可 |パターンを繰り返す(繰り返し回数 0~255) | 114 | |0xB9 |MEMACC |u8 mem_set, u8 adr, u8 dat [, u32 dest] |不可 |メモリアクセス(ダイナミックな条件付きジャンプに使用。詳細は後述) | 115 | |0xBA |PRIO |u8 |不可 |トラックの優先度を設定(0~255、高い値ほど高優先度) | 116 | |0xBB |TEMPO |u8 |不可 |テンポ。BPM の半分の値を指定する(11~255, tempo 75 のとき 1 frame = 1 tick) | 117 | |0xBC |KEYSH |s8 |不可 |トランスポーズ(-128~127、トラックごとに適用) | 118 | |0xBD |VOICE |u8 |可 |インストゥルメント | 119 | |0xBE |VOL |u8 |可 |ボリューム | 120 | |0xBF |PAN |u8 |可 |パン(0: 左, 64: 中央, 127: 右) | 121 | |0xC0 |BEND |u8 |可 |ピッチベンド(0~127、64 が中央) | 122 | |0xC1 |BENDR |u8 |可 |ピッチベンドレンジ(半音単位で指定、デフォルトは 2) | 123 | |0xC2 |LFOS |u8 |不可 |LFO の速度(高い値ほど高速、実際の速度はテンポとともに変動) | 124 | |0xC3 |LFODL |u8 |不可 |LFO のディレイ(ティック数で指定) | 125 | |0xC4 |MOD |u8 |可 |LFO の深さ | 126 | |0xC5 |MODT |u8 |不可 |LFO の種類(0: ピッチ (デフォルト), 1: ボリューム, 2: パン) | 127 | |0xC8 |TUNE |u8 |可 |マイクロチューニング(0: 半音低下, 64: 変更なし: 127: 半音増加) | 128 | |0xCD 0x08 |XCMD xIECV |u8 |可 |疑似エコーのボリューム(0~127) | 129 | |0xCD 0x09 |XCMD xIECL |u8 |可 |疑似エコーの長さ(0~127、フレーム数(xx/60 秒)で指定) | 130 | |0xCE |EOT |[u8 key] |可 |タイ終了/ノートオフ | 131 | |0xCF |TIE |[u8 key [, u8 velo]] |可 |タイ開始/ノートオン(0xCE に到達するまで長さは不定) | 132 | |0xD0 ~ 0xFF |N01 ~ N96 |[u8 key [, u8 velo [, u8 gtp]]] |可 |ノート(第三引数はゲートタイムの微調整用、ティック単位で指定) | 133 | 134 | ### ノート 135 | 136 | Wxx コマンド (0x80 ~ 0xB0) と Nxx コマンド (0xD0 ~ 0xFF) は、以下のテーブルに基づいて 1~96 までの長さを表現します。 137 | 138 | ```c 139 | const u8 noteLengthTable[48] = { 140 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 141 | 17, 18, 19, 20, 21, 22, 23, 24, 28, 30, 32, 36, 40, 42, 44, 48, 142 | 52, 54, 56, 60, 64, 66, 68, 72, 76, 78, 80, 84, 88, 90, 92, 96 143 | }; 144 | ``` 145 | 146 | ### メモリアクセス (MEMACC) 147 | 148 | MEMACC (0xB9) は共有のメモリ領域(最大 256 バイトの RAM 領域 `m4a_memacc_area`)を使用し、ゲームの状態に応じて動作に条件付きジャンプを実行するためのコマンドです。ほとんど使用されていません。 149 | 150 | このコマンドは基本的に3つの引数を取りますが、条件分岐命令では4つめの引数に分岐先アドレスを指定します。 151 | 152 | ```asm 153 | @ for arithmetic operations 154 | MEMACC, mem_set, adr, dat 155 | 156 | @ for branching instructions 157 | MEMACC, mem_set, adr, dat, dest 158 | ``` 159 | 160 | mem_set で演算の種類を指定し、adr と dat で演算の引数(0~255)を指定します。 161 | 162 | mem_set には次の値を指定可能です。 163 | 164 | |値 |シンボル |説明 |疑似構文 | 165 | |---|------------|----------------------------|------------------------------| 166 | |0 |mem_set |代入(即値) |`$adr = #dat` | 167 | |1 |mem_add |加算(即値) |`$adr += #dat` | 168 | |2 |mem_sub |減算(即値) |`$adr -= #dat` | 169 | |3 |mem_mem_set |代入(間接) |`$adr = $dat` | 170 | |4 |mem_mem_add |加算(間接) |`$adr += $dat` | 171 | |5 |mem_mem_sub |減算(間接) |`$adr -= $dat` | 172 | |6 |mem_beq |条件分岐(即値) 等しい |`if ($adr == #dat) goto dest` | 173 | |7 |mem_bne |条件分岐(即値) 等しくない |`if ($adr != #dat) goto dest` | 174 | |8 |mem_bhi |条件分岐(即値) より大きい |`if ($adr > #dat) goto dest` | 175 | |9 |mem_bhs |条件分岐(即値) 以上 |`if ($adr >= #dat) goto dest` | 176 | |10 |mem_bls |条件分岐(即値) 以下 |`if ($adr <= #dat) goto dest` | 177 | |11 |mem_blo |条件分岐(即値) より小さい |`if ($adr < #dat) goto dest` | 178 | |12 |mem_mem_beq |条件分岐(間接) 等しい |`if ($adr == $dat) goto dest` | 179 | |13 |mem_mem_bne |条件分岐(間接) 等しくない |`if ($adr != $dat) goto dest` | 180 | |14 |mem_mem_bhi |条件分岐(間接) より大きい |`if ($adr > $dat) goto dest` | 181 | |15 |mem_mem_bhs |条件分岐(間接) 以上 |`if ($adr >= $dat) goto dest` | 182 | |16 |mem_mem_bls |条件分岐(間接) 以下 |`if ($adr <= $dat) goto dest` | 183 | |17 |mem_mem_blo |条件分岐(間接) より小さい |`if ($adr < $dat) goto dest` | 184 | 185 | ## 既知の関数の一覧 186 | 187 | ```c 188 | void m4aSoundVSync(void); 189 | void m4aSoundInit(void); 190 | void m4aSoundMode(u32 mode); 191 | void m4aSoundMain(void); 192 | void m4aSongNumStart(u16 n); 193 | void m4aMPlayStart(MusicPlayerArea *ma, SongHeader *so); 194 | void m4aSongNumStartOrChange(u16 n); 195 | void m4aSongNumStartOrContinue(u16 n); 196 | void m4aSongNumStop(u16 n); 197 | void m4aMPlayStop(MusicPlayerArea *ma); 198 | void m4aSongNumContinue(u16 n); 199 | void m4aMPlayAllStop(void); 200 | void m4aMPlayContinue(MusicPlayerArea *ma); 201 | void m4aMPlayAllContinue(void); 202 | void m4aMPlayFadeOut(MusicPlayerArea *ma, u16 sp); 203 | void m4aMPlayImmInit(MusicPlayerArea *ma); 204 | void m4aSoundVSyncOff(void); 205 | void m4aSoundVSyncOn(void); 206 | void m4aMPlayTempoControl(MusicPlayerArea *ma, u16 te); 207 | void m4aMPlayVolumeControl(MusicPlayerArea *ma, u16 tb, u16 vo); 208 | void m4aMPlayPitchControl(MusicPlayerArea *ma, u16 tb, s16 pi); 209 | void m4aMPlayPanpotControl(MusicPlayerArea *ma, u16 tb, s8 pa); 210 | void m4aMPlayModDepthSet(MusicPlayerArea *ma, u16 tb, u8 md); 211 | void m4aMPlayLFOSpeedSet(MusicPlayerArea *ma, u16 tb, u8 ls); 212 | ``` 213 | 214 | ## ドキュメント 215 | 216 | [Romhacking.net - Documents - GBA "Sappy" sound engine information](https://www.romhacking.net/documents/462/) (by Bregalad, ipatix) 217 | 218 | ## ツール・ソースコード 219 | 220 | * [ipatix/agbplay: Music player for the most common GBA sound format](https://github.com/ipatix/agbplay) 221 | * MP2k フォーマットを再生可能な PC 向けミュージックプレイヤー(LGPLv3) 222 | * ソースコードがドライバを理解するうえで参考になります(シーケンスデータ周りは StreamGenerator.cpp 参照) 223 | * ipatix 氏は著名な MP2k の解析者の一人で、同氏の github には m4a2s, midi2agb, wav2agb など、他の MP2k 用ツールもあります(ハックロム開発などに便利) 224 | * [Kermalis/VGMusicStudio: A program that lets you listen to the music from popular video game formats.](https://github.com/Kermalis/VGMusicStudio) 225 | * agbplay より後発の類似ツール、C# 製(LGPLv3) 226 | * [ipatix/gba-hq-mixer: HQ mixer for GBA games which use the m4a/mp2k sound driver](https://github.com/ipatix/gba-hq-mixer) 227 | * 再配置可能なコードの追加で高品質なミキシングを実現します 228 | * [loveemu/saptapper: Automated GSF ripper](https://github.com/loveemu/saptapper) (A reimplementation of Caitsith2's saptapper) 229 | * MP2k 向けの全自動の GSF リッピングツール 230 | * m4a の基本的な関数を検出する用途にも使える 231 | * フォーク元: [GSF Ripping Tools - caitsith2.net](http://gsf.caitsith2.net/ripping.html) 232 | * [Thysbelon/gba-mus-ripper: A fork of Bregalad's "GBA Mus Riper" program](https://github.com/Thysbelon/gba-mus-ripper) 233 | * MP2k フォーマットを MIDI/SF2 形式でエクスポートできるツール 234 | * sappy_detector.exe は MP2k の検出と基本情報の確認に使えます 235 | * フォーク元: [Utilities - GBA Mus Riper - Romhacking.net](https://www.romhacking.net/utilities/881/) 236 | * [pret/pokeruby: Disassembly of Pokémon Ruby/Sapphire](https://github.com/pret/pokeruby) 237 | * 音楽データの参考例 238 | * [m4a_internal.h](https://github.com/pret/pokeruby/blob/master/include/gba/m4a_internal.h) は MP2k の内部データ構造をよく表しています 239 | * 前述の通り、ポケモンのサウンドドライバーはすこしカスタマイズされていますが、その違いはわずかです 240 | * [IDA FLIRT Signatures for GBA](https://1drv.ms/u/s!Alr6ACx5YY7_gjYggbVU-MQwJIlj?e=xR1rZD) (experimental) 241 | -------------------------------------------------------------------------------- /Summary_of_GBA_Standard_Sound_Driver_MusicPlayer2000.md: -------------------------------------------------------------------------------- 1 | # Summary of GBA standard sound driver (MusicPlayer2000) 2 | 3 | Nintendo's Game Boy Advance SDK comes with a sound driver library for playing music and sound effects in the game. 4 | This driver is officially called AGB MusicPlayer2000 or m4a and is often informally also called Sappy. 5 | 6 | Inevitably, MP2k is used in a large number of games (especially in games released in Japan). 7 | Also, since it has been analyzed by many people for a long time, there is a great deal of analysis information and tools. 8 | 9 | This article does not explain the details of MP2k. Instead, this article introduces you an overview of MP2k and various resources to learn more. 10 | 11 | [日本語で読む](Summary_of_GBA_Standard_Sound_Driver_MusicPlayer2000.ja-JP.md) 12 | 13 | ## MusicPlayer2000 Specifications Overview 14 | 15 | Almost everything is explained in the following document: 16 | 17 | [Romhacking.net - Documents - GBA "Sappy" sound engine information](https://www.romhacking.net/documents/462/) 18 | 19 | To summarize the main explanation MP2k has the following features. 20 | 21 | * Software-synthesized PCM sound (DirectSound) + Gameboy compatible sound available 22 | * PCM sound (DirectSound) 23 | * Playback frequency is selectable between 5734 Hz and 42048 Hz (default is 13379 Hz) 24 | * The number of channels is selectable between 1 and 12 (default is 8) 25 | * ADSR is configurable per instrument (resolution is 8-bit) 26 | * Resampling with linear interpolation 27 | * Equipped with a simple reverb (echo) effect with fixed delay 28 | * The processing speed and output quality of the mixer are not very good (refer to the above-mentioned document for details) 29 | * Gameboy compatible sound 30 | * 2 square waves + 1 programmable waveform + 1 noise 31 | * Data format 32 | * Convert MIDI / AIFF file to assembly (*.s) and build GBA ROM 33 | * Sequences are multitrack format like SMF Format 1 (PPQN is 24) 34 | * Samples are uncompressed 8-bit PCM (note that they have the opposite sign to Microsoft Wave) 35 | * There is no distinction between BGM and SFX. All sounds consist of sequence + bank combinations 36 | 37 | In fact, this standard sound driver is also implemented in the System ROM (BIOS). However, those system functions are almost never used in actual commercial games, because the MP2k driver has been released as a compatible driver with bugfixes and improvements. See [GBATEK](https://problemkaputt.de/gbatek.htm) for GBA BIOS functions. 38 | 39 | ## Versions and variations 40 | 41 | As far as I know, MP2k has the following standard variations: 42 | 43 | |Description |Example of games using the driver | 44 | |---------------------------------|------------------------------------------------------| 45 | |Older version (very rarely used) |Momotarou Matsuri, Boku wa Koukuu Kanseikan | 46 | |Stereo version |Castlevania: Circle of the Moon | 47 | |Mono version |Castlevania: Harmony of Dissonance and Aria of Sorrow | 48 | |Newer version? |Mega Man Battle Network 5, Puyo Pop Fever, Mother 3 | 49 | 50 | Note: Minor version differences are considered identical here. 51 | 52 | Also, some games use compatible drivers that improve and extend MP2k. 53 | 54 | * Pokemon Series (uses compressed samples) 55 | * Games developed by Camelot, Inc., such as the Golden Sun 56 | * Metroid Fusion and Metroid Zero Mission 57 | * etc. 58 | 59 | ## Basic use of MusicPlayer2000 driver functions 60 | 61 | The driver basically works with 4 functions. 62 | 63 | First, the m4aSoundInit function must be called in the initialization routine to initialize the sound. 64 | 65 | ```c 66 | void m4aSoundInit(void); 67 | ``` 68 | 69 | The VBlank interrupt handler must call the m4aSoundVSync function immediately after the interrupt. 70 | 71 | ```c 72 | void m4aSoundVSync(void); 73 | ``` 74 | 75 | The m4aSoundMain function must be called by main routine in every frame (approximately every 1/60 of a second). 76 | 77 | ```c 78 | void m4aSoundMain(void); 79 | ``` 80 | 81 | Lastly, call the m4aSongNumStart function with a song number to start playing. 82 | 83 | ```c 84 | void m4aSongNumStart(u16 n); 85 | ``` 86 | 87 | The addresses of these functions can usually be detected with saptapper, an automated ripping tool for MP2k. 88 | 89 | [loveemu/saptapper: Automated GSF ripper](https://github.com/loveemu/saptapper) 90 | 91 | Internally, when a song starts playing through these functions, the sound driver stores information about the playback, into an instance of music player. Usually, a game has more than one music player instances on memory. One is used for music and the other ones are used for SFXs and such, typically. The instance of the music player to play a song is determined by its song header. 92 | 93 | ## ROM / RAM data map 94 | 95 | ![MusicPlayer2000 ROM/RAM Data Map](images/m4a_data_diagram.png) 96 | 97 | See [m4a_internal.h](https://github.com/pret/pokeruby/blob/master/include/gba/m4a_internal.h) and [sappy.txt](https://www.romhacking.net/documents/462/) for more informations. 98 | 99 | ## List of commands of MusicPlayer2000 sequence 100 | 101 | The table below shows a list of MP2k sequence commands. 102 | 103 | In principle, most of 1-byte arguments are values in the range 0 to 127, and values greater than 0x80 are not used. 104 | 105 | |Command |Symbol |Parameters |Repeatable |Description | 106 | |-------------|-----------|----------------------------------------|-----------|------------------------------------------------------------------------------------| 107 | |0x00 ~ 0x7F |n/a |n/a |Yes |Repeat previous repeatable command using the command byte as first argument | 108 | |0x80 ~ 0xB0 |W00 ~ W96 |void |No |Delta-time (Wait) | 109 | |0xB1 |FINE |void |No |Track end | 110 | |0xB2 |GOTO |u32 dest |No |Jump to specified address (absolute hardware address like 0x8XXXXXX) | 111 | |0xB3 |PATT |u32 dest |No |Pattern start (subroutine jump, cannot be nested) | 112 | |0xB4 |PEND |void |No |Pattern end | 113 | |0xB5 |REPT |u8 count, u32 dest |No |Repeat pattern (the valid range for the repeat count is 0-255) | 114 | |0xB9 |MEMACC |u8 mem_set, u8 adr, u8 dat [, u32 dest] |No |Memory access (used for dynamic conditional jumps; details below) | 115 | |0xBA |PRIO |u8 |No |Priority of track (0-255, the higher the value, the higher priority) | 116 | |0xBB |TEMPO |u8 |No |Tempo, specify half the value of BPM (11-255, 1 frame = 1 tick in case of tempo 75) | 117 | |0xBC |KEYSH |s8 |No |Transpose (-128-127, per-track transpose) | 118 | |0xBD |VOICE |u8 |Yes |Instrument | 119 | |0xBE |VOL |u8 |Yes |Volume | 120 | |0xBF |PAN |u8 |Yes |Pan (0: left, 64: center, 127: right) | 121 | |0xC0 |BEND |u8 |Yes |Pitch bend (0-127, center is 64) | 122 | |0xC1 |BENDR |u8 |Yes |Pitch bend range (specified in semitones, default is 2) | 123 | |0xC2 |LFOS |u8 |No |LFO speed (higher values are faster, actual speed fluctuates with tempo) | 124 | |0xC3 |LFODL |u8 |No |LFO delay (specified in ticks) | 125 | |0xC4 |MOD |u8 |Yes |LFO depth | 126 | |0xC5 |MODT |u8 |No |LFO type (0: pitch (default), 1: volume, 2: pan) | 127 | |0xC8 |TUNE |u8 |Yes |Micro-tuning (0: one semitone lower, 64: normal: 127: one semitone higher) | 128 | |0xCD 0x08 |XCMD xIECV |u8 |Yes |Pseudo-echo volume (0-127) | 129 | |0xCD 0x09 |XCMD xIECL |u8 |Yes |Pseudo-echo length (0-127, specified in frame counts (i.e. xx/60 seconds)) | 130 | |0xCE |EOT |[u8 key] |Yes |Tie end / Note off | 131 | |0xCF |TIE |[u8 key [, u8 velo]] |Yes |Tie / Note on (note length is undeterminated until the 0xCE command appears) | 132 | |0xD0 ~ 0xFF |N01 ~ N96 |[u8 key [, u8 velo [, u8 gtp]]] |Yes |Note (the third argument is for fine adjustment of gate time, specified in ticks) | 133 | 134 | ### Note 135 | 136 | The Wxx command (0x80 to 0xB0) and the Nxx command (0xD0 to 0xFF) represent lengths from 1 to 96. The lookup table below shows the list of lengths. 137 | 138 | ```c 139 | const u8 noteLengthTable[48] = { 140 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 141 | 17, 18, 19, 20, 21, 22, 23, 24, 28, 30, 32, 36, 40, 42, 44, 48, 142 | 52, 54, 56, 60, 64, 66, 68, 72, 76, 78, 80, 84, 88, 90, 92, 96 143 | }; 144 | ``` 145 | 146 | ### Memory access (MEMACC) 147 | 148 | MEMACC (0xB9) is a command to perform a conditional jump dynamically according to the state of the game. The command uses a shared memory area (up to 256 bytes of RAM area `m4a_memacc_area`). This command is rarely used. 149 | 150 | This command basically takes three arguments, except that the conditional branch instruction specifies the branch destination address as the fourth argument. 151 | 152 | ```asm 153 | @ for arithmetic operations 154 | MEMACC, mem_set, adr, dat 155 | 156 | @ for branching instructions 157 | MEMACC, mem_set, adr, dat, dest 158 | ``` 159 | 160 | Specify the type of operation with mem_set, and specify the arguments of the operation with adr and dat (0-255). 161 | 162 | Specify one of the following values for mem_set: 163 | 164 | |Value |Symbol |Description |Pseudo syntax | 165 | |------|------------|-----------------------------------------|------------------------------| 166 | |0 |mem_set |Assign (Immediate) |`$adr = #dat` | 167 | |1 |mem_add |Add (Immediate) |`$adr += #dat` | 168 | |2 |mem_sub |Subtract (Immediate) |`$adr -= #dat` | 169 | |3 |mem_mem_set |Assign (Indirect) |`$adr = $dat` | 170 | |4 |mem_mem_add |Add (Indirect) |`$adr += $dat` | 171 | |5 |mem_mem_sub |Subtract (Indirect) |`$adr -= $dat` | 172 | |6 |mem_beq |Branch if equal (Immediate) |`if ($adr == #dat) goto dest` | 173 | |7 |mem_bne |Brnach if not equal (Immediate) |`if ($adr != #dat) goto dest` | 174 | |8 |mem_bhi |Branch if higher (Immediate) |`if ($adr > #dat) goto dest` | 175 | |9 |mem_bhs |Branch if higher or the same (Immediate) |`if ($adr >= #dat) goto dest` | 176 | |10 |mem_bls |Branch if lower of the same (Immediate) |`if ($adr <= #dat) goto dest` | 177 | |11 |mem_blo |Branch if lower (Immediate) |`if ($adr < #dat) goto dest` | 178 | |12 |mem_mem_beq |Branch if equal (Indirect) |`if ($adr == $dat) goto dest` | 179 | |13 |mem_mem_bne |Brnach if not equal (Indirect) |`if ($adr != $dat) goto dest` | 180 | |14 |mem_mem_bhi |Branch if higher (Indirect) |`if ($adr > $dat) goto dest` | 181 | |15 |mem_mem_bhs |Branch if higher or the same (Indirect) |`if ($adr >= $dat) goto dest` | 182 | |16 |mem_mem_bls |Branch if lower of the same (Indirect) |`if ($adr <= $dat) goto dest` | 183 | |17 |mem_mem_blo |Branch if lower (Indirect) |`if ($adr < $dat) goto dest` | 184 | 185 | ## List of known functions 186 | 187 | ```c 188 | void m4aSoundVSync(void); 189 | void m4aSoundInit(void); 190 | void m4aSoundMode(u32 mode); 191 | void m4aSoundMain(void); 192 | void m4aSongNumStart(u16 n); 193 | void m4aMPlayStart(MusicPlayerArea *ma, SongHeader *so); 194 | void m4aSongNumStartOrChange(u16 n); 195 | void m4aSongNumStartOrContinue(u16 n); 196 | void m4aSongNumStop(u16 n); 197 | void m4aMPlayStop(MusicPlayerArea *ma); 198 | void m4aSongNumContinue(u16 n); 199 | void m4aMPlayAllStop(void); 200 | void m4aMPlayContinue(MusicPlayerArea *ma); 201 | void m4aMPlayAllContinue(void); 202 | void m4aMPlayFadeOut(MusicPlayerArea *ma, u16 sp); 203 | void m4aMPlayImmInit(MusicPlayerArea *ma); 204 | void m4aSoundVSyncOff(void); 205 | void m4aSoundVSyncOn(void); 206 | void m4aMPlayTempoControl(MusicPlayerArea *ma, u16 te); 207 | void m4aMPlayVolumeControl(MusicPlayerArea *ma, u16 tb, u16 vo); 208 | void m4aMPlayPitchControl(MusicPlayerArea *ma, u16 tb, s16 pi); 209 | void m4aMPlayPanpotControl(MusicPlayerArea *ma, u16 tb, s8 pa); 210 | void m4aMPlayModDepthSet(MusicPlayerArea *ma, u16 tb, u8 md); 211 | void m4aMPlayLFOSpeedSet(MusicPlayerArea *ma, u16 tb, u8 ls); 212 | ``` 213 | 214 | ## Documents 215 | 216 | [Romhacking.net - Documents - GBA "Sappy" sound engine information](https://www.romhacking.net/documents/462/) (by Bregalad, ipatix) 217 | 218 | ## Tools and Source Codes 219 | 220 | * [ipatix/agbplay: Music player for the most common GBA sound format](https://github.com/ipatix/agbplay) 221 | * Music player for PC that can play MP2k format (LGPLv3) 222 | * The source code will be helpful in understanding the driver (see StreamGenerator.cpp for sequence parser) 223 | * ipatix is one of the prominent MP2k analysts, and his github also has other MP2k tools such as m4a2s, midi2agb and wav2agb. They are useful for ROM hacking etc. 224 | * [Kermalis/VGMusicStudio: A program that lets you listen to the music from popular video game formats.](https://github.com/Kermalis/VGMusicStudio) 225 | * New music player and visualizer for GBA music format, written in C# (LGPLv3) 226 | * [ipatix/gba-hq-mixer: HQ mixer for GBA games which use the m4a/mp2k sound driver](https://github.com/ipatix/gba-hq-mixer) 227 | * Provides additional relocatable code for higher quality mixing 228 | * [loveemu/saptapper: Automated GSF ripper](https://github.com/loveemu/saptapper) (A reimplementation of Caitsith2's saptapper) 229 | * Automated GSF ripping tool for MP2k 230 | * It can also be used to detect fundamental m4a functions 231 | * Forked from: [GSF Ripping Tools - caitsith2.net](http://gsf.caitsith2.net/ripping.html) 232 | * [Thysbelon/gba-mus-ripper: A fork of Bregalad's "GBA Mus Riper" program](https://github.com/Thysbelon/gba-mus-ripper) 233 | * Conversion tool that can export MP2k format to MIDI/SF2 format 234 | * sappy_detector.exe can be used to detect MP2k driver and view some basic information 235 | * Forked from: [Utilities - GBA Mus Riper - Romhacking.net](https://www.romhacking.net/utilities/881/) 236 | * [pret/pokeruby: Disassembly of Pokémon Ruby/Sapphire](https://github.com/pret/pokeruby) 237 | * Actual example of music data 238 | * [m4a_internal.h](https://github.com/pret/pokeruby/blob/master/include/gba/m4a_internal.h) is a good representation of the internal data structure of MP2k 239 | * As mentioned above, the Pokémon sound driver is a little more customized, but the differences are slight 240 | * [IDA FLIRT Signatures for GBA](https://1drv.ms/u/s!Alr6ACx5YY7_gjYggbVU-MQwJIlj?e=xR1rZD) (experimental) 241 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | ## creative commons 2 | 3 | # Attribution-ShareAlike 4.0 International 4 | 5 | Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. 6 | 7 | ### Using Creative Commons Public Licenses 8 | 9 | Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. 10 | 11 | * __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors). 12 | 13 | * __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees). 14 | 15 | ## Creative Commons Attribution-ShareAlike 4.0 International Public License 16 | 17 | By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. 18 | 19 | ### Section 1 – Definitions. 20 | 21 | a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. 22 | 23 | b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. 24 | 25 | c. __BY-SA Compatible License__ means a license listed at [creativecommons.org/compatiblelicenses](http://creativecommons.org/compatiblelicenses), approved by Creative Commons as essentially the equivalent of this Public License. 26 | 27 | d. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. 28 | 29 | e. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. 30 | 31 | f. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. 32 | 33 | g. __License Elements__ means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. 34 | 35 | h. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License. 36 | 37 | i. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. 38 | 39 | j. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License. 40 | 41 | k. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. 42 | 43 | l. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. 44 | 45 | m. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. 46 | 47 | ### Section 2 – Scope. 48 | 49 | a. ___License grant.___ 50 | 51 | 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: 52 | 53 | A. reproduce and Share the Licensed Material, in whole or in part; and 54 | 55 | B. produce, reproduce, and Share Adapted Material. 56 | 57 | 2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 58 | 59 | 3. __Term.__ The term of this Public License is specified in Section 6(a). 60 | 61 | 4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 62 | 63 | 5. __Downstream recipients.__ 64 | 65 | A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. 66 | 67 | B. __Additional offer from the Licensor – Adapted Material.__ Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. 68 | 69 | C. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 70 | 71 | 6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). 72 | 73 | b. ___Other rights.___ 74 | 75 | 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 76 | 77 | 2. Patent and trademark rights are not licensed under this Public License. 78 | 79 | 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. 80 | 81 | ### Section 3 – License Conditions. 82 | 83 | Your exercise of the Licensed Rights is expressly made subject to the following conditions. 84 | 85 | a. ___Attribution.___ 86 | 87 | 1. If You Share the Licensed Material (including in modified form), You must: 88 | 89 | A. retain the following if it is supplied by the Licensor with the Licensed Material: 90 | 91 | i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); 92 | 93 | ii. a copyright notice; 94 | 95 | iii. a notice that refers to this Public License; 96 | 97 | iv. a notice that refers to the disclaimer of warranties; 98 | 99 | v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; 100 | 101 | B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and 102 | 103 | C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 104 | 105 | 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 106 | 107 | 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 108 | 109 | b. ___ShareAlike.___ 110 | 111 | In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 112 | 113 | 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. 114 | 115 | 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 116 | 117 | 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. 118 | 119 | ### Section 4 – Sui Generis Database Rights. 120 | 121 | Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: 122 | 123 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; 124 | 125 | b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and 126 | 127 | c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. 128 | 129 | For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. 130 | 131 | ### Section 5 – Disclaimer of Warranties and Limitation of Liability. 132 | 133 | a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__ 134 | 135 | b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__ 136 | 137 | c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. 138 | 139 | ### Section 6 – Term and Termination. 140 | 141 | a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. 142 | 143 | b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 144 | 145 | 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 146 | 147 | 2. upon express reinstatement by the Licensor. 148 | 149 | For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. 150 | 151 | c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. 152 | 153 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. 154 | 155 | ### Section 7 – Other Terms and Conditions. 156 | 157 | a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. 158 | 159 | b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. 160 | 161 | ### Section 8 – Interpretation. 162 | 163 | a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. 164 | 165 | b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. 166 | 167 | c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. 168 | 169 | d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. 170 | 171 | > Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the [CC0 Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/legalcode). Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. 172 | > 173 | > Creative Commons may be contacted at creativecommons.org. 174 | -------------------------------------------------------------------------------- /Conversion_Tools_for_Video_Game_Music.md: -------------------------------------------------------------------------------- 1 | # Conversion Tools for Video Game Music (Focuses on Sequenced Music → MIDI) 2 | 3 | This article introduces conversion tools for various video game music format, mainly focuses on sequenced music. If your best favorite tool is missing, let me know! 4 | 5 | This document is Unlicensed. Please feel free to copy and modify any part of its content as necessary. Credits are preferred but not required. 6 | 7 | 主にゲーム音楽を MIDI, DLS, Soundfont などに変換するツールを紹介しています。Google 翻訳を使って読めばだいたいの内容はわかると思います。 8 | 9 | ## Allround 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
ApplicationAuthorLicenseGUI/CLINote
VGMTransMikezlib LicenseGUIMusic player for sequenced music. MIDI/DLS/SF2 export is available. Various formats are supported with varying degrees of accuracy.
VGMToolboxSnakemeatMIT LicenseGUICollection of small tools with integrated interface. You may want this if you have some general file extraction/conversion tasks (especially when you face to xSF formats in my opinion.)
vgmstreamkode54 and moreISC LicenseGUI/CLILibrary for streamed music formats. My favorite frontend is foo_input_vgmstream, a component for foobar2000.
45 | 46 | ## NES / Famicom 47 | 48 | NES music is usually ripped as [NSF](https://wiki.nesdev.com/w/index.php/NSF) and its extended format [NSFe](https://wiki.nesdev.com/w/index.php/NSFe). NSFe can be turned back to NSF by VGMToolbox, if necessary. 49 | 50 | [Extract DPCM samples from NES/NSF](http://loveemu.hatenablog.com/entry/20080227/nsf_dcm_dump) is possible, but I don't know what approach is the easiest. Is there a good tool for it? 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
ApplicationAuthorLicenseGUI/CLINote
nsf2midiGigoNot Specified (Closed Source)GUIClassic Win32 application. Extra sound chips are supported. Frame-based emulation (i.e. approximately 1/60s resolution with fixed tempo; it's pretty enough for music but you may want more resolution for SFX). Unable to define instrument per duty cycle, sadly.
nes2midi.luagochaMIT LicenseGUI (Lua Console)Lua script for FCEUX. User interface is not very fancy (see my guide). Extra sound chips are not supported. Frame-based emulation. It's worth a try when you couldn't be satisfied with nsf2midi.
78 | 79 | ### Specific Companies / Titles 80 | 81 | In this era, there are no standard for in-game music formats. The music formats of some major games (Mega Man for example) are reversed by ROM hack communities. 82 | 83 | Let me know if there is a fancy resource for them! 84 | 85 | ## Game Boy 86 | 87 | Game Boy music is usually ripped as [GBS](http://www.vgmpf.com/Wiki/index.php?title=GBS). GBS can be turned back to ROM by [GBS2GB](http://www.angelfire.com/nc/ugetab/), if necessary. 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 |
ApplicationAuthorLicenseGUI/CLINote
gb2midi.luagochaMIT LicenseGUI (Lua Console)Lua script for VBA-RR V23. User interface is not very fancy (see my guide). Frame-based emulation (i.e. approximately 1/60s resolution with fixed tempo). GBS2GB required for conversion from GBS.
107 | 108 | ## SNES / Super Famicom 109 | 110 | There are two music formats for SNES. Most games are ripped as [SPC](http://www.vgmpf.com/Wiki/index.php?title=SPC) format. Some other undumpable games are ripped as [SNSF](http://www.vgmpf.com/Wiki/index.php?title=SNSF) format. 99% of tools accept SPC files as input. 111 | 112 | SPC file can be converted to ROM by [SPC2ROM](https://alpha-ii.com/Download/MainOld.html) command-line tool. SNSF file can be turned back to ROM by [snsfopt](https://github.com/loveemu/snsfopt) command-line tool. 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 |
ApplicationAuthorLicenseGUI/CLIExport SamplesNote
spc2midiGigoNot Specified (Closed Source)GUINoClassic Win32 application. Emulation-based (i.e. fixed tempo, pitch detection can be wrong sometimes). Conversion options are fairly adjustable.
split700gochaMIT LicenseCLIYesCommand-line tool to extract SNES BRR samples from SPC file.
SPCToolAlpha-II ProductionNot Specified (Source Code Available)GUIYesAdvanced SPC player/debugger/converter. It looks great despite it's very aged. However, it's unfortunately buggy and MIDI converter is not implemented.
152 | 153 | I'm not satisfied with spc2midi for several reasons. Creating my own converter is one of my dreams since 2016, but I have no progress as of now. 154 | 155 | ### Specific Companies / Titles 156 | 157 | [Loveemu](https://github.com/loveemu) (it's me!) have reversed major music engines developed by a number of companies (collections of disassembly are archived at [vgm-disasm](https://github.com/loveemu/vgm-disasm)). The music parsers are ported to VGMTrans, with some heuristic-based music engine detection. It's worth a try! 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 |
ApplicationAuthorLicenseGUI/CLIExport SamplesNote
VGMTransMikezlib LicenseGUIYesThe music parser is pretty accurate, but it lacks some MIDI conversion features such as pitch bend slider, vibrato, tremolo, etc. (as of 2018).
sg2midValleyBellNot Specified (Source Code Available)CLINoThis converts SPC files from Speedy Gonzales: Los Gatos Bandidos to MIDI. No precompiled binary.
top2midValleyBellNot Specified (Source Code Available)CLINoThis tool converts SPC files from SFC Tales of Phantasia and Star Ocean to MIDI. No precompiled binary.
197 | 198 | ## Nintendo 64 199 | 200 | [USF](https://www.hcs64.com/usf/) is a portable music format for Nintendo 64. USF may contain an N64 save state and/or ROM image. 201 | 202 | USF file can be turned back to ROM by hcs's usf2rom command-line tool. However I don't know where I can download his ripping tools. 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 |
ApplicationAuthorLicenseGUI/CLIExport SamplesNote
N64 Soundbank ToolSubDragUnlicenseGUIYesAble to extract sound data as MIDI/DLS files from ROM. A number of games are supported (despite there is a variety of format differences!)
Seq64sauraenGPLv3CLINoCommand-line tool for Nintendo's Audioseq format. It's integrated to N64 Soundbank tool, so you probably don't need to download and use it separately.
233 | 234 | ## Game Boy Advance 235 | 236 | Most of GBA games uses a standard music engine named MusicPlayer2000 (also known as Sappy) developed by Nintendo. Detailed informations are available at the [Bregalad's guide](http://www.romhacking.net/docs/462/) (and also explained well in the official SDK). 237 | 238 | However, MP2000 is not the only sound driver of GBA. Some games use a custom driver based on MP2000 (Metroid Fusion, Golden Sun, Mario & Luigi: Superstar Saga for example), some other games use a completely different driver such as [GAX](https://www.shinen.com/music/music.php3?gax) (by Shin'En), MusyX (by Factor 5), [Krawall](https://github.com/sebknzl/krawall), SCM3LT, etc. 239 | 240 | [GSF](http://www.caitsith2.com/gsf/) is a portable sound format for GBA. GSF contains a GBA ROM image with an extra header data. GSF can be turned back to GBA ROM by [saptapper](https://github.com/loveemu/saptapper), or you can also use VGMTrans if you don't like a command-line tool. 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 |
ApplicationAuthorLicenseGUI/CLIExport SamplesNote
GBA Mus RiperBregaladNot Specified (Source Code Available)CLIYesInput a GBA ROM, and MIDI/SF2 files shall be given for you. Even PCM channels are supported. Incredible!
GBA Music StudioKermalisLGPLv3GUIYesIntegrated music tool. Good replacement for Sappy. Still in development. Requires Visual Studio (Visual C#) for compiling.
Sappy 2006 mod 17.1Kyoufu Kawa, nagonaMIT LicenseGUIYesIntegrated music tool. Able to export/import MusicPlayer2000 sound data. Not maintained anymore. You must install original Sappy 2006 first, otherwise a wild VB6 error will appear.
VGMTransMikezlib LicenseGUINoNot recommended, as of 2018.
289 | 290 | ## GameCube 291 | 292 | [HCS Forum \- Gamecube Sequence Format?](https://hcs64.com/mboard/forum.php?showthread=55673) 293 | 294 | Sound files can be sometimes compressed/packed. In such a case, you may need an unpacker like [WArchive-Tools](https://github.com/LordNed/WArchive-Tools). 295 | 296 | ### JAudio/JaiSeq (aka. BMS) by Nintendo EAD 297 | 298 | While many researchers had worked on the BMS format, the specification isn't documented very much. You can find some resources from the following topics. 299 | 300 | * [HCS Forum - Gamecube BMS sequence ripper/editor - Design? Language? Existing DAW/sequencer plugin?](https://www.hcs64.com/mboard/forum.php?showthread=44951) 301 | * [HCS Forum - BMS finally figured out!!! BMS to MIDI Converter/Exporter coming soon! BMS Collection Thread~](https://hcs64.com/mboard/forum.php?showthread=37639) 302 | 303 | Here's a list of tools for GameCube BMS. I haven't tried them so I don't know what tool is the best. 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 |
ApplicationAuthorLicenseGUI/CLIExport SamplesNote
VGMTrans (Jasper's fork)Jasper St. Pierre (magcius)zlib LicenseGUIYesFork of VGMTrans that supports GameCube JaiSeq and NintendoWare RSAR.
gctoolsMartin Michelsen (fuzziqersoftware)Not Specified (Source Code Available)CLIYes?Set of tools for reading and translating GameCube files. No precompiled binary.
BMS_DECYoshimaster96, derselbstNot Specified (Source Code Available)CLINoNo precompiled binary.
bms2midCameron Hall (camthesaxman)Not Specified (Source Code Available)CLINoNo precompiled binary.
BMSToolDylan Ascencio (Sage-of-Mirrors)Not Specified (Source Code Available)CLINoNo precompiled binary. Requires Visual Studio (Visual C#) for compiling.
361 | 362 | ### MusyX audio engine by Factor 5 363 | 364 | [HCS Forum - Gamecube MusyX Audio Thread](https://hcs64.com/mboard/forum.php?showthread=39182) 365 | 366 | Here's a list of tools for MusyX. I haven't tried them so I don't know what tool is the best. 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 |
ApplicationAuthorLicenseGUI/CLIExport SamplesNote
amuseAxiomatic Data LaboratoriesMIT LicenseCLIYes?MIDI and SFX sequencer, designed for compatibility with MusyX audio groups.
GCMusyXToolsJoseph Gibbs (soneek)Not Specified (Source Code Available)CLI?No precompiled binary.
musyx-extractNistoNot Specified (Source Code Available)CLIYes (Extraction Only)Sample extractor for GameCube MusyX files. Requires Python interpreter to run.
406 | 407 | ## Nintendo DS 408 | 409 | [SDAT](http://dshack.wikia.com/wiki/.sdat) is the standard archive file format for the official Nitro Composer framework developed by Nintendo. The following file formats can be found in the game that uses Nitro Composer. 410 | 411 | * Nintendo DS (Nitro Composer) 412 | - [SDAT](http://dshack.wikia.com/wiki/.sdat): Nitro Composer Sound Archive 413 | - [STRM](http://dshack.wikia.com/wiki/.strm): Nitro Composer SDAT Audio Stream 414 | - [SBNK](http://dshack.wikia.com/wiki/.sbnk): Nitro Composer SDAT Sound Bank File 415 | - [SWAR](http://dshack.wikia.com/wiki/.swar): Nitro Composer SDAT Wave Archive 416 | - SWAV: Nitro Composer Wave File 417 | - [SSEQ](http://dshack.wikia.com/wiki/.sseq): Nitro Composer SDAT Sound Sequence 418 | - SSAR: Nitro Composer SDAT Sound Sequence Archive (collection for sound effect) 419 | 420 | Unlike GBA, DS games have a filesystem in ROM. If you want to explorer and extract files in DS ROM, there are so many tools to do that. I personally prefer [Tinke](https://github.com/pleonex/tinke), an advanced viewer and editor for files of NDS games, or [ndstool](https://gbatemp.net/download/nintendo-ds-rom-tool-ndstool.29352/) if you prefer CLI. 421 | 422 | [2SF](http://www.vgmpf.com/Wiki/index.php?title=2SF) is the portable sound format for Nintendo DS. As usual, 2SF contains a DS ROM image with an extra header data. 2SF can be turned back to DS ROM by [2sf2rom](https://github.com/loveemu/2sf2rom), or you can also use VGMTrans if you don't like a command-line tool. 423 | 424 | [NCSF](http://www.cyberbotx.com/NCSF/) is another PSF format specialized to Nitro Composer. NCSF contains a SDAT file with no extra header. You can turn an NCSF back to SDAT by xSF2EXE tool of [VGMToolbox](https://sourceforge.net/projects/vgmtoolbox/). 425 | 426 | ### SDAT Tools 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 |
ApplicationAuthorLicenseGUI/CLIExport SamplesNote
VGMTransMikezlib LicenseGUIYesGood for exploring sequenced music (SSEQ/SBNK/SWAR).
NDS Sound ExtractorNintendonNot Specified (Source Code Available)CLIYesProbably the best if you want to convert all files in SDAT at a time.
VGMToolboxSnakemeatMIT LicenseGUIYes (Extraction Only)Includes some nice generic SDAT/2SF tools.
466 | 467 | There are more choices. Try searching what you like the best! 468 | 469 | ### Tools for Digital Sound Elements by Procyon Studio (SMD/SWD) 470 | 471 | [Pokemon Mystery Dungeon Utilities](https://github.com/PsyCommando/ppmdu) and [smd2mid](https://github.com/ipatix/smd2mid) are available. 472 | 473 | Read the [PMD2 research notes by psy_commando](https://github.com/vgmtrans/vgmtrans/issues/48#issuecomment-394045958) for specifications. 474 | 475 | ## Wii, Wii U, Switch, etc. 476 | 477 | Recent Nintendo consoles use formats very similar to Nitro Composer. 478 | 479 | * Wii (NW4R; NintendoWare for Revolution) 480 | - [BRSTM (RSTM)](http://wiki.tockdom.com/wiki/BRSTM_\(File_Format\)): NW4R Audio Stream 481 | - [BRSAR (RSAR)](http://wiki.tockdom.com/wiki/BRSAR_\(File_Format\)): NW4R Sound Archive 482 | - [BRWSD (RWSD)](http://wiki.tockdom.com/wiki/BRWSD_\(File_Format\)): NW4R RSAR Sound File 483 | - BRWAR (RWAR): NW4R RSAR Wave Archive 484 | - BRWAV (RWAV): NW4R RSAR Wave File 485 | - [BRBNK (RBNK)](http://wiki.tockdom.com/wiki/BRBNK_\(File_Format\)): NW4R RSAR Sound Bank File 486 | - [BRSEQ (RSEQ)](http://wiki.tockdom.com/wiki/BRSEQ_\(File_Format\)): NW4R RSAR Sound Sequence 487 | * Wii U (NW4F; NintendoWare for Café) 488 | - [BFSTM (FSTM)](http://mk8.tockdom.com/wiki/BFSTM_\(File_Format\)): NW4F Audio Stream 489 | - [BFSAR (FSAR)](http://mk8.tockdom.com/wiki/BFSAR_\(File_Format\)): NW4F Sound Archive 490 | - BFWSD (FWSD): NW4F FSAR Sound File 491 | - BFWAR (FWAR): NW4F FSAR Wave Archive 492 | - [BFWAV (FWAV)](http://mk8.tockdom.com/wiki/BFWAV_\(File_Format\)): NW4F FSAR Wave File 493 | - BFBNK (FBNK): NW4F FSAR Sound Bank File 494 | - [BFSEQ (FSEQ)](http://mk8.tockdom.com/wiki/BFSEQ_\(File_Format\)): NW4F FSAR Sound Sequence 495 | * Nintendo 3DS (NW4C; NintendoWare for CTR) 496 | - [BCSTM (CSTM)](https://www.3dbrew.org/wiki/BCSTM): NW4C Audio Stream 497 | - [BCSAR (CSAR)](https://www.3dbrew.org/wiki/BCSAR): NW4C Sound Archive 498 | - BCWSD (CWSD): NW4C CSAR Sound File 499 | - BCWAR (CWAR): NW4C CSAR Wave Archive 500 | - BCWAV (CWAV): NW4C CSAR Wave File 501 | - BCBNK (CBNK): NW4C CSAR Sound Bank File 502 | - BCSEQ (CSEQ): NW4C CSAR Sound Sequence 503 | 504 | I haven't tried any tools below so I don't know what tool is the best. 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 |
ApplicationAuthorLicenseGUI/CLIExport SamplesNote
BrawlBoxlibertyernieNot Specified (Source Code Available)GUIYesIntegrated tool for Super Smash Bros. Brawl. Supports a lot of NintendoWare file formats.
VGMTrans (Jasper's fork)Jasper St. Pierre (magcius)zlib LicenseGUIYesFork of VGMTrans that supports GameCube JaiSeq and NintendoWare RSAR.
BRSAR ExtractorAtlasNot Specified (Closed Source)GUIYes (Extraction Only)Unpacker for BRSAR sound archive.
3DSUSoundArchiveToolJoseph Gibbs (soneek)Not Specified (Source Code Available)CLIYes (Extraction Only)Unpacker for BCSAR and BFSAR sound archives. No precompiled binary.
553 | 554 | ## Genesis / Mega Drive 555 | 556 | [VGM format](https://en.wikipedia.org/wiki/VGM_\(file_format\)) is widely used for logging Genesis sound. VGM file can be converted to standard MIDI by [vgm2mid](https://vgmrips.net/wiki/Vgm2mid), but it may not be accurate sometimes since it's kinda old. Also, you can [extract FM synth presets from VGM file](http://loveemu.hatenablog.com/entry/Guide_for_Extracting_FM_Synth_Presets_of_Sega_Genesis) by using [vgm2pre](https://vgmrips.net/wiki/Vgm2pre). 557 | 558 | ### Specific Companies / Titles 559 | 560 | I highly recommend to check for [ValleyBell's MIDI Converters](https://github.com/ValleyBell/MidiConverters), a number of command-line tools for various sound drivers are available. 561 | 562 | ## Sega Saturn 563 | 564 | [seq2mid by Cyber Warrior X: Tool and documentation for the Sega Saturn SEQ format](https://www.romhacking.net/utilities/668/) 565 | 566 | Needs more information. 567 | 568 | ## Dreamcast 569 | 570 | Needs information. 571 | 572 | ## TurboGrafx-16 / PC Engine 573 | 574 | Needs more information. 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 |
ApplicationAuthorLicenseGUI/CLINote
pce2midi.luagochaMIT LicenseGUI (Lua Console)Lua script for PCEjin. User interface is not very fancy (see my guide). Frame-based emulation (i.e. approximately 1/60s resolution with fixed tempo). Conversion from HES/VGM isn't possible?
594 | 595 | ## Playstation 596 | 597 | In-game sound data formats of Playstation are very PC-friendly. Usually, they are designed to be self-contained, so a song set or a sound bank can be extracted as a single file. 598 | 599 | Sony designed standard music format for Playstation. SEQ for music sequence, and VAB for sound banks. VAB is often represented as separate two files, VH (header) and VB (body). SEQ/VAB are widely used, but there are some other formats designed by each developer companies are used as well. 600 | 601 | The data is stored in CD-ROM. You can explore files by PC and you may find a music file so easily, if you are fortunate. Sometimes the data may be archived or compressed. In this case, it will be harder to identify the music data. 602 | 603 | [PSF](http://www.vgmpf.com/Wiki/index.php?title=PSF) is a portable sound format for Playstation. PSF represents a single PS-X EXE. Uncompressed PS-X EXE can be extracted by xSF2EXE tool of [VGMToolbox](https://sourceforge.net/projects/vgmtoolbox/). 604 | 605 | ### How To Find Music Data 606 | 607 | The easiest first step is to drop a PSF file into [VGMTrans](https://github.com/vgmtrans/vgmtrans). It doesn't always work, but it's a good starting point. The next recommendation is to try PSF Data Finder of [VGMToolbox](https://sourceforge.net/projects/vgmtoolbox/), which has more powerful VH/VB search than VGMTrans. 608 | 609 | If no results are given, you may need to save an intermediate dump file which contains the raw sound data, then scan sound files from the file (I will introduce scanning tools later). Here's some example methods for saving the raw dump. 610 | 611 | * Decompress PSF by xSF2EXE tool of VGMToolbox (easy) 612 | * Save a whole RAM image by PS1 emulator, such as [XEBRA](http://drhell.web.fc2.com/ps1/) or [BizHawk](http://tasvideos.org/BizHawk.html) (especially effective for compressed formats) 613 | * Save a whole RAM image by PSF player (requires external memory viewer tool?) 614 | 615 | If all the steps above are not effective, probably you will need an advanced research specific to the game. 616 | 617 | ### Tools 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 |
ApplicationAuthorLicenseGUI/CLISupported FormatsExport SamplesNote
VGMTransMikezlib LicenseGUIVarious (see README)YesVGMToolbox has more powerful VH/VB search. Not supporting the early version of AKAO, as of 2018.
VGMToolboxSnakemeatMIT LicenseGUISEQ/VABYes (Extraction Only)Includes various PSF utilities. I prefer using PSF Data Finder for extracting VAB.
bin2seqAnonymousMS-PLCLISEQ/VAB, SSSQ/SSHD, KCET, SNTP, SQV, SEQQ and more (see Readme.txt)Yes (Extraction Only)Scanning tool for extracting various sound sequence formats.
PGconvtamogamiNot Specified (Closed Source)GUISEQ/VAB and few othersYesClassic Win32 application often used by Japanese researchers.
seq2midValleyBellNot Specified (Source Code Available)CLISEQNoSEQ to MIDI converter with some advanced options, including volume conversion and instrument remapping. No precompiled binary.
seq2midloveemuMIT LicenseCLISEQ and Dragon Quest SSEQNoSimple SEQ to MIDI converter, with no special options.
AKAO2MIDValleyBellNot Specified (Source Code Available)CLIAKAO v1 and v2NoSquare AKAO sequence to MIDI converter. No precompiled binary.
dmfMusloveemuMIT LicenseCLINatsume's PAC Sound ArchiveYesByproduct of creating Hokuto no Ken PSF. Not very user-friendly.
711 | 712 | By the way, [jPSXdec](https://github.com/m35/jpsxdec) is good for extracting audio/video resources. It's [free for non-commercial use](https://github.com/m35/jpsxdec/blob/readme/.github/LICENSE.md). 713 | 714 | TODO: 715 | 716 | * [sssq2mid](https://www16.atwiki.jp/soundfile?cmd=upload&act=open&pageid=6&file=Sssq2mid.7z) (for games developed by Sony) 717 | * [sqv2mid](https://www16.atwiki.jp/soundfile?cmd=upload&act=open&pageid=6&file=Sqv2mid.7z) (for Brave Fencer Musashiden) 718 | 719 | ## Playstation 2 720 | 721 | Try [VGMTrans](https://github.com/vgmtrans/vgmtrans) and [VGMToolbox](https://sourceforge.net/projects/vgmtoolbox/) in the same way as Playstation. That should be enough for you, if the game uses the standard SQ/HD/BD data. Those tool can read [PSF2](http://www.vgmpf.com/Wiki/index.php?title=PSF2), the portable sound format for Playstation 2. 722 | 723 | ## Playstation Portable 724 | 725 | You can extract MID/PHD/PBD files by PSP Data Finder of [VGMToolbox](https://sourceforge.net/projects/vgmtoolbox/). 726 | 727 | PSFP is a portable sound format for Playstation Portable. You may find [further informations about PSFP](https://hcs64.com/mboard/forum.php?showthread=19333&showpage=0#post_48951) on HCS forum. 728 | 729 | ## Retouching Tools 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 |
ApplicationAuthorLicenseGUI/CLINote
MidiSplitgochaMIT LicenseCLICommand-line tool that splits single track into each tracks according to instruments.
SmfExTimeZEXNot Specified (Source Code Available)CLICommand-line tool that flexibily scales timebase and tempo with keeping actual song speed. Usually used for correcting the tempo of MIDI data dumped by emulators.
757 | 758 | ## VST/AU Plug-ins for DAW 759 | 760 | ### Soundfont Player 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 |
ApplicationDeveloped byPlatformPricingNote
sforzandoPlogueWindows, macOSFreePowerful SFZ player with SF2 import feature.
780 | 781 | ### Chip Emulator/Simulator 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 |
ApplicationDeveloped byPlatformPricingNote
chipsynth SFCPlogueWindows, macOS$39.95A bit accurate recreation of the Super Famicom (SNES) unique sound playback capabilities inside an easy to use and powerful virtual synthesizer. The plug-in has a built-in SPC player, which works very well with the instrument editor.
chipsynth MDPlogueWindows, macOS$49.95A bit accurate recreation of the Mega Drive (Genesis) audio capabilities inside an easy to use and powerful virtual synthesizer. The plug-in has a built-in VGM player, which works very well with the instrument editor.
chipsounds (Legacy)PlogueWindows, macOS$958-bit soft synthesizer. Features chips like the NES, Atari ST, ZX Spectrum 128, Nintendo Game Boy, Commodore 64 and VIC-20, Atari 400/800 and 2600.
C700osoumenWindows, macOSFreeSampler that emulates SNES S-DSP. By the way, you may want to check dpcmc from the same author, if you want a NES DPCM converter.
FMDrive and Super PSGAly James LabWindows€10+Virtual synthesizer instruments for Sega game consoles. VST bridge is required for 64bit DAW.
833 | 834 | ### Other Instruments 835 | 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 |
ApplicationDeveloped byPlatformPricingNote
SANA 8BIT VSTMasaki MoriWindows, macOSFree (GPLv3)Simple waveform synthesizer for chiptune, having pitch sweep function, vibrato function and wave scope.
Super Audio CartImpact SoundworksKontakt Player$149Sample library that features eight legendary systems: NES, FC, SNES, GB, 2600, C64, SMS, GEN. Includes standalone SNESVerb plugin. Easy-to-use UI.
Sound Canvas VARolandWindows, macOS$125Virtual instrument of legendary '90s synthsizer. You might want to subscribe Roland Cloud if you want more Roland synths.
KORG Collection - M1KorgWindows, macOS$49.99Virtual instrument of legendary '90s synthsizer. Full bundle of KORG Collection has more synths.
Digital SynsationsUVIWindows, macOS$149Virtual 90's synthesizers instruments. Features the Korg M1, Ensoniq VFX, SY77 and D50.
Proteus VXE-muWindowsFreeVirtual instrument of legendary '90s synthsizer. VST bridge is required for 64bit DAW.
887 | 888 | ## Community 889 | 890 | * [HCS Forum](https://hcs64.com/mboard/forum.php) 891 | * [HCS Discord Server](https://discord.gg/7ddT4pP) 892 | 893 | ## Credits 894 | 895 | * [内蔵音源midi変換まとめ - 【聞き専】内蔵音源の曲データ倉庫【sound file】 - アットウィキ](https://www16.atwiki.jp/soundfile/pages/56.html) 896 | --------------------------------------------------------------------------------