NSF単語

エヌエスエフ
5.2千文字の記事
  • 5
  • 0pt
掲示板へ

概要

NSF (NES Sound Format) とは、ファミコン(NES)のカートリッジ又はディスクシステムディスクからサウンド関係の部分を切り出したもの。ファミコン音源エミュレーションや実機再生での標準規格である。

ファミコン音源による自作音楽(Chiptune)がしばしばNSFの形式で配布されるため、ニコニコではNSFを再生した音楽を使った動画等でこのタグが用いられる。

プレイヤー

NSFを再生するには、単体のNSFプレイヤーを使用するか、メディアプレーヤーにNSF再生プラグインを追加する必要がある。なお、NSFフォーマットは、演奏時間およびマルチトラックNSFの各曲ごとの情報記録しないため、それを補う拡プレイリストフォーマットもしくはtaginfo.tagファイルに対応しているプレイヤーが望ましい。(なお、この欠点を解消するNSFEフォーマットが提唱されているが、普及していない。)

Windows

NSFPlayexit
NSFプレイヤー
version 2.4より、NSF2に対応。
VirtuaNSFexit
単体で動作するシンプルかつ軽量なNSFプレイヤー。ただしプレイリスト非対応。
Winamp + NSF再生プラグイン
Winampは、Windowsプラグインメディアプレイヤー。拡プレイリストに対応している。Winamp用NSF再生プラグインは、Brezza作のNSFplugexitが定番であるが、現在開発が停滞している。現在、実機演奏に最も近いといえるのは、OffGao作のNEZplug++exitであろう。

Mac

Audio Overloadexit
Macでは事実上標準のChiptuneプレイヤー

Linux

残念ながら、各拡全に再生できるプレイヤー現在存在しない。よってWine上で前述のWindowsプレイヤーを使ったほうが良いだろう。以下、参考までに記す。

Gstreamer使用のプレイヤー
GStreamerは、フリー自由)なマルチメディアフレームワークである。GStreamerを使用している代表的なプレイヤーは、Amarok・Rhythmbox・Bansheeが挙げられる。GStreamer Bad PluginsをインストールすることによりNSFを再生できる。
Audaciousexit
GTK+2を用いたXMMS後継のメディアプレーヤー。NSF再生プラグインはプリインストールされている。

作成ソフトウェア

ppmck及びFamiTrackerが代表的である。

ppmckexit
ファミコン音源ドライバおよびMMLコンパイラである。ほとんどの拡が使用可CUIであるためプラットフォームを選ばない。
FamiTrackerexit
Windows用のトラカータイプのNSF作成ソフトである。こちらもほとんどの拡が使用可である。

ファイルのフォーマット構造

NSFの中身は、0x80バイトのヘッダーと、それ以降のプログラムデータによって構成されている。

NSF2より、文字列のエンコディングはUTF-8が推奨(SHOULD)されている。

ヘッダーの詳細は以下のとおり。

アドレス データ 説明
0x00 5 ファイルがNSFであることを示す文字列。 "NESM"+0x1A
0x05 1 NSFバージョン。1もしくは2。
0x06 1 曲数。3曲なら3になる。
0x07 1 NSFを読み込んだときに最初に定する曲番号。2曲から再生させたいときは2になる。
0x08 2 ロード開始アドレスデータはこのアドレスからロードされる。
0x0A 2 初期化アドレス再生前にここで定されたアドレスジャンプする。
0x0C 2 再生アドレス再生時にここで定されたアドレスに何度もジャンプする。
0x0E 32 タイトル文字列の終わりはNULL(0)。
0x2E 32 アーティスト名。文字列の終わりはNULL(0)。
0x4E 32 著作権所持者。文字列の終わりはNULL(0)。
0x6E 2 再生アドレスが呼び出される周期(NTSCモード時)。
1/1000000単位で計算される。通常は「1A 41(60Hz)」が入る。
0x70 8 初期バンク定。全部0ならバンクを使用しない。
ヘッダアドレスと対応するメモリアドレスは以下のとおり。
0x70:8000~8FFF
0x71:9000~9FFF
0x72:A000~AFFF
0x73:B000~BFFF
0x74:C000~CFFF
0x75:D000~DFFF
0x76:E000~EFFF (拡FDS有効の場合は6000~6FFFも含む)
0x77:F000~FFFF (拡FDS有効の場合は7000~7FFFも含む)
0x78 2 再生アドレスが呼び出される周期(PALモード時)。
1/1000000単位で計算される。通常は「20 4E(50Hz)」が入る。
0x7A 1 NTSC/PALモード定。0ならNTSC、1ならPAL、2,3なら両方使う。
0x7B 1 フラグビットが立っていれば、その拡サポートする。
0bitVRC6
1bitVRC7
2bitFDS
3bit:MMC5
4bitNamco106/163
5bitSunsoft5B
0x7C 4 (NSF1)0x00固定
(NSF2)フラグ
0-3bit:0固定
4bitIRQデバイスを有効化
5bit初期化ルーチンからRETされない事を示す。
6bit再生ルーチンを使用しない事を示す。
7bit:NSFeのメタデータを使用する事を示す。
0x7D 3 (NSF1)0x00固定
(NSF2)ROMデータサイズROMデータの後ろにNSFeメタデータが続く。
0x80 ??? 0x7Cの7bitが0の場合、データファイルの終わりまで続く。
0x7Cの7bitが1の場合、0x7D~0x7Fの24bitリトルエンディアン)のサイズ分だけデータが続く。
??? ??? (NSF2)NSFeメタデータ

 

メモリマップ

0000~07FF RAM
0800~1FFF 0000~07FFミラー
2000~3FFF 未使用
4000~4017 ファミコン内蔵音2A03レジスタ
4018~4019 未使用
401A~401B (NSF2)IRQ timer カウンター
401C (NSF2)IRQ timer 有効   bit 0:Activate
401D (NSF2)IRQ timer IRQ応答 bit0:Status / bit 7:flag
401E~5FF7 未使用
5FF6~5FF7 (拡FDS有効の場合のみ)バンクレジスタ
5FF6:6000~6FFF
5FF7:7000~7FFF
5FF8~5FFF バンクレジスタ
5FF88000~8FFF
5FF9:9000~9FFF
5FFA:A000~AFFF
5FFB:B000~BFFF
5FFC:C000~CFFF
5FFD:D000~DFFF
5FFE:E000~EFFF
5FFF:F000~FFFF
6000~7FFF RAM
8000~FFFF ROM
(ただし、拡FDS有効の場合はRAM
4040~4092 (拡FDS有効の場合のみ)FDS音レジスタ
4800,F800 (拡Namco106/163有効の場合のみ)Namco106/163レジスタ
5000~5015 (拡:MMC5有効の場合のみ)MMC5音レジスタ
5205~5206 (拡:MMC5有効の場合のみ)MMC5計算レジスタ
5C00~5FF7 (拡:MMC5有効の場合のみ)MMC5拡RAM
9000~9002
A000~A002
B000~B002
(拡VRC6有効の場合のみ)VRC6レジスタ
9010,9030 (拡VRC7有効の場合のみ)VRC7レジスタ
C000,E000 (拡Sunsoft5B有効の場合のみ)Sunsoft5Bレジスタ
FFFA-FFFB (NSF2)NMI vectorベクタ。NMIを使用する場合にベクタを設定する。
FFFC-FFFD (NSF2)Resetベクタ。リセットを使用する場合にベクタを設定する。
FFFE-FFFF (NSF2)IRQベクタ。IRQデバイスを用いる場合にベクタを設定する。

初期化時の動作

0000~07FF,6000~7FFF(MMC5有効なら5C00~5FF6も、FDS有効なら8000~FFFFも)を0クリアされた後、ロード開始アドレスからデータロードされていく。ロードの際、ヘッダに初期バンク定がある場合、ロード開始アドレスから0xFFFをANDしたアドレスから、バンク0から順にロードされる。

ファミコン内蔵音2A03レジスタは以下のように初期化される。

4000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4010: 10 00 00 00 ?? 0F

その後、アキュームレータ(Aレジスタ)に曲番号(1曲なら0、255なら0xFE)が代入される。
NTSC/PALモード定で両方使用する設定の場合には、XレジスタNTSC動作なら0、PAL動作なら1が代入される。
その後、初期化アドレスジャンプされる。

初期化が終わったあと、定された周期で再生アドレスに何度もジャンプされる。

メタデータ

メタデータは、ROMデータの直後に追加でき、ROMデータ長は、NSFヘッダーの0x7C~0x7Fに24bitリトルエンディアン)で示される。
NSFeのメタデータと同じですが、以下の違いがある。

チャンクの構造は以下表を参照。

オフセット サイズ
0x0000 4  DWORD チャンクのデータサイズ。8Byteのヘッダーは含まない。
0x0004 4  fourCC チャンクの文字ID
0x0008 ---- チャンデータ

NSF2で使用しないチャンクを除き、以下のチャンクが使用できる。各チャンクの詳細はNSFeの規格を参照。

NSFサンプル

このサンプルは、「に~っこにっこどうが」を演奏する。

このサンプルの場合、0x80~0xAEまでがプログラムで、0xAF~0xC2までが音楽データになっている。

0000: 4E 45 53 4D 1A 01 01 01 00 80 00 80 0C 80 4E 69 NESM..........Ni
0010: 63 6F 56 69 64 65 6F 20 2D 20 4F 66 66 69 63 61 coVideo - Offica
0020: 6C 20 54 69 6D 65 20 53 69 67 6E 61 6C 00 4E 69 l Time Signal.Ni
0030: 63 6F 20 4E 69 63 6F 20 44 6F 75 67 61 00 00 00 co Nico Douga...
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 30 ..............20
0050: 30 37 20 4E 69 77 61 6E 67 6F 00 00 00 00 00 00 07 Niwango......
0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1A 41 ...............A
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0080: A9 00 85 00 85 01 A9 81 8D 08 40 60 A5 01 30 FB ..........@`..0.
0090: C6 00 10 F7 A5 01 AA BD 2F 80 30 10 85 00 E8 BD ......../.0.....
00A0: 2F 80 8D 0A 40 A9 00 8D 0B 40 E8 8A 85 01 60 34 /...@....@....`4
00B0: 38 0C 00 08 47 08 3F 08 00 08 38 18 3F 10 47 01 8...G.?...8.?.G.
00C0: 00 FF                             ..

関連動画

関連項目

関連リンク

【スポンサーリンク】

  • 5
  • 0pt
記事編集 編集履歴を閲覧

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

NSF

5 ななしのよっしん
2011/05/25(水) 17:13:26 ID: RT5Yzg1O4C
なぜプレイヤーリストにKB Media Playerが入ってない・・・。

デフォルトでNEZplugによるNSF再生サポートしているからwinampのように跡付けする必要はないし、
プレイリスト対応だし、
NESサウンドであるNSFのみならずSNESサウンドであるSPCにもデフォで対応してるし、
そもそも「taginfo.tagファイルに対応しているプレイヤーが望ましい」のTagファイル仕様の出所はKB Media Playerだし。

入ってないのが理解不能レベルなので、ぜひ追加してください。
👍
高評価
0
👎
低評価
0
6
◆e/Q/OffGao 2011/05/26(木) 14:39:04 ID: GLHGt0i3wc
>>5
そんな終わったプレイヤー・・・3年以上更新されておらず、更新される気配もないのに。
👍
高評価
0
👎
低評価
0
7 ななしのよっしん
2012/03/02(金) 02:32:07 ID: xpg0lJin78
そんなこといったらNSFなんてry

特にバグがないから更新されなくてもどこにも問題ないだろ
👍
高評価
0
👎
低評価
0
8 ななしのよっしん
2012/09/10(月) 11:22:32 ID: LnLMD6VKX0
>>6
更新されたみたいだぞ
👍
高評価
0
👎
低評価
0
9 ななしのよっしん
2013/02/19(火) 03:47:56 ID: ic0LtvtQ0l
かしこのきつい書き方するとこ見ると本気でKBplayer嫌っているんですかね・・
それでもサポートは続けてくれているけども。
個人的にはリクエスト番号をすぐに直接定して再生できないのがめんどくさすぎて
Winampでnezplug使うのはメモリの観覧やチャンネルマスクなどの拡張機能使うときくらいだなー。
👍
高評価
0
👎
低評価
0
10 ななしのよっしん
2013/03/22(金) 05:23:42 ID: CkmpRYzMX7
遠回しにの作ったやつを使えって言ってるんだろ
👍
高評価
0
👎
低評価
0
11 ななしのよっしん
2013/04/07(日) 13:16:29 ID: +m+obE4ZG5
満足レベルで拡に対応しているプレイヤーなら、
NSFPlayも他とは微妙に違う味わいがあって良い感じ。
実機基準ならどちらが正しいのかはちょっと判断しかねる

といっても日本語対応でVirtuaNESセットVirtuaNSFの方が、
見つけやすく扱いやすいのでわざわざ探す必要はいかも。
公式サイトzipも接続しにくい(ファイル名で検索すればOK)

一曲ループより順番に流してくれる方が良いひとにもおすすめ
👍
高評価
0
👎
低評価
0
12 ななしのよっしん
2014/01/22(水) 16:35:56 ID: GTa+oeXkNC
virtuansfmck wikiの「NSFプレイヤー」でDLするのが良いと思う
HP管理人と連絡が取れないとかで作者がそこに置いてる
👍
高評価
0
👎
低評価
0
13 ななしのよっしん
2015/04/24(金) 20:53:15 ID: O59wWdGVKP
VirtuaNSF現在バージョン1062)だと、軽くローパスフィルタがかかるようになっているな。
1043あたりとべると結構違う。より実機の音に近づいたということかな。
👍
高評価
0
👎
低評価
0
14 ななしのよっしん
2018/12/24(月) 13:30:11 ID: SGO/XOrPM9
【聞き専】内蔵音の曲データ倉庫【sound file
https://www16.atwiki.jp/soundfile/exit
👍
高評価
0
👎
低評価
0