注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

NSF(NES音乐文件)的分解和合并  

2009-03-28 22:44:22|  分类: FC开发记录 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

NSF文件,我这里说的NSF文件是FC(任天堂)迷所说的纯音乐文件,不是网上流行的网络数据库文件。

 

本文只针对由FamiTracker生成的nsf文件。由于别的程序生成的nsf文件结构不同。这是因为nsf文件内部是由程序和数据组成的,不同的程序生成的nsf程序也不同,导致数据的组成和位置也不相同。

1。NSF文件的分解:

它能分成音乐数据部分和程序部分。而且音乐数据部分总是在程序部分前面。

其中程序记录了音乐数据的首地址。通过对分解出来的程序文件的比较分析,就在最后2字节(16bit)记录了音乐数据的首地址。

先来看nsf的文件头,记下08-09和0A-0B的数值。

-------------------------------------------------------------------------------------------------

例1  nsf的文件头,08-09和0A-0B的数值如下表

 08 09  0A  0B 
 CF AA  00  B0 

将之当成地址来记录,即(从左到右)先是低位地址,后是高位地址

但我们书写时要先写高位,再写低位。即本例记为

08-09 :AACF

0A-0B:B000

-------------------------------------------------------------------------------------------------

NSF分解就按下表地址来分解即可。

设 x 为08-09的地址值,y 为0A-0B的地址值。(大写字母为16进制常数,小写为变量)

 数据名称  长度  在游戏机RAM中的地址  在NSF文件中的地址
 起始  终止  起始  终止
 音乐数据  (y-1)-x  x  y-1  80  (y-1)-x+80
 程序  0FCC  y  y+0FCC  y-x+80  y-x+80+0FCC

 

就是算出 (y-1)-x+80,就行。

我们将音乐数据定为BIN文件,程序定为PRG文件。

将从“起始”到“终止”拷贝出来,做成单独的文件就成了。

 

2。NSF文件的合并:

如果你手上只有BIN文件,和一个NSF文件,(要求这两个都是由FamiTracker生成的)

目的是做一个能演奏该BIN文件的NSF文件,本文只说按原方式合并。

你先从NSF文件中分解出一个PRG文件。FamiTracker的程序一般在RAM的B000开始,也就是y值。

用16进制文件编辑器打开BIN文件,记录下最后一位的地址,这个地址就是BIN文件的长度。

NSF分解就按下表地址来合并即可。

设 z 为BIN文件的长度

 数据名称  长度  在游戏机RAM中的地址  在NSF文件中的地址
 起始  终止  起始  终止
 音乐数据  z  (AFFF-z) 或者(y-1-z)    AFFF  或者(y-1)  80  z+80
 程序  0FCC  B000 或者 y  BFCC 或者 (y+0FCC)  z+80+1  z+80+1+0FCC

 

 先借用NSF的文件头,如果音乐数据比较特殊,要按文件头的格式书写。

NSF文件头的格式见http://nicotine.knight.blog.163.com/blog/static/26926112200922854455969/

08-09 写上 (AFFF-z)的值 (如果y不等于B000,就要写上(y-1-z)的值)

0A-0B 写上 B000 (如果y不等于B000,就写上y值)

书写的情况就按例1的方式写回去就行。

按文件头、音乐数据(BIN)、程序(PRG)的顺序组合成一个新文件。

最后,在程序的最后2字节必须改成( AFFF-z )的值。因为这样才能引导程序去读音乐数据。

  评论这张
 
阅读(1581)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017