|
PSF (Portable Sound Format)[可移植声音格式] 规范 v1.5(1)
----------------------------------------------------------------------------- PSF (Portable Sound Format){可移植声音格式} 规范 v1.5 by Neill Corlett ----------------------------------------------------------------------------- 绪论 ------------ PSF 是把 "NSF", "SID", "SPC" 和 "GBS" 的功能性带给了次时代家用机{next-generation consoles}. PSF 利用每一个游戏的原始的音乐驱动{设备?}代码完美而可信回放音乐序列, 而且尺寸极佳{size-efficient}{还是太大}. 一般的方法是 一个 PSF 文件包含一个 用zlib压缩过(zlib-compressed) 的程序, 这个程序如果能在真实的家用机上执行, 能简单的回放音乐. 想知道有哪些改变, 请参看底部的本文修正历史. ----------------------------------------------------------------------------- 基本文件结构 -------------------- 每个 FSF 文件都有相同的基本结构, 下面描述. 不但保在 PSF 文件中连接到的任何大于一字节(byte)的数据. 练习适当的谨慎. {翻译的垃圾呀,Tx=xT} - 首先 3个字节: ASCII字符: "PSF" (大小写敏感) - 然后 1字节: 版本字节 版本字节用来决定 PSF 文件的类型. 它完全不会影响到文件的基本结构.{!不会影响哟!} 当前公认的版本字节是: 0x01: Playstation (PSF1) {PS} 0x02: Playstation 2 (PSF2) {PS2} 0x11: Saturn (SSF) [试验中] {SS 土星哟!!} 0x12: Dreamcast (DSF) [试验中] {DC!!} 0x21: Nintendo 64 (USF) N64 [保留] 0x41: Capcom QSound (QSF) {CPS1-QSound, CPS2-QSound, CP-ZN1-QSound, CP-ZN2-QSound, 还有么??} - 然后 4字节: 预留空间的大小 ®, little-endian 无符号长整形 {little-endian: 低位放低字节, 高位放高字节(??对么??). 例如 x86 系列的内存数据格式. 相对应的 68K 就是big-endian.} - 然后 4字节: 压缩过的程序长 (N), little-endian 无符号长整形 这个长度是程序{program data}压缩{_after_}后的长度. - 然后 4字节: 压缩过的程序的 CRC-32 值, little-endian 无符号长整形 {CRC-32 32位循环冗余校检} {!! CRC-32 !!又是它,Tx=xT最近就是它搞不定.} 这是程序{program data}压缩{_after_}后的 CRC-32 值. 这个数值必须强制填充, 作为一个 PSF 文件如果这个数值不匹配就意味着是损坏的. - 然后 R 字节: 预留空间 如果 R 是 0 字节则为空 - 然后 N 字节: 压缩过的程序, 由 zlib 压缩格式. {compress() 为虾米带(),说不定是个 zlib 的函数.记下来.} 如果 N 是 0 字节则为空 然后的数据是可选的, 可以省略: - 然后 5字节: ASCII字符: "[TAG]" (大小写敏感) 如果这 5字节不匹配, 则剩下的部分当作无效的, 将被丢弃. - 文件的剩余部分: 没有压缩的 ASCII 标签{TAG} 数据. 如果剩下的数据超过 50,000 字节, 那 标签 数据可以被切断, 也包括切除文件本身的多余数据. 这个设计故意的. 为将来的兼容性考虑, 标签编辑器和压缩器可能会假定 任何 PSF 文件都使用这个基本结构.
|