存档在 ‘计算机技术’ 分类

C#严格的类型要求

2005年2月7日

C#中不能进行隐式类型转换,必须用转换函数来进行。
还有声明过了的变量被赋以空值的话,变量将得到空值,也就是说变量仍然没有被定义,不能调用该变量的所有方法和属性。
比如:
string c_Year=Request.QueryString["log_Year"];
如果不存在查询字符串“log_Year”,那么c_Year将得到null(即空值),而不是”"(即空串),换句话说,c_Year不会隐式的将null转化为”"。C#中不能进行隐式类型转换,必须用转换函数来进行。
还有声明过了的变量被赋以空值的话,变量将得到空值,也就是说变量仍然没有被定义,不能调用该变量的所有方法和属性。
比如:
string c_Year=Request.QueryString["log_Year"];
如果不存在查询字符串“log_Year”,那么c_Year将得到null(即空值),而不是”"(即空串),换句话说,c_Year不会隐式的将null转化为”"。

SQLServer中ASPNET用户权限的设置

2005年2月3日

数据库设计的时候,不应该将aspnet设置成可以访问所有的数据库的用户,
而要针对每个应用程序设置不同的用户,这样就可以将每个应用程序对
数据库的访问限制在自己的数据库范围内,否则,
应用程序之间可以利用共同的aspnet帐户来访问相互的数据库从来造成危险。数据库设计的时候,不应该将aspnet设置成可以访问所有的数据库的用户,
而要针对每个应用程序设置不同的用户,这样就可以将每个应用程序对
数据库的访问限制在自己的数据库范围内,否则,
应用程序之间可以利用共同的aspnet帐户来访问相互的数据库从来造成危险。

关于Application和Session

2005年2月1日

Application和Session的事件捕捉函数是
    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        '' 在应用程序启动时激发
    End Sub
Application和Session的事件捕捉函数是
    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' 在应用程序启动时激发
    End Sub

    Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' 在会话启动时激发
    End Sub

    Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
        ' 在每个请求开始时激发
    End Sub

    Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
        ' 尝试对使用进行身份验证时激发
    End Sub

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ' 在发生错误时激发
    End Sub

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' 在会话结束时激发
    End Sub

    Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
        ' 在应用程序结束时激发
    End Sub

值得注意的是这里与asp中不同,asp是Application_[color=Red]on[/color]Start()

NES 技术/模拟器/开发 FAQ

2005年1月24日

NES 技术/模拟器/开发 FAQ
(简称 ”NES Tech FAQ”) 
原文版本 1.4, 作者为 Chris Covell (chris_covell@yahoo.ca) 最后更新日期为 2002 年 1 月 18 日. 

中文版版本 1.4.0.66, 翻译者为 Blue Potato (bspotato@yahoo.com.cn) 最后更新日期为 2004 年 7 月 17 日. NES 技术/模拟器/开发 FAQ
(简称 ”NES Tech FAQ”) 
原文版本 1.4, 作者为 Chris Covell (chris_covell@yahoo.ca) 最后更新日期为 2002 年 1 月 18 日. 

中文版版本 1.4.0.66, 翻译者为 Blue Potato (bspotato@yahoo.com.cn) 最后更新日期为 2004 年 7 月 17 日. 

写作目的
本文的写作目的是为了回答对 NES 系统好奇的人们经常问到的关于 NES/Famicom 的技术、NES 模拟器和 NES 开发的问题. 本文不是 NES 的权威文档; 更恰当的说, 它是研究散布于互联网上的其他文档的出发点. 需要注意的是, 本文并不仅是对于陈旧技术的讨论. 我将我的观点引入一些有争议的问题. 如果你对此有疑问, 就自己写一篇缺乏生动和幽默的文档. 然后在 Microsoft 找一份工作, 你将会非常完美的适合这份工作. Nyuk Nyuk. :-) 
你应当注意到了, 因为本文有我自己完成, 文中的语法和拼写都使用的是标准的加拿大英语 (standard Canadian English) . 所以, 如果你喜欢将 ”colour” 写为 ”color”, 或者你喜欢将 ”while” 写为 ”whilst”, 或者即便你习惯将 ”spelled” 写为 ”spelt”, 忍受一下吧. 这只是我的方法. 

——————————————————————————–
目录

基本问题 

NES 使用什么 CPU? 
NES 能同时显示多少中颜色? 
NES 的分辨率是多少? 
为什么 NES 会降速或闪烁? 
内存镜像是如何工作的? 为什么有很多内存镜像? 
什么是 NES 的停机芯片 (CIC), 它是如何工作的? 
怎样翻译 NES 游戏? 
所有 NES 游戏中最大的是哪个? 
最小的 NES 游戏是什么? 
怎样才能得到原型 (prototype) NES 卡带? 
硬件 

如何打开 NES 卡带? 
能够禁止停机芯片吗? 
NES 和 Famicom 兼容吗? 
NES 和 Famicom 的硬件一样吗? 
怎样在北美/欧洲使用日版 Famicom? 
NES 和 SNES 兼容吗? 
NES 和 Gameboy/GBC 兼容吗? 
老式 (toaster) NES 和新式的顶部读取 NES 之间有什么区别吗? 
Famicom 和 NES 的控制器通用吗? 
SNES 和 NES 的控制器通用吗? 
怎样从 NES 中获得 RGB 信号? 
能让顶部读入的 NES 输出 A/V 信号吗? 
NES 能够输出立体声或单独的声道吗? 
什么是 Famicom 磁碟系统 (Disk System) ? 
金手指 (Game Genie) 如何工作? 
NES 中的电池可以持续多长时间? 
可以在不清除掉 RAM 中存储信息的条件下更换电池吗? 
NES 上的扩展接口是用来干什么的? 
模拟 

模拟是非法的吗? 
Nesticle… 
怎样才能拷贝/备份 NES 游戏? 
怎样才能把 X 游戏拷贝到卡带上? 
可以制作/购买通用型 NES 卡带吗? 
我想做模拟器. 应当从那里入手呢? 
¥?#181; a?3 £ee+, g0+ an¥ ROMz +?g?v3 m3? 
怎样才能把 .FDS 文件读入我的模拟器? 
什么是 iNES 的文件头? 
什么是 UNIF? 
有 iNES < - > UNIF 转换程序吗? 
什么是 .IPS 补丁? 怎样才能使用它? 
什么是 NSFs? 
如何分离 NSFs? 
程序设计 

NES 游戏用什么语言编写, C, BASIC 或者其他语言? 
怎样才能开始编写 NES 程序? 
How do the NAME table, ATTRIBUTE table, and PATTERN table all fit together? 
How are NES graphics laid out? 
How does palette mirroring work? 
How does PPU mirroring work? 
How does sprite 0 hit detection work? 
What is VBlank and what is HBlank? 
How many scanlines are in VBlank period? 
What's up with $2005/2006? 
How can I get a stable background in my demo? 
Why is there graphics glitching when you change $2005 or $2006 mid-screen? 
Is the NES palette RGB or what? 
How do I get an accurate palette then? 
What is the right register value for black in the palette? 
What are the colour emphasis bits? 
What is the monochrome mode in the NES? 
What are bus conflicts? 
Do I enable interrupts (CLI) in my demo? 
How can I make music for my demo? 
Why does my demo work in an emulator, but not on a real NES? 
How can I test my demo on a real NES? 
How does the NES produce sampled sounds? What bit size are they? 
How does $4011 work? 
Why does my demo's timing mess up when a DMC sample is playing? 
What's better, writing to SPR-RAM directly, or using DMA? 
Thank-Yous 
基本问题 
Top

[color=Red]NES 使用什么 CPU? [/color]
它的 CPU 是基于 6502 NMOS 系列的 8 位处理器. 由 Ricoh 制造, 名字是 RP2A03G. 它的指令集并不包括任何 CMOS 的 ”STZ” 指令, 更重要的是, NES CPU 没有十进制工作模式. 你可以任意设置和清除十进制标志, 但是任何 NES 上的算法指令都将以基数为 16 来计算. 定制的 NES CPU 内建 5 条不同的音频通道. 

[color=Red]NES 能同时显示多少中颜色? [/color]
一般来说, NES 可以显示 13 种不同的背景色, 和 12 种不同的活动块色 (挺拗口的, 原文是 ”sprite colours” – 译注), 总共每次同屏 25 色. 然而, 使用 PPU 欺骗技术 (PPU trickery), 可以一次显示 NES 的调色板中的全部 64 色. (如果你将颜色强调位 (Colour Emphasis bits) 像 PPU 欺骗技术一样使用, 我猜你会说你能一次同屏最大显示 512 色. 但是那需要将物体拉伸. 举例来说, 那像是调色板块之间的一些副本.) 总之, 就让我们认为一般来说最大颜色数目是 25 色, okay? 

[color=Red]NES 的分辨率是多少? [/color]
NES 的分辨率 是 256×240. 许多年来, 人们都认为 NTSC NES 的分辨率低于 PAL NES, 于是许多模拟器只显示 256×224. 这对于许多显示屏或电视机是正确的, 最顶部和最低部各有 8 线被切掉了; 然而这是显示设备的机能, 不是 NES 所必需的. 在我的显示器上, 使用我的 NTSC NES, 我可以看到从第 8 到第 240 条扫描线 (有附加的 3 条) . 一般来说, NES 输出第 233-240 的全部扫描线 (曾经被认为是隐藏的) . 最顶部的 8 条依旧假设为是被隐藏的, 但不一定是. 例如, 当我的录像机录下 NES 的显示时, 先前的 4 条线就可见了. PAL NES 显示全部的 240 条扫描线, 不存在上述的问题. NTSC NES 依旧有些不明确. 

最后一条是 (并非有意的双关语) (原文是 ”The bottom line (no pun intended) is” – 译注), 如果制作一个模拟器, 你应当提供是否显示顶部和底部的各 8 条扫描线的选项. 如果你写 NES 的 demo 或者游戏, 你应当假设玩家也许能够看到你放在屏幕最先和最后的那些行的东西. 

[color=Red]为什么 NES 会降速或闪烁? [/color]
NES 并不是自动降速或闪烁. 事实上, 原因是游戏变得太复杂了, 过多的物体被引入到显示区域, 使用一帧的时间 (1/60 秒) 无法计算一帧的行为了. NES CPU 的速度大约是 1.79Mhz, 对于某些计算来说并不足够快. 事实上, 如果计算溢出到下一帧, 游戏时常会出些小故障或定住. 于是, 程序员会将游戏速度变慢以将连续的帧之间的计算分割. 

闪烁一般是一条水平扫描线上有太多的 sprite 的结果. NES 能够在同一线上最大显示 8 个 sprite. 如果超出了, PPU 只是简单的不显示他们. 于是, 程序员就需要在显示一个个的 sprite 集合之间进行转换. 这是通过一个好用的算法 ”OAM Cycling” 来处理. 由于使用了 OAM 算法, sprite 可能会闪烁 (比如许多 Konami 游戏), 或者以水波的效果取消 (一些游戏中) . 

[color=Red]内存镜像是如何工作的? 为什么有很多内存镜像? [/color]
6502 CPU 只有 16 位地址总线. 这就意味着它每次只能访问 ROM 或 RAM 中最大 65535 字节. NES 被设计只能访问那么多 ROM 中的一半. 由于程序员想要有更复杂的游戏, 他们需要一种方法以将游戏大小扩展超过 32K ROM. 因而, 内存镜像就是将不同的程序代码块转换入 CPU 可访问的 32K ROM 的设备. 

在增加地址空间后, 许多现代内存镜像确实增加了游戏的可用角色图形数目, 以及如何把它们连接起来. 第一个改变图形的镜像能够进行每次 8K 的转换. 然而, 后来的镜像允许游戏能够进行 CHR ROM 中更小部分的交换, 进行更多的背景动画. 另外, 许多游戏公司推出了他们自己的支持 IRQ 计时器的镜像, 允许 PPU 执行 trick. 一些镜像还有附加的音频芯片, 以增加游戏中的音乐复杂度 (只有 Famicom) . 

于是, 简单得说, 内存镜像允许程序员突破 NES/Famicom 内在的限制. 

[color=Red]什么是 NES 的停机芯片 (CIC), 它是如何工作的? [/color]
Nintendo 非常贪婪, 他们想以要求开发者在开发 NES 游戏前先获取受权的方式来获得最大利益. 为了使这种做法有效, 他们在 NES 游戏机中安装了一个芯片, 用这个芯片监测 NES 卡带中的另外一个类似芯片. 然后这两个芯片只见建立一个通讯协议. 如果没有这个协议, NES 游戏机将不会出现重启模式 (reset mode) . 因为只有 NES 出售这种停机芯片, 开发者除了选择从 Nintendo 购买这种芯片 (通过授权) 以外, 几乎没有其他的选择, 否则他们就需要找出禁止停机芯片工作的方法, 这就是大多数未被授权的开发者所作的. 同样存在区域性停机. 存在欧洲用的停机芯片, 也存在亚洲用的. 一般来说, 美国的 NES 游戏/系统与亚洲/欧洲的游戏/系统不兼容, 除非你禁止了停机芯片. 

我不认为一般人真正了解 CIC 通讯协议的细节, 但是自从有办法永久禁止那个芯片, 我不再认为那些细节很重要了. 据我所知, 新生产的 NES 游戏机不再有停机芯片. Famicom 系统也没有停机芯片. 

[color=Red]怎样翻译 NES 游戏? [/color]
哈. 我在这方面并不是专家, 但是现在问到了. 如果你进行翻译的语言使用同样的字母表, 那就没有任何问题. 如果你翻译的语言使用不同的字母表, 你需要建立自己的字库 (或者使用别人的) . 你应当非常熟悉源语言和目标语言, 并且将该游戏爆机, 以获得游戏中全部/尽可能多的文本. 第一步是搜索文本在 ROM 中的储存位置. 如果原文是日语, 你就需要自己按照文本/字符映射表进行查找. 如果原文是英语, 你应当使用相关字符搜索程序搜索文本, 如果他没有使用 ASCII 字符映射表的话. 如果你确定了游戏中的字符串储存的位置 (或者你确定了被使用文本压缩方案), 你就可以开始翻译文本了, 当然要保证不能覆盖游戏中的非文本部分. 

也许你发现翻译后的文本的大小与原文不同. 这就意味着你将需要改变游戏中的文本指针 (也许现在就需要) 以映射到修改后的文本位置. 翻译是需要许多不同技术的任务. 多看一看互联网上有关翻译的指南. 

[color=Red]所有 NES 游戏中最大的是哪个? [/color]
据我所知, NES 上最大的游戏是 Dragonquest 4 / Dragon Warrior 4. 他们的程序 ROM 大小是 1mb. 同样, 日版游戏 Metal Slader Glory 有 512K PRG 和 512K CHR ROM, 加起来也是 1mb. 一些盗版/未授权的 Famicom 游戏也非常大. 

[color=Red]最小的 NES 游戏是什么? [/color]
虽然 iNES 镜像格式认为 16K PRG ROM 为最小的, 但是事实上有一些 8K 游戏, 比如 Galaxian. 对于 NES 游戏或 demo 的大小没有确切的最低限制, 但是为什么要把游戏做得那么小呢? 

[color=Red]怎样才能得到原型 (prototype) NES 卡带? [/color]
事实上, 并不是你在寻找原型卡带; 而是他们在寻找你. 认真地说. 原型是非常罕见的, 只能在世界的某些地方找到. 如果你确实是在某些不知道的地方 (我不想给他起名字, 因为也许会冒犯一些人), 你可能无法在当地的跳蚤市场找到原型. 但是谁知道呢? 也许你能? 

只需要去你当地的当铺, 旧货店, 跳蚤市场, 和 garage sales. 也许有一天你也会发现原型. 我也没有任何原型 NES 游戏, 除非你把我现在有的也算在内. 呵呵. :-) 

——————————————————————————–
硬件 
Top

[color=Red]如何打开 NES 卡带? [/color]
有一些方法可以打开. 如果你的卡带使用老式的扁头螺丝, 那么只需要一个螺丝刀, 拧开它. 然而, 大多数游戏卡带使用 3.8mm ”Inverse Torx” 类型螺丝, 这类螺丝使用的螺丝刀并不容易找到. MCM Electronics (http://www.mcmelectronics.com/) 出售这种螺丝刀. 它的编号是 22-1145. MCM 同样出售多种 4.5mm 型号的螺丝刀 (22-1150), 可以用来打开 SNES, 等等. 注意, 不要让 MCM 的笨蛋在运输是抢劫了你! 

还有其他的办法. 可以用一个热的烙铁 (要小心了!) 放在螺丝钉的顶部, 然后轻轻的拉开盒子. 这样做也许会通过螺丝钉融化塑料来打开塑料盒. 然后可以用一个小扁头螺丝代替以前的螺丝. 恩, 另外, 一个我很早以前使用的办法是用一个非常硬的缝衣针或者图钉, 然后用它们的末端通过对螺丝钉的一个凹槽施加压力来慢慢地松动螺丝钉. 

最后, 其他的方法是使用你所有的力量来打开卡带 (或用一些坚固的工具) . 虽然要小心; 因为塑料片的碎片最终可能进入你的喉咙…我们需要有在标题上写上另外一个安全警告: ”NINTENDO 杀死了我的儿子!!! 卡带撕裂了他的脖子!” 我们不希望这样做. ;-P 

[color=Red]能够禁止停机芯片吗? [/color]
当然. 简单的方法是: 在 NES 电路板上 (只有老式 NES) 找到标有 ”CIC” 的芯片, 然后切断 #4 针脚 (要清楚你再做什么), 然后把它接地 (同一块芯片的 11-15 号针脚也一样) . 

一篇关于如何禁止停机芯片的完整文档是由 Mark Knibbs 所写, 可以在互联网上一些类似 nesdev.parodius.com 的地方找到. 

[color=Red]NES 和 Famicom 兼容吗? [/color]从任何目的和意图来说, 是的. 使用恰当的转接器, 可以在 NES 上玩 Famicom 的游戏, 也可以在 Famicom 上玩 NES 的游戏. 只需要记住 NES 用转接器有 72 针脚; 而 Famicom 用的是 60 针脚. 

有些需要注意的是: 由于 Famicom 使用内建声音芯片, 所以游戏卡中的声音不通过 NES 传输. 同样, 如果转接器连接部分不是非常干净, 或者没有接好, 那么一些转接器将会抑制特定的扫描线或 IRQ 定时器周期. 最后, 如果你是用转接器在 Famicom 上玩 NES 游戏, 那么这样拼合起来的游戏机中的金手指也许不会工作. 金手指也许不适合转接器接口, 或者在游戏启动的时候有很难听的声音. 

[color=Red]NES 和 Famicom 的硬件一样吗? [/color]
从软件的角度上说, 一样. 我不知道一个游戏如何检测自己是在美版系统还是在日版系统上运行的, 除非能够监测是否有麦克风或者在 2 号手柄上是否存在 Start 和 Select 按键. 即便这样, 新样式的 AV 输出 Famicom 使用与 NES 同样的可分离, 可互换的手柄. 

从硬件的角度上说, 有一些小的差别. 在 Famicom (老式) 上, 控制器是不可分离的, 并且存在可以接第三个手柄或其他输入/输出设备的接口. 这个借口也可以作为扩展接口使用 (在 NES 游戏机底部可以发现) . 2 号手柄内置一个可调音量的麦克风, 而且没有 Start 和 Select 按键. 老式 Famicom 只能以 RF 射频方式连接电视. Famicom 没有停机芯片, 所以卡带只有 60 脚. 为了允许内置音频芯片对 Famicom 音频进行混音, 卡带接口也进行音频的输入和输出. NES 和 Famicom 有一致的关于样本声音的音频电路. NES 和 Famicom 都可以通过δ调制通道输出样本声音, 以及未经加工直接输出样本声音. 这就很清楚了! 

新型号的 Famicom 使用与 NES 一样的手柄 (经过美化改进的) 以及一样的手柄接口. 就现在来说, 新型号的 Famicom 只有 AV 输出. 除了这些, 新型号的 Famicom (几乎) 完全兼容旧型号的 Famicom 所使用的设备. 

[color=Red]怎样在北美/欧洲使用日版 Famicom? [/color]
这是个好问题, 但多少有些狡猾. 最重要的是, 不要把 NES 的变压器在 Famicom 上使用!!! NES 的变压器输出是 9v AC, 而 Famicom 需要的是 9v DC. 在一些地区, 你需要找到合适的变压器 (9/10v Dc, 850MA, Negative Tip 挺好) . 

如果你用的是只有 RF 输出的老式 Famicom, 你需要找到一个有模拟调制的老式电视 (也许是 UHF), 或者对 Famicom 进行改造, 是它能直接输出音频/视频信号. 通过 RF 将 Famicom 接到一个试验电路, 然后就可以开始查找电视机里面它的信号了. 我发现有时 Famicom 信号在北美 3 频道和 4 频道之间; 有时在 UHF 频道. 你也可以这样做, 或者, 如果你擅长电子技术, 直接在 Famicom PCB (电路板) 上查找 (很弱的) A/V 信号. 

新版的 Famicom 变得简单了. 你需要同样的 9v DC 变压器, 和一个 SNES/SFC 多 AV 输出线. 多 AV 输出线直接插在 AV Famicom 的后部. 

[color=Red]NES 和 SNES 兼容吗? [/color]
几乎不兼容, 但不是绝对的. 为什么 Nintendo 不保证完全的兼容, 这对我来说依旧很神秘. (好的, 并不全是个秘密; 贪婪是原因之一.) 虽然 SNES 的 65816 处理器 (不管怎样说) 都向后兼容 6502 的软件, 但是 SNES 上的图形和声音处理硬件却不直接兼容. 虽然可以稍微修改小型 NES ROM 到可以在 SNES 上工作的 SMC 格式, 但是那需要通过对不同寄存器的写入进行手工修改. 不能将未修改的 NES 游戏运行在 SNES 上. 

然而存在一种叫做 TriStar 或 Super 8 的适配器可以在 SNES 上运行 NES/Famicom 的游戏. 但是它只使用 SNES 作为电源, 控制器, 和视频合成器. NES/Famicom 的 CPU/PPU 位于 TriStar/Super 8 适配器的内部. 所以, 很不幸的是没有 NES 产生的 RGB 或 S-VHS 视频信号. :- ( 

[color=Red]NES 和 Gameboy/GBC 兼容吗? [/color]
不兼容. GB/GBC 使用 Zilog Z-80 型处理器, 不是 6502. 另外, 屏幕大小和调色板的细节都不一样. 有一个程序可以让容量小的 NES ROM 在 Gameboy 上运行, 但是这种程序的输出最多也就是极慢的速度以及很多漏洞. 一些 (比如 SMB DX, Ghosts & Goblins) NES 上游戏的官方 GBC 版本的代码是由游戏公司以可以在 Z-80 上运行的机器代码重新编写过的. 

[color=Red]老式的 NES 和 新式的顶部读取 NES 之间有什么区别吗? [/color]
是的, 显著的区别是新式顶部读取的 NES 只有 RF 信号输出, 除非你改机器. 愚蠢的 Nintendo, 为什么这样做呢??? 顶部读取装置在读取游戏时比老式前部读取装置好很多, 因为链接器几乎经常与游戏进行着合适的联系. 要顶部读取的 NES 与 金手指相兼容并不容易, 因为金手指的电路板特别厚. Galoob 曾经提供一个来解决这个问题的外部适配器. 据我所知, 新式 NES 没有停机芯片. 最后, 与老式 NES 相比, 由于不恰当的分离, 顶部读取的 NES 的图象信号非常弱. 对此有一种解决办法, 如果没有这个办法, 正常情况下新式 NES 每 8 个像素都会有很弱的竖直条. 

[color=Red]Famicom 和 NES 的控制器通用吗? [/color]
是的, 通用. 我曾经用方形 15 针控制器线将一个 NES 手柄接到我的 Famicom 上. 我还安装过一个可以监测控制器是接在 Player 1 还是 Player 2 上的开关. 可以在 Famicom 上使用 NES 的控制器是一个非常好的事情. 可以在互联网上的一些地方 (或者 nesdev.parodius.com) 找到关于控制器阵脚分布的文档. 

[color=Red]SNES 和 NES 的控制器通用吗? [/color]
我曾经看到过关于怎样使 SNES 控制器能在 NES 上使用的文档. 其他的办法我不知道, 但是听起来是可行的. 在常去的地方找找吧. 

[color=Red]怎样从 NES 中获得 RGB 信号? [/color]
不能. 绝对不可能. NES 从 PPU 产生合成视频信号, 没有其他的了. 确实有一些 NES 游戏机输出 RGB 信号, 但是仅限于以下三种: 1) Nintendo 用来截取游戏图片的游戏机, 2) Choice 10 街机, 以及 3) 法国版 NES 游戏机, 也许本身可以产生 RGB 信号, 也许不可以. 很遗憾. 

[color=Red]能让顶部读入的 NES 输出 A/V 信号吗?[/color] 
可以, 有一些文档写了应当如何做. 去类似 Game Station X 的网站. 这样的内部改造同样适用于只有 RF 输出的 Famicom. 

[color=Red]NES 能够输出立体声或单独的声道吗? [/color]
是的, 可以. 你不能够将所有声道分离开; 但是, 全部 NES/Famicom 游戏机将 5 个通道分为 2 个 (CPU 上的针脚) . 从 CPU 的一个针脚产生两个方波通道, 另外一个针脚上产生三角波, 杂波 (noise), 和采样通道. 到网上试着找找相关信息, 或者直接去 我的网站, 那里有一个页面描述了如何从 NES 获得高质量的立体音频! 

[color=Red]什么是 Famicom 磁碟系统 (Disk System) ? [/color]
那是一个 1986 年在日本发售的一个短命的外设. 它是个位于 Famicom 游戏机下面, 通过一个 RAM 卡带与 Famicom 相连的磁盘驱动器. 游戏保存在非标准 3 寸磁盘. 这个系统的优点在于磁盘很便宜, 它们利用了外接于 RAM 单元中的声音处理硬件, 于是玩家可以把游戏保存在磁盘中 (这是在使用用电池支持的便宜的 RAM 时代之前) . 这个系统的缺点有很多: 游戏的区域和大小有限制, 读入时间很长, 盗版行为很猖獗, 并且磁盘驱动器的带子 (belt) 损坏很快. 几年过去后, 内存镜像有所发展, 于是有更多的 Famicom 大游戏了. 于是, Nintendo 在 90 年代初默默的放弃了 FDS. 

[color=Red]金手指 (Game Genie) 如何工作? [/color]基本上, 金手指监视卡带接口的地址总线, 修改卡带接口的数据总线中那些它遇到的设定好的需要截取的数据. 在外行看来 (In layman's terms), 金手指用一些特定的值代替游戏中的某些值得行为依赖于一个特定的排斥代码 (proscrbied code) . 这使得金手指指能够暂时修改将在 NES CPU 中出现的值, 而不是永久性修改游戏本身. 金手指不像其他的可以将 RAM 中的某些特定区域锁定为特定的值得的作弊设备那样; 金手指修改从 ROM 输出的数据. 

[color=Red]NES 中的电池可以持续多长时间? [/color]Nintendo 说是 5 年; 然而我的 1987 年的 Zelda 卡带现在还在, 而且使用的还是最初的电池, 记忆保存完好. 我认为电池使用时间依赖于卡带的用电量, 或者其他什么. 

[color=Red]可以在不清除掉 RAM 中存储信息的条件下更换电池吗?[/color]
恩, 也许可以, 但是丢失资料的换电池方法却是更简单一些. 更换 NES 中的电池并不困难; 需要首先切断原来电池的连接, 然后换上一块新的, 最后把新电池焊上. 如果你想换电池同时保持数据, 你就需要用某种方法在整个更换过程中保持对存盘 RAM 的电压供应. 

[color=Red]NES 上的扩展接口是用来干什么的? [/color]
扩展??? 恩, 很少使用, 虽然 Famicom 上的扩展接口可以连接很多设备, 比如立体眼镜 (3-D glasses), 键盘, 磁带机 (我认为), 等等. NES (据我所知) 只有两个附件使用扩展接口: Miracle Keyboard Piano Teaching System, 和 Baton Teleplay System, 这是一个提供面对面进行 NES 游戏的调制解调器, 还是金手指. 我不认为 Teleplay 可以很广泛的发售. 

——————————————————————————–
模拟 
Top

[color=Red]模拟是非法的吗? [/color]
理论上讲, 合法. 事实上, 一般来说, 非法. 现在让我们来弄清楚. 如果你制作了一份 Nintendo 游戏的备份 (不论什么原因), 并且在模拟器上运行, 那么你并没有违背版权法. 在美国, 为了教育和作档案的原因 ”公平使用 (fair use) ” 媒体和游戏的拷贝是可以的. 然而, 如果你同时在模拟器上和 NES 游戏机上同时玩同一个游戏; 如果你在模拟器上玩那些你并不合法拥有的游戏; 如果你从互联网上下载一个游戏 ROM; 上述这些情况都被认为是不合法的 (违反了版权法的内容和 ”公平使用” 的学说) . 可以说大多数背模拟的游戏都是违反版权法的, 因为看起来并不是对于某个特定游戏的特定用户都拥有该游戏的卡带. 关于这个没有什么 ”假如”, ”并且”, 或者 ”但是” 什么的. 关于这个问题没有必要继续争论了. 

然而, 我认为模拟老的, 陈旧的系统 (比如雅达利 2600 以及也许 NES), 和模拟较新的, 正在发售的系统, 比如 N64, GameBoy Color, 和 GameBoy Advance. 在一个游戏发售后拷贝游戏 ROM 只是想免费获得一个游戏的差劲的借口. 相反的, 我认为模拟老系统是使该系统能够继续存在的一种方法, 永恒存在. 我们可以看到被模拟的 Famicom Disk System 的硬件和软件比原来得系统更长寿. 我有两台 FDS 磁盘驱动器, 但是都坏了; 可以看出来模拟唯一可用的保持使这些游戏和系统存在下去的方法. 

Nesticle… 
Nesticle 不应当被用作测试游戏或者自制的 demo 的模拟器. 虽然 Nesticle 曾经是许多年来最流行的 NES 模拟器, 但是他还远不够精确. 现在请删除掉 Nesticle 吧, 然后找一个更精确的模拟器!! 对于所有精确的需要, 我推荐 LoopyNES. 我对这件事并不是很显眼感到高兴. 

[color=Red]怎样才能拷贝/备份 NES 游戏? [/color]
这并不容易. 你可以自己做一个拷贝设备 (à la IO-56), 或者请别人给你做一个 (à la CopyNES, 由 Kevin Horton (但是不要因为这而打扰他, 因为现在他已经不再出售这些东西了) ), 或者买一个稀有的 Hong Kong 拷贝装置. 说实话, NES 拷贝器的世界非常小, 因为 NES/Famicom 卡带有很多种存储镜像. 拷贝器需要考虑到各种镜像, 这样才能够拷贝全部卡带. 可用的拷贝器都变得很旧了, 很多都已经没有价值了, 因为他们只是把游戏备份到 (不充足的) FDS 磁碟上! 

另外一个办法是把想要 dump 的游戏 (确定它们还没有被 dump 过) 寄给那些知名的 NES dump 专家. 我并不是这种人! :- ( 

[color=Red]怎样才能把 X 游戏拷贝到卡带上? [/color]
啊… 在这个问题上我们应当感谢 Earth Bound Zero. 当然, 如果说得一般一些, 你应当找到一个于游戏 X 相同型号或者兼容型号的卡带. 应当找到一个有相同的电路板类型, 相同的内存镜像, 相同的 RAM 芯片, 相同的备份电池 (如果需要), 以及至少于要拷贝的游戏 (ROM) 有相同的 ROM 大小. 记得如果你往卡带上拷贝那些从互联网上下载的非免费 (non-freeware) 游戏的话, 那将是非法行为. 

不管怎么说, 处理的过程包括从上述的卡带上移除 (desoldering) 掩膜 ROM, 安装上带有 socket 或者 EPROM 的 ROM. 你需要把 PRG ROM 和 CHR ROM 中取出的数据分别写入 EPROM (如果你已经有 EPROM 了, 这些是很简单的). 如果你对 PRG ROM 和 CHR ROM 并不熟悉, 读一下这份 FAQ 中的 iNES header 部分. 一般来说 EPROM 的针脚与掩膜 ROM 并不兼容, 所以你必须对 EPROM 的输出针脚非常熟悉以进行必要的配线转换. 这并不是初学者能作的! 

[color=Red]可以制作/购买通用型 NES 卡带吗? [/color]
不可能, 绝对办不到. 为了使 NES 卡带 ”通用化”, 你必须以可以兼容全部现有的内存镜像的方式制作卡带. 与通用型卡带最相近的是 NES/Famicom 拷贝器, 以及一种被叫作 Dr. PC Jr. 的系统, 由 Bung 制造. Dr. PC Jr. 从标准的 3.5″ 磁盘中读出游戏, 然后你就可以在 TV 或 显示器上玩游戏了. 这个系统只支持很少的镜像, 但是 Bung 的魔法将这个系统训练得可以使多种不同的游戏镜像可以在其上运行. 

[color=Red]我想做模拟器. 应当从那里入手呢? [/color]
想做模拟器的想法是非常好的, 但是应当知道, 现在已经有数不尽的 NES 模拟器了. 你是想做一个与其他所有模拟器都与众不同的呢, 还是只是想做一个模拟器而已? 如果你不能够想出一种方法使你的模拟器比现在所有其他类型的模拟器都好, 而只是做了一个普普通通的模拟器, 那么你最好自己保留这个模拟器, 只有你自己勇以及教学用. 

不管怎样, 当然, 你写不出一个能够模拟你所不熟悉的游戏系统的模拟器. 这就是为什么我总是建议在做自己的模拟器之前最好做一些自己的 NES demo. 你需要知道 CPU 是如何工作的, PPU 怎样运转, 以及音频通道如何工作. 这些都可以通过测试你自己写的 NES 程序而很好的掌握. 事实上, 这是做好的途径了. 所以, 这是 NES 那边的事. 

PC 这边的事是 (PC, 我的意思是指一般的个人电脑, 并不是特指 IBM PC), 你需要熟悉如何在各种显示模式下如何快速显示图形, 如何控制计算机的声音硬件接口, 如何处理键盘, 鼠标, 和手柄的输入. 将速度调整到稳定的 60Hz 对游戏机模拟器来说是非常重要的, 比如 NES. 如果你对这些并不熟悉, 那么你会得到相同的建议: 我建议你在你的 PC 上写一些 demo 或者只是一个小游戏. 做一个模拟器就像是将两种系统结合: 如果你对你要模拟的系统和你的程序运行平台系统并不精通, 那么写出来得将是一个次品. 

¥?#181; a?3 £ee+, g0+ an¥ ROMz +?g?v3 m3? 
Having 25,632,890 ROMz doesn't make one ”'leet,” nor does using lame ”'leetspeak,” so stop trying. If there's such a thing as ”'leetness” in the NES world, it comes from doing amazing and ingenious things with the NES hardware (and software), such as what is routinely done by humble people like Kevin Horton, Mark Knibbs, and others. 

(译注: 本人放弃翻译这个问题, 因为我实在不知道怎样用汉语忠实而又生动的表现作者的意思. 作者在这个问题中表达了自己对 lamers 的一些观点. 至于什么观点, 自己体会吧.) 

[color=Red]怎样才能把 .FDS 文件读入我的模拟器? [/color]
首先, 你的模拟器必须支持 Famicom Disk System. 如果不支持, 那只能说你的运气太差了. 对于不同的模拟器, 读入现在的 FDS 磁碟的方法并不一样, 但是一般来说包括读入磁碟, 然后点击某个按钮来 ”插入” 磁碟或 ”弹出” 磁碟旁边那个. 注意, 有时在模拟器运行磁碟之前需要有一个 8K FDS ROM 的二进制映像文件. 

很不幸的是在模拟界存在两种稍有不同的 .FDS 格式: 一种没有文件头 (header), 另一种有. 模拟器 iNES 支持那些直接从 FDS 磁碟媒质上一个字节一个字节的复制下来的没有任何文件头的 FDS 磁碟文件. 其他模拟器可以读入包含了用来简单描述磁碟镜像中扇区个数的 16 字节的文件头. 让人充满希望的是大多数模拟器最终将支持这两种 .FDS 镜像. 

[color=Red]什么是 iNES 的文件头? [/color]
iNES 文件头是当今 NES 模拟器界实际上的标准. iNES 文件头是 .NES ROM 开始处的 16 字节区域, 这个区域描述了这个游戏的大小和镜像的类型, 等等. 关于 iNES 文件头的细节, 请参考 nesdev.parodius.com 的文档. .NES ROM 的组成开始到结束是: iNES 文件头, [数字逻辑运算器 (trainer)], X PRG ROM 区, [Y CHR ROM 区]. (方括号表示那些部分是可选的, 具体情况依赖与不同的游戏.) 数字逻辑运算器虽然很少见, 但一些游戏有这一部分. 

对于 iNES 格式来说, PRG ROM 区的数据大小是 16384 字节. 因此 PRG ROM 是游戏程序的镜像. 这一点至今依旧被模拟器执行着. 首先由镜像来决定在 NES 存储区域中的上述区域如何映射. 有些游戏没有 CHR ROM 区, 它们把图形数据混合入了 PRG ROM. 这些游戏在运行的时候只简单的使用了 RAM 中的 8k 来存储 CHR 数据. 

[color=Red]什么是 UNIF? [/color]
UNIF 是一种新的格式, 一般认为这种格式将会结束许多 iNES 带来的问题, 特别是笨拙且专制的隐式内存镜像. UNIF 将 dump 的游戏描述的很清楚来解决这个问题. 电路板类型, 内存镜像, ROM 大小等等都被定义得更加清楚. UNIF 也是一种被分成块类型, 这就是说程序员可以可以选择他的模拟器读 .UNF 的哪一部分 (非常重要!). 如果模拟器读到了一个没有被辨认出的块, 就可以跳过那个部分继续读后边的. 至今为止, 只有少数的模拟器支持 UNIF 格式, 这就是 UNIF 的最大缺点. 但是任何东西都要有个开始, 不是吗? 

浏览下面的网站可以获得关于 UNIF 的更多细节 nesdev.parodius.com 或者 UNIF 网站. 

[color=Red]有 iNES < - > UNIF 转换程序吗? [/color]
是的, 有这样的转换工具, 这个工具是开源的 UNIF lib 项目的一部分. NESDev ”powers that be” 一般来说并不支持将 UNIF 格式转换回 .NES, 当然我们支持将 iNES 转换成 UNIF. 

[color=Red]什么是 .IPS 补丁? 怎样才能使用它? [/color]
IPS 文件是一种很小的文件, 它们被用来以一种高效的方法改变 (或修补) 游戏 ROM (或者其他相关文件) 中的数据. 它们被用来通过一种不违反版权法的方法 (希望如此) 实现对 ROM 的 hack, 翻译和修补. 比如, 如果你翻译了一个游戏并且只是将翻译后的版本放在你的网页上, 那么你依旧是违反了版权法. 所以, 一般来说 IPS 文件所做的事情是告诉补丁程序游戏文件中的哪些内容需要被改动和改动成什么样子. 附加一点是 IPS 文件要比一个完整的打过补丁的 ROM 小很多. 

你不能运行 IPS 文件 – 这是经常发生的误解. (你能运行 MP3 文件吗? 我想不能.) 所以你需要有一个支持 IPS 文件的补丁程序. 它会载入 IPS 文件和游戏 ROM, 然后打补丁, 但是必须注意的是一些补丁程序覆盖原始 ROM, 所以打补丁之前要进行备份! IPS 补丁程序在许多计算机平台上斗存在, (包括我的 ol' Amiga!). 一个找你的计算机上用的 IPS 程序的好地方是 http://www.zophar.net/. 

[color=Red]什么是 NSFs? [/color]
NSFs (Nintendo Sound Files: Nintendo 声音文件) 是游戏的音乐. NSFs 从游戏中被分离出来并且可以在与拥有 NSF 插件的 WinAmp 类似的音乐播放程序中播放. 这个格式有 Kevin Horton 在 1999 年开发出来, 它与用来分离 C-64 音乐的 SID 格式非常类似. NSFs 并不像其他系统中的 GYM 或者 (从某种意义上的) SPC 音乐文件, 因为 NSFs 并不记录 NES 音频信息. NSFs 的内部是从 NES ROM 中获取的 6502 程序代码和数据, 并且能够通过 NES 的音频硬件独立运行和发出声音. 这就是为什么 NSFs 能够像原始的音乐那样恰当的循环播放. 这样你就可以明白为什么有些人一直在找音乐代码, 分离它的入口点, 然后将它分割为另外一个文件. NSFs 听起来很棒. :-) 

[color=Red]如何分离 NSFs? [/color]
你需要了解 6502 的机器代码, 并且对 NES 的声音寄存器很熟悉. 我写了一份关于 NSF 分离基础的完整的文档, 你可以在我的网站或在常去的地方找到. 

——————————————————————————–
程序设计 
Top

[color=Red]NES 游戏用什么语言编写, C, BASIC 或者其他语言? [/color]
几乎所有 NES 游戏都使用 6502 汇编语言编写, 因为低速的 NES 处理器需要这样. 也许有一些游戏使用 C 编写, 但我对此表示怀疑. (一些未授权的很差劲的游戏也许使用 C 或其他什么语言编写. :-)) 对 BASIC 来说也一样. 虽然 Bung 和 Nintendo 都有 Famicom 的 BASIC 硬件解释器, 但是由于它的速度太慢了, 所以不能使用类似 C 和 BASIC 的高级语言来编写专业的, 快速步调的游戏. 

[color=Red]怎样才能开始编写 NES 程序? [/color]
首先, 学习 6502 汇编语言. 可以从图书馆里借一本汇编教材或者修相关课程. 汇编语言比其他语言要难很多, 因为你是直接与硬件打交道. (事实上, 这就是我为什么喜欢汇编语言.) 保证你对大多数 CPU 的工作原理熟悉, 比如访问内存, 指令寄存器, 和操作数. 关于 16 进制数系统 (Hexadecimal 或 HEX) 的只是至关重要. 

第二, 到 nesdev.parodius.com 上逛逛, 读一些那里关于 NES 的内存如何分配, 寄存器都作些什么和 NES 的性能 (以及特性) 的技术文档. 一直读到你对 NES 硬件有一个和好的认识为止. 

第三, 开始写 NES 的测试或 demo ROM. 你可以从找一些简单的 NES demo 代码开始, 来了解 NES 程序怎样启动, 内存如何清空, 如何初始化寄存器, 如何与 PPU 打交道. 找一个 6502 汇编器, 比如 DASM 或 X816, 来编译你的代码. 所有的工具都可以在 nesdev.parodius.com 下载到. 在那里还可以找到许多 demo, 我的 demo 可以在我的网站找到. 

在此之后就是用你的 NES 只是来提高熟练度了. 好运! 

[color=Red]NAME table, ATTRIBUTE table, 和 PATTERN table 是怎样结合在一起的? [/color]
NES 并不像 Windows PC 那样有一个可以直接存储每一个象素的颜色值的位图屏幕. NES 的 PPU 非常有限, 所以 NES 需要建立一个将一些不同的优化的内存区域结合在一起的屏幕显示. 首先, pattern table (图案表) 是一个访问 NES 的 CHR ROM 的小窗口. 它存储了 256 中不同的用来作背景的图形块 (每一个都是 8×8 象素), 以及另外 256 个给角色用的块. 当 name table 需要显示一个特定的图像, 它不需要逐点描绘它自己的存储器中的图形. 而是改为由 name table 存储一个与需要的块在 pattern table 编号相同的数. 

NES 有 16 种背景色 (background palette), 其中有一些镜像. 但是 name table 中的一个块不能同时访问全部 16 色; 它只能被调色板的 16 色中的 4 色构成. 这只是有 Nintendo 强加的限制. 于是 attribute table (属性表) 被引入, 来描述一个特定的块将会使用调色板 16 色中的哪 4 色. 因为 attribute table 非常小 (64 bytes), 它只能确定 2 tiles x 2 tiles. 所以每个 16×16 象素背景区域需要共享相同的 4 色. MMC5 内存镜像克服了这个问题, 但是如果没有它, 你就只能坚持 NES 的规定了. 

独立页面下载:
点击下载此文件

音频格式全解析

2005年1月22日

MP3的技术虽然现在已经完全公开,但是,其具体的技术细节还是有一定的深度,因此此次小编对某些技术进行深度解释,希望网友们笑纳。

采样率:
[color=White]——[/color]MP3的技术虽然现在已经完全公开,但是,其具体的技术细节还是有一定的深度,因此此次小编对某些技术进行深度解释,希望网友们笑纳。

采样率:

  数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。

  将一串的样本连接起来,就可以描述一段声波了,把每一秒钟所采样的数目称为采样频率或采率,单位为HZ(赫兹)。采样频率越高所能描述的声波频率就越高。 对于每个采样系统均会分配一定存储位(bit数)来表达声波的声波振幅状态,称之为采样分辩率或采样精度,每增加一个bit,表达声波振幅的状态数就翻一翻,并且增加6db的动态范围态,即6db的动态范围,一个2bit的数码音频系统表达千种状态,即12db的动态范围,以此类推。如果继续增加bit数则采样精度就将以非常快的速度提高,可以计算出16bit能够表达65536种状态,对应,96db 而20bit可以表达1048576种状态,对应120db。24bit可以表达多达16777216种状态。对应144db的动态范围,采样精度越高,声波的还原就越细腻。(注:动态范围是指声音从最弱到最强的变化范围)人耳的听觉范围通常是20HZ~20KHZ。

  根据奈魁斯特(NYQUIST)采样定理,用两倍于一个正弦波的频繁率进行采样就能完全真实地还原该波形,因此一个数码录音波的休样频率直接关系到它的最高还原频率指标例如,用44.1KHZ的采样频率进行采样,则可还原最高为22.05KHZ的频率—–这个值略高于人耳的听觉极限,(注: 可录MD,例R900的取样频率为44.1KHZ并且有取样频率转换器,可将输入的32KHz/44.1KHZ/48KHZ转换为该机的标准取样频率44.1KHZ的还原频率足已记示和真实再现世界上所有人再能辩的声音了,所以CD音频的采样规格定义为16bit。44KHZ, 即使在最理想的环境下用现实生活中几乎不可能制造的高精密电子元器件真实地实现了16bit的录音,仍然会受到滤波和声特定位等问题的困扰,人们还是能察觉出一些微小的失真所以很多专业数码音频系统已经使用18bit甚至24bit 进行录音和回放了。

现有的采样方式:

  MP3:MP3的全称应为MPEG1 Layer-3音频文件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1和MP2的压缩率分别为4:1和6:1-8:1,而MP3的压缩率则高达10:1-12:1,也就是说,一分钟CD音质的音乐,未经压缩需要10MB的存储空间,而经过MP3压缩编码后只有1MB左右。不过MP3对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。(另MP3PRO:mp3PRO编码器将音频的录音分成两个部分:mp3部分和PRO部分。mp3部分分析低频段(Low Frequency Band)信息,并将其编码成通常的mp3文件数据流。这就使得编码器能够集中编码更少的有用信息,获得更佳品质的编码效果。同时,这也保证了mp3PRO文件同老的mp3播放器的兼容性。PRO部分分析的则是高频段(High Frequency Band)信息,并将其编码成mp3数据流的一部分,而这些通常在老的mp3解码器里是被忽略的。新的mp3PRO解码器会有效地利用这部分数据流,将两段(高频段和低频段)合并起来产生完全的音频带,达到增强音质的效果。)

  WMA:WMA就是Windows Media Audio编码后的文件格式,由微软开发,WMA针对的不是单机市场,是网络!竞争对手就是网络媒体市场中著名的Real Networks。微软声称,在只有64kbps的码率情况下,WMA可以达到接近CD的音质。和以往的编码不同,WMA支持防复制功能,她支持通过Windows Media Rights Manager 加入保护,可以限制播放时间和播放次数甚至于播放的机器等等。WMA支持流技术,即一边读一边播放,因此WMA可以很轻松的实现在线广播,由于是微软的杰作,因此,微软在Windows中加入了对WMA的支持,WMA有着优秀的技术特征,在微软的大力推广下,这种格式被越来越多的人所接受。

  WAV:这是一种古老的音频文件格式,由微软开发。WAV是一种文件格式,符合 PIFF Resource Interchange File Format规范。所有的WAV都有一个文件头,这个文件头音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。很多朋友没有这个概念,我们拿AVI做个示范,因为AVI和WAV在文件结构上是非常相似的,不过AVI多了一个视频流而已。我们接触到的AVI有很多种,因此我们经常需要安装一些Decode才能观看一些AVI,我们接触到比较多的DivX就是一种视频编码,AVI可以采用DivX编码来压缩视频流,当然也可以使用其他的编码压缩。同样,WAV也可以使用多种音频编码来压缩其音频流,不过我们常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中,和AVI一样,只要安装好了相应的Decode,就可以欣赏这些WAV了。在Windows平台下,基于PCM编码的WAV是被支持得最好的音频格式,所有音频软件都能完美支持,由于本身可以达到较高的音质的要求,因此,WAV也是音乐编辑创作的首选格式,适合保存音乐素材。因此,基于PCM编码的WAV被作为了一种中介的格式,常常使用在其他编码的相互转换之中,例如MP3转换成WMA。

  Ogg Vorbis :号称MP3杀手!Ogg Vorbis究竟什么来头呢?OGG是一个庞大的多媒体开发计划的项目名称,将涉及视频音频等方面的编码开发。整个OGG项目计划的目的就是向任何人提供完全免费多媒体编码方案!OGG的信念就是:OPEN!FREE!Vorbis这个词汇是特里·普拉特柴特的幻想小说《Small Gods》中的一个”花花公子”人物名。这个词汇成为了OGG项目中音频编码的正式命名。目前Vorbis已经开发成功,并且开发出了编码器。Ogg Vorbis是高质量的音频编码方案,官方数据显示:Ogg Vorbis可以在相对较低的数据速率下实现比MP3更好的音质!Ogg Vorbis这种编码也远比90年代开发成功的MP3先进,她可以支持多声道,这意味着什么?这意味着Ogg Vorbis在SACD、DTSCD、DVD AUDIO抓轨软件(目前这种软件还没有)的支持下,可以对所有的声道进行编码,而不是MP3只能编码2个声道。多声道音乐的兴起,给音乐欣赏带来了革命性的变化,尤其在欣赏交响时,会带来更多临场感。这场革命性的变化是MP3无法适应的。和MP3一样,Ogg Vorbis是一种灵活开放的音频编码,能够在编码方案已经固定下来后还能对音质进行明显的调节和新算法的改良。因此,它的声音质量将会越来越好,和MP3相似,Ogg Vorbis更像一个音频编码框架,可以不断导入新技术逐步完善。和MP3一样,OGG也支持VBR。

  RA:RA就是RealAudio格式,这是各位网虫接触得非常多的一种格式,大部分音乐网站的在线试听都是采用了RealAudio,这种格式完全针对的就是网络上的媒体市场,支持非常丰富的功能。最大的闪烁点就是这种格式可以根据听众的带宽来控制自己的码率,在保证流畅的前提下尽可能提高音质。RA可以支持多种音频编码,包括ATRAC3。和WMA一样,RA不但都支持边读边放,也同样支持使用特殊协议来隐匿文件的真实网络地址,从而实现只在线播放而不提供下载的欣赏方式。这对唱片公司和唱片销售公司很重要,在各方的大力推广下,RA和WMA是目前互联网上,用于在线试听最多的音频媒体格式。

  APE:APE是Monkey“s Audio提供的一种无损压缩格式。Monkey“s Audio提供了Winamp的插件支持,因此这就意味着压缩后的文件不再是单纯的压缩格式,而是和MP3一样可以播放的音频文件格式。这种格式的压缩比远低于其他格式,但能够做到真正无损,因此获得了不少发烧用户的青睐。在现有不少无损压缩方案种,APE是一种有着突出性能的格式,令人满意的压缩比以及飞快的压缩速度,成为了不少朋友私下交流发烧音乐的唯一选择。

  ACC:AAC(高级音频编码技术,Advanced Audio Coding)是杜比实验室为音乐社区提供的技术。AAC号称「最大能容纳48通道的音轨,采样率达96 KHz,并且在320Kbps的数据速率下能为5.1声道音乐节目提供相当于ITU-R广播的品质」。和MP3比起来,它的音质比较好,也能够节省大约30%的储存空间与带宽。它是遵循MPEG-2的规格所开发的技术。 

  ATRAC 3/ATRAC 3 plus:ATRAC3(AdaptiveTransformAcousticCoding3)由日本索尼公司开发,是MD所采用的ATRAC的升级版,其压缩率(约为ATRAC的2倍)和音质均与MP3相当。压缩原理包括同时掩蔽、时效掩蔽和等响度曲线等,与MP3大致相同。ATRAC3的版权保护功能采用的是OpenMG。目前,对应ATRAC3的便携式播放机主要是索尼公司自己的产品。不过,该公司已于2000年2月与富士通、日立、NEC、Rohm、三洋和TI等半导体制造商签署了制造并销售ATRAC3用LSI的专利许可协议。

音频视频格式介绍

2005年1月22日

一、常见视频格式中采用的技术

  当PC开始拥有FPU(浮点处理器)后,PC如何处理多媒体信息的问题也被摆上台面。无数专家开始为音频视频编码技术运用在PC上开始忙碌了,视频技术也因此得到了飞快的进步。

  1、无声时代的FLC一、常见视频格式中采用的技术

  当PC开始拥有FPU(浮点处理器)后,PC如何处理多媒体信息的问题也被摆上台面。无数专家开始为音频视频编码技术运用在PC上开始忙碌了,视频技术也因此得到了飞快的进步。

  1、无声时代的FLC

  FLC、FLI是Autodesk开发的一种视频格式,仅仅支持256色,但支持色彩抖动技术,因此在很多情况下很真彩视频区别不是很大,不支持音频信号,现在看来这种格式已经毫无用处,但在没有真彩显卡没有声卡的DOS时代确实是最好的也是唯一的选择。最重要的是,Autodesk的全系列的动画制作软件都提供了对这种格式的支持,包括著名的3D Studio X,因此这种格式代表了一个时代的视频编码水平。直到今日,仍旧有不少视频编辑软件可以读取和生成这种格式。但毕竟廉颇老矣,这种格式已经被无情的淘汰。

  2、载歌载舞的AVI

  AVI——Audio Video Interleave,即音频视频交叉存取格式。1992年初Microsoft公司推出了AVI技术及其应用软件VFW(Video for Windows)。在AVI文件中,运动图像和伴音数据是以交织的方式存储,并独立于硬件设备。这种按交替方式组织音频和视像数据的方式可使得读取视频数据流时能更有效地从存储媒介得到连续的信息。构成一个AVI文件的主要参数包括视像参数、伴音参数和压缩参数等。AVI文件用的是AVI RIFF形式,AVI RIFF形式由字串“AVI”标识。所有的AVI文件都包括两个必须的LIST块。这些块定义了流和数据流的格式。AVI文件可能还包括一个索引块。
  只要遵循这个标准,任何视频编码方案都可以使用在AVI文件中。这意味着AVI有着非常好的扩充性。这个规范由于是由微软制定,因此微软全系列的软件包括编程工具VB、VC都提供了最直接的支持,因此更加奠定了AVI在PC上的视频霸主地位。由于AVI本身的开放性,获得了众多编码技术研发商的支持,不同的编码使得AVI不断被完善,现在几乎所有运行在PC上的通用视频编辑系统,都是以支持AVI为主的。AVI的出现宣告了PC上哑片时代的结束,不断完善的AVI格式代表了多媒体在PC上的兴起。
  说到AVI就不能不提起英特尔公司的Indeo video系列编码,Indeo编码技术是一款用于PC视频的高性能的、纯软件的视频压缩/解压解决方案。Indeo音频软件能提供高质量的压缩音频,可用于互联网、企业内部网和多媒体应用方案等。它既能进行音乐压缩也能进行声音压缩,压缩比可达8:1而没有明显的质量损失。Indeo技术能帮助您构建内容更丰富的多媒体网站。目前被广泛用于动态效果演示、游戏过场动画、非线性素材保存等用途,是目前使用最广泛的一种AVI编码技术。现在Indeo编码技术及其相关软件产品已经被Ligos Technology 公司收购。随着MPEG的崛起,Indeo面临着极大的挑战。

  3、容量与质量兼顾的MPEG系列编码

  和AVI相反,MPEG不是简单的一种文件格式,而是编码方案。
  MPEG-1(标准代号ISO/IEC11172)制定于1991年底,处理的是标准图像交换格式(standard interchange format,SIF)或者称为源输入格式(Source Input Format,SIF)的多媒体流。是针对1.5Mbps以下数据传输率的数字存储媒质运动图像及其伴音编码(MPEG-1 Audio,标准代号ISO/IEC 11172-3)的国际标准,伴音标准后来衍生为今天的MP3编码方案。MPEG-1规范了PAL制(352*288,25帧/S)和NTSC制(为352*240,30帧/S)模式下的流量标准, 提供了相当于家用录象系统(VHS)的影音质量,此时视频数据传输率被压缩至1.15Mbps,其视频压缩率为26∶1。使用MPEG-1的压缩算法,可以把一部120分钟长的多媒体流压缩到1.2GB左右大小。常见的VCD就是MPEG-1编码创造的杰作。MPEG-1编码也不一定要按PAL/NTSC规范的标准运行,你可以自由设定影像尺寸和音视频流量。随着光头拾取精度的提高,有人把光盘的信息密度加大,并适度降低音频流流量,于是出现了只要一张光盘就存放一部电影的DVCD。DVCD碟其实是一种没有行业标准,没有国家标准,更谈不上是国际标准的音像产品。
  当VCD开始向市场普及时,电脑正好进入了486时代,当年不少朋友都梦想拥有一块硬解压卡,来实现在PC上看VCD的夙愿,今天回过头来看看,觉得真有点不可思议,但当时的现状就是486的系统不借助硬解压是无法流畅播放VCD的,上万元的486系统都无法流畅播放的MPEG-1被打上了贵族的标志。随着奔腾的发布,PC开始奔腾起来,直到后来Windows Media Player也直接提供了MPEG-1的支持,至此MPEG-1使用在PC上已经完全无障碍了。
  MPEG-2(标准代号IOS/IEC13818)于1994年发布国际标准草案(DIS),在视频编码算法上基本和MPEG-1相同,只是有了一些小小的改良,例如增加隔行扫描电视的编码。它追求的是大流量下的更高质量的运动图象及其伴音效果。MPEG-2的视频质量看齐PAL或NTSC的广播级质量,事实上MPEG-1也可以做到相似效果,MPEG-2更多的改进来自音频部分的编码。目前最常见的MPEG-2相关产品就是DVD了,SVCD也是采用的MPEG-2的编码。MPEG-2还有一个更重要的用处,就是让传统的电视机和电视广播系统往数码的方向发展。
  MPEG-3最初为HDTV制定,由于MPEG-2的快速发展,MPEG-3还未彻底完成便宣告淘汰。
  MPEG-4于1998年公布,和MPEG-2所针对的不同,MPEG-4追求的不是高品质而是高压缩率以及适用于网络的交互能力。MPEG-4提供了非常惊人的压缩率,如果以VCD画质为标准,MPEG-4可以把120分钟的多媒体流压缩至300M。MPEG-4标准主要应用于视像电话(Video Phone),视像电子邮件(Video Email)和电子新闻(Electronic News)等,其传输速率要求较低,在4800-64000bits/sec之间,分辨率为176X144。MPEG-4利用很窄的带宽,通过帧重建技术,压缩和传输数据,以求以最少的数据获得最佳的图象质量。
  MJPEG,这并不是专门为PC准备的,而是为专业级甚至广播级的视频采集与在设备端回放的准备的,所以MJPEG包含了为传统模拟电视优化的隔行扫描电视的算法,如果在PC上播放MJPEG编码的文件,效果会很难看(如果你的显卡不支持MJPEG的动态补偿),但一旦输出到电视机端,你立刻会发现这种算法的好处。

  4、属于网络的流媒体

  RealNetworks RealVideo,采用的是 RealNetworks 公司自己开发的 Real G2 Codec,它具有很多先进的设计,例如,SVT (Scalable Video Technology);双向编码(Two—Encoding,类似于VBR)。RealMedia 音频部分采用的是 RealAudio ,可以接纳很多音频编码方案,可实现声音在单声道、立体声音乐不同速率下的压缩。最新的RealAudio竟然采用ATRAC3编码方案,以挑战日益成熟的MP3。
  Windows Media,视频编码采用的是非常先进的 MPEG-4 视频压缩技术,被称作 Microsoft MPEG-4 Video Codec,音频编码采用的是微软自行开发的一种编码方案,目前没有公布技术资料,在低流量下提供了令人满意的音质和画质。最新的Windows Media Encoding Utility V8.0将流技术推向到一个新的高度,我们常见的ASF、WMV、WMA就是微软的流媒体文件。
  事实上我们常见的MPG文件,也具有流媒体的最大特征——边读边放。

二、常见的编码与常见的文件格式的对应关系及其常用用途

  1、Audodesk FLC

  这是一种古老的编码方案,常见的文件后缀为FLC和FLI。由于FLC仅仅支持256色的调色板,因此它会在编码过程中尽量使用抖动算法(也可以设置不抖动),以模拟真彩的效果。这种算法在色彩值差距不是很大的情况下几乎可以达到乱真的地步,例如红色A(R:255,G:0,B:0)到红色B(R:255,G:128,B:0)之间的抖动。这种格式现在已经很少被采用了,但当年很多这种格式被保留下来,这种格式在保存标准256色调色板或者自定义256色调色板是是无损的,这种格式可以清晰到像素,非常适合保存线框动画,例如CAD模型演示。现在这种格式很少见了。

  2、Microsoft RLE

  这是微软开发为AVI格式开发的一种编码,文件扩展名为AVI,使用了RLE压缩算法,这是一种无损的压缩算法,我们常见的tga格式的图像文件就使用了RLE算法。
  什么是RLE算法呢?这是一种很简单的算法,举一个很简单的例子:
  假设一个图像的像素色彩值是这样排列的:红红红红红红红红红红红红蓝蓝蓝蓝蓝蓝绿绿绿绿,经过RLE压缩后就成为了:红12蓝6绿4。这样既保证了压缩的可行性,而且不会有损失。而且可以看到,但颜色数越少时,压缩效率会更高。由于Microsoft RLE仅仅支持256色,而且没有抖动算法,在色彩处理方面,FLC明显的比Microsoft RLE要好很多。当然这也不表示Microsoft RLE一无是处,和FLC一样,Microsoft RLE在处理相邻像素时也没有色染,可以清晰的表现网格。因此同样可以优秀的表现单色字体和线条。只要色彩不是很复杂,FLC能做的,Microsoft RLE也可以做到。由于AVI可以拥有一个音频流,而且Windows系统给与了直接的支持,Microsoft RLE最常用的用途是,在256色显示模式下,通过配合抓屏生成AVI的工具制作一个软件的操作演示过程,以达到图文并茂,形声兼备的效果。

  3、Microsoft Video1

  这也是由微软提供的一个AVI编码,任何Windows系统都自带了了它的Codec,这个编码支持真彩,画面质量很不错,Microsoft Video1的压缩效率非常低下,编码后的文件庞大得让人受不了。这个Microsoft Video1究竟有什么用呢?一般被用在保存一些没有渐变的小型视频素材方面。

  4、Indeo video R3.2

  这个编码由intel架构实验室开发,对应的文件格式是AVI,相对之前的流行的编码,Indeo video R3.2最大的特点就是高压缩比(当然,比起现在的压缩方案,实在是不值得一提),intel声称压缩比可达8:1而没有明显的质量损失,解码速度也非常快,对系统要求不高,由于Windows9X中自带Indeo video R3.2的Codec,所以Indeo video R3.2一度成为了最流行的AVI编码方案。有不少游戏的过场动画和启动动画都是Indeo video R3.2编码的。Indeo video R3.2同样不适合高要求的环境,在要表现细线条或大色彩值变化的渐变时,Indeo video R3.2会表现得非常糟糕。如果画面的色彩值差异不是很大,也没有明显的色彩区域界限,Indeo video R3.2还是合适的,例如海天一色的场景。Indeo video R3.2已经基本被淘汰,如果不是为了播放以前遗留的一些Indeo video R3.2编码视频,恐怕Windows ME/2000都不会有Indeo video R3.2的Codec了。

  5、Indeo video 5.10

  这个编码方案同样也是intel架构实验室开发的,它继承了Indeo video R3.2的优点,对应的文件格式仍然是AVI,解码速度同样非常快。Windows ME/2000自带了Indeo video 5.1的Codec,很多游戏也适用Indeo video 5.10来编码自己的演示动画。在没有DivX普及前,这几乎是最流行的AVI编码了,由于微软和intel的同时支持,这种编码方案被广泛采用。

  6、None

  顾名思义,这是一个没有损失的视频编码方案,对应的文件扩展名为AVI。这种编码几乎是不压缩的,文件大得惊人!那么这种编码有什么用途呢?用途就是保存视频素材,因为是无损的,保存素材非常合适,代价就是大量的存储空间。

  7、MPEG1

  我们熟知的VCD就是MPEG1编码的,对应的文件扩展名为MPG、MPEG或者DAT。事实上MPEG1可以工作于非PAL制和非NTSC制标准下。它可以自由设置数据流量和画面尺寸,只是这样非标准的文件无法直接刻录成VCD。

  8、MPEG2

  DVD的视频部分就是采用的MPEG2,SVCD同样也采用了MPEG2编码。对应的文件扩展名一般为VOB、MPG。MPEG2的设计目标就是提供接近广播级的高品质输出。

   9、DivX

  DivX是近2年开始被大家认识的,DivX 视频编码技术可以说是一种对 DVD 造成威胁的新生视频压缩格式(有人说它是 DVD 杀手)对应的文件扩展名为AVI或者DivX,它由 Microsoft mpeg-4v3 修改而来,使用 MPEG-4 压缩算法。据说是美国禁止出口的编码技术。DivX最大的特点就是高压缩比和不错的画质,更可贵的是,DivX的对系统要求也不高,只要主频300的CPU就基本可以很流畅的播放了,因此从DivX诞生起,立刻吸引了大家的注意力。DivX拥有比Indeo video 5.10高太多的压缩效率,编码质量也远远比Indeo video 5.10好,我实在想不出Indeo video 5.10还会有什么前途。

  10、PICVideo MJPEG

  MJPEG是很多视频卡支持的一种视频编码,随卡提供了Codec,安装完成后可以象使用其它编码一样生成AVI文件。MJPEG编码常用于非线性系统,批上了一层很专业的外衣。MJPEG的编码质量是相当高的,是一种以质量为最高要求的编码,这种编码的设置比较复杂,可以得到很高的压缩比,但牺牲了解码速度,如果要保证解码速度,编码后的压缩比确不是很理想,如果您希望从专业的非线性系统上捕捉视频,然后自行进行处理,这种格式是很有必要去了解一些的。

  11、RealNetworks RealVideo

  REAL VIDEO(RA、RAM)格式由Real Networks公司开发的,一开始就定位在视频流应用方面的,也可以说是视频流技术的始创者。它可以在用 56K MODEM 拨号上网的条件实现不间断的视频播放。从RealVideo的定位来看,就是牺牲画面质量来换取可连续观看性。其实RealVideo也可以实现不错的画面质量,由于RealVideo可以拥有非常高的压缩效率,很多人把VCD编码成RealVideo格式的,这样一来,一张光盘上可以存放好几部电影。REAL VIDEO存在颜色还原不准确的问题,RealVideo就不太适合专业的场合,但RealVideo出色的压缩效率和支持流式播放的特征,使得RealVideo在网络和娱乐场合占有不错的市场份额。

  12、Windows Media video

  Windows Media video就是微软为了和现在的Real Networks的RealVideo竞争而发展出来的一种可以直接在网上观看视频节目的文件压缩格式!由于它使用了MPEG4的压缩算法,所以压缩率和图像的质量都很不错。我们经常看到的ASF和WMV就是Windows Media video。Windows Media video的编码质量明显好于RealVideo,因为Windows Media video是微软的杰作,所以Windows系统给Windows Media video给与了很好的支持,Windows Media Player可以直接播放这些文件。

三、有关音频编码

  自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。

1、什么是采样率和采样大小(位/bit)?

  声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,一次振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。我们常见的CD,采样率为44.1kHz。光有频率信息是不够的,我们还必须获得该频率的能量值并量化,用于表示信号强度。量化电平数为2的整数次幂,我们常见的CD位16bit的采样大小,即2的16次方。采样大小相对采样率更难理解,因为要显得抽象点,举个简单例子:假设对一个波进行8次采样,采样点分别对应的能量值分别为A1-A8,但我们只使用2bit的采样大小,结果我们只能保留A1-A8中4个点的值而舍弃另外4个。如果我们进行3bit的采样大小,则刚好记录下8个点的所有信息。采样率和采样大小的值越大,记录的波形更接近原始信号。

2、有损和无损

  根据采样率和采样大小可以得知,相对自然界的信号,音频编码最多只能做到无限接近,至少目前的技术只能这样了,相对自然界的信号,任何数字音频编码方案都是有损的,因为无法完全还原。在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。强调编码的相对性的有损和无损,是为了告诉大家,要做到真正的无损是困难的,就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。

  3、为什么要使用音频压缩技术

  要算一个PCM音频流的码率是一件很轻松的事情,采样率值×采样大小值×声道数 bps。一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率则为 44.1K×16×2 =1411.2 Kbps。我们常说128K的MP3,对应的WAV的参数,就是这个1411.2 Kbps,这个参数也被称为数据带宽,它和ADSL中的带宽是一个概念。将码率除以8,就可以得到这个WAV的数据速率,即176.4KB/s。这表示存储一秒钟采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的音频信号,需要176.4KB的空间,1分钟则约为10.34M,这对大部分用户是不可接受的,尤其是喜欢在电脑上听音乐的朋友,要降低磁盘占用,只有2种方法,降低采样指标或者压缩。降低指标是不可取的,因此专家们研发了各种压缩方案。由于用途和针对的目标市场不一样,各种音频压缩编码所达到的音质和压缩比都不一样,在后面的文章中我们都会一一提到。有一点是可以肯定的,他们都压缩过。

  4、频率与采样率的关系

  采样率表示了每秒对原始信号采样的次数,我们常见到的音频文件采样率多为44.1KHz,这意味着什么呢?假设我们有2段正弦波信号,分别为20Hz和20KHz,长度均为一秒钟,以对应我们能听到的最低频和最高频,分别对这两段信号进行40KHz的采样,我们可以得到一个什么样的结果呢?结果是:20Hz的信号每次振动被采样了40K/20=2000次,而20K的信号每次振动只有2次采样。显然,在相同的采样率下,记录低频的信息远比高频的详细。这也是为什么有些音响发烧友指责CD有数码声不够真实的原因,CD的44.1KHz采样也无法保证高频信号被较好记录。要较好的记录高频信号,看来需要更高的采样率,于是有些朋友在捕捉CD音轨的时候使用48KHz的采样率,这是不可取的!这其实对音质没有任何好处,对抓轨软件来说,保持和CD提供的44.1KHz一样的采样率才是最佳音质的保证之一,而不是去提高它。较高的采样率只有相对模拟信号的时候才有用,如果被采样的信号是数字的,请不要去尝试提高采样率。

  5、流特征

  随着网络的发展,人们对在线收听音乐提出了要求,因此也要求音频文件能够一边读一边播放,而不需要把这个文件全部读出后然后回放,这样就可以做到不用下载就可以实现收听了。也可以做到一边编码一边播放,正是这种特征,可以实现在线的直播,架设自己的数字广播电台成为了现实。

四、各种主流音频编码(或格式)的介绍

  1、PCM编码

  PCM 脉冲编码调制是Pulse Code Modulation的缩写。前面的文字我们提到了PCM大致的工作流程,我们不需要关心PCM最终编码采用的是什么计算方式,我们只需要知道PCM编码的音频流的优点和缺点就可以了。PCM编码的最大的优点就是音质好,最大的缺点就是体积大。我们常见的Audio CD就采用了PCM编码,一张光盘的容量只能容纳72分钟的音乐信息。

  2、WAVE

  这是一种古老的音频文件格式,由微软开发。WAV是一种文件格式,符合 PIFF Resource Interchange File Format规范。所有的WAV都有一个文件头,这个文件头音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。很多朋友没有这个概念,我们拿AVI做个示范,因为AVI和WAV在文件结构上是非常相似的,不过AVI多了一个视频流而已。我们接触到的AVI有很多种,因此我们经常需要安装一些Decode才能观看一些AVI,我们接触到比较多的DivX就是一种视频编码,AVI可以采用DivX编码来压缩视频流,当然也可以使用其他的编码压缩。同样,WAV也可以使用多种音频编码来压缩其音频流,不过我们常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中,和AVI一样,只要安装好了相应的Decode,就可以欣赏这些WAV了。
在Windows平台下,基于PCM编码的WAV是被支持得最好的音频格式,所有音频软件都能完美支持,由于本身可以达到较高的音质的要求,因此,WAV也是音乐编辑创作的首选格式,适合保存音乐素材。因此,基于PCM编码的WAV被作为了一种中介的格式,常常使用在其他编码的相互转换之中,例如MP3转换成WMA。

  3、 MP3编码

  请参阅 MP3全攻略 一文

  4、OGG编码

  网络上出现了一种叫Ogg Vorbis的音频编码,号称MP3杀手!Ogg Vorbis究竟什么来头呢?OGG是一个庞大的多媒体开发计划的项目名称,将涉及视频音频等方面的编码开发。整个OGG项目计划的目的就是向任何人提供完全免费多媒体编码方案!OGG的信念就是:OPEN!FREE!Vorbis这个词汇是特里·普拉特柴特的幻想小说《Small Gods》中的一个”花花公子”人物名。这个词汇成为了OGG项目中音频编码的正式命名。目前Vorbis已经开发成功,并且开发出了编码器。
  Ogg Vorbis是高质量的音频编码方案,官方数据显示:Ogg Vorbis可以在相对较低的数据速率下实现比MP3更好的音质!Ogg Vorbis这种编码也远比90年代开发成功的MP3先进,她可以支持多声道,这意味着什么?这意味着Ogg Vorbis在SACD、DTSCD、DVD AUDIO抓轨软件(目前这种软件还没有)的支持下,可以对所有的声道进行编码,而不是MP3只能编码2个声道。多声道音乐的兴起,给音乐欣赏带来了革命性的变化,尤其在欣赏交响时,会带来更多临场感。这场革命性的变化是MP3无法适应的。
  和MP3一样,Ogg Vorbis是一种灵活开放的音频编码,能够在编码方案已经固定下来后还能对音质进行明显的调节和新算法的改良。因此,它的声音质量将会越来越好,和MP3相似,Ogg Vorbis更像一个音频编码框架,可以不断导入新技术逐步完善。和MP3一样,OGG也支持VBR。

  5、MPC 编码

  MPC是又是另外一个令人刮目相看的实力派选手,它的普及过程非常低调,也没有什么复杂的背景故事,她的出现目的就只有一个,更小的体积更好的音质!MPC以前被称作MP+,很显然,可以看出她针对的竞争对手是谁。但是,只要用过这种编码的人都会有个深刻的印象,就是她出众的音质。

  6、mp3PRO 编码

2001年6月14日,美国汤姆森多媒体公司(Thomson Multimedia SA)与佛朗赫弗协会(Fraunhofer Institute)于6月14日发布了一种新的音乐格式版本,名称为mp3PRO,这是一种基于mp3编码技术的改良方案,从官方公布的特征看来确实相当吸引人。从各方面的资料显示,mp3PRO并不是一种全新的格式,完全是基于传统mp3编码技术的一种改良,本身最大的技术亮点就在于SBR(Spectral Band Replication 频段复制),这是一种新的音频编码增强算法。它提供了改善低位率情况下音频和语音编码的性能的可能。这种方法可在指定的位率下增加音频的带宽或改善编码效率。SBR最大的优势就是在低数据速率下实现非常高效的编码,与传统的编码技术不同的是,SBR更像是一种后处理技术,因此解码器的算法的优劣直接影响到音质的好坏。高频实际上是由解码器(播放器)产生的,SBR编码的数据更像是一种产生高频的命令集,或者称为指导性的信号源,这有点駇idi的工作方式。我们可以看到,mp3PRO其实是一种mp3信号流和SBR信号流的混合数据流编码。有关资料显示,SBR技术可以改善低数据流量下的高频音质,改善程度约为30%,我们不管这个30%是如何得来的,但可以事先预知这种改善可以让64kbps的mp3达到128kbps的mp3的音质水平(注:在相同的编码条件下,数据速率的提升和音质的提升不是成正比的,至少人耳听觉上是这样的),这和官方声称的64kbps的mp3PRO可以媲美128kbps的mp3的宣传基本是吻合的。

  7、WMA 

  WMA就是Windows Media Audio编码后的文件格式,由微软开发,WMA针对的不是单机市场,是网络!竞争对手就是网络媒体市场中著名的Real Networks。微软声称,在只有64kbps的码率情况下,WMA可以达到接近CD的音质。和以往的编码不同,WMA支持防复制功能,她支持通过Windows Media Rights Manager 加入保护,可以限制播放时间和播放次数甚至于播放的机器等等。WMA支持流技术,即一边读一边播放,因此WMA可以很轻松的实现在线广播,由于是微软的杰作,因此,微软在Windows中加入了对WMA的支持,WMA有着优秀的技术特征,在微软的大力推广下,这种格式被越来越多的人所接受。

  8、RA

  RA就是RealAudio格式,这是各位网虫接触得非常多的一种格式,大部分音乐网站的在线试听都是采用了RealAudio,这种格式完全针对的就是网络上的媒体市场,支持非常丰富的功能。最大的闪烁点就是这种格式可以根据听众的带宽来控制自己的码率,在保证流畅的前提下尽可能提高音质。RA可以支持多种音频编码,包括ATRAC3。和WMA一样,RA不但都支持边读边放,也同样支持使用特殊协议来隐匿文件的真实网络地址,从而实现只在线播放而不提供下载的欣赏方式。这对唱片公司和唱片销售公司很重要,在各方的大力推广下,RA和WMA是目前互联网上,用于在线试听最多的音频媒体格式。

  9、APE

  APE是Monkey's Audio提供的一种无损压缩格式。Monkey's Audio提供了Winamp的插件支持,因此这就意味着压缩后的文件不再是单纯的压缩格式,而是和MP3一样可以播放的音频文件格式。这种格式的压缩比远低于其他格式,但能够做到真正无损,因此获得了不少发烧用户的青睐。在现有不少无损压缩方案种,APE是一种有着突出性能的格式,令人满意的压缩比以及飞快的压缩速度,成为了不少朋友私下交流发烧音乐的唯一选择。

.net经典书籍

2005年1月18日

清华大学出版社 微软出版社 联合出版的 《MicroSoft.NET程序设计系列》 和《MicroSoft.NET程序员系列》无疑是国内最好的.NET教科书。
排版方面布局非常的和谐,书籍的质感特别好,红的的封面和机械工具更是风格独到,内容方面语言简单易懂,由浅入深,作者全部是国外有一定知名度和丰富经验的业内人士。
强烈推荐!

注意:清华大学的红色封面的书籍还有一套,也是关于.net的,我个人感觉语言方面晦涩难懂多了,而且很多都说的很抽象,建议不要用。我推荐的两个系列的书籍每一本的封面都是由黑色和红色组成,而且封面正中央必有一个机械工具,这是其一大特点。清华大学出版社 微软出版社 联合出版的 《MicroSoft.NET程序设计系列》 和《MicroSoft.NET程序员系列》无疑是国内最好的.NET教科书。
排版方面布局非常的和谐,书籍的质感特别好,红的的封面和机械工具更是风格独到,内容方面语言简单易懂,由浅入深,作者全部是国外有一定知名度和丰富经验的业内人士。
强烈推荐!

注意:清华大学的红色封面的书籍还有一套,也是关于.net的,我个人感觉语言方面晦涩难懂多了,而且很多都说的很抽象,建议不要用。我推荐的两个系列的书籍每一本的封面都是由黑色和红色组成,而且封面正中央必有一个机械工具,这是其一大特点。

3D模型

2005年1月18日

用服务器端程序读取位图信,并将位图的颜色和坐标等信息传给Flash,Flash在客户端将
位图再现。
这样可以确保浏览者只能看到图片,而不能下载图片,这样就一个避免批量下载服
务器资源,要下载图片可以在登陆以后下载。
用服务器端程序读取位图信,并将位图的颜色和坐标等信息传给Flash,Flash在客户端将
位图再现。
这样可以确保浏览者只能看到图片,而不能下载图片,这样就一个避免批量下载服
务器资源,要下载图片可以在登陆以后下载。

还有一个设想就是,通过AS建立比较全面的3D模型,实现三维物体的静态动态效果。包物体的材质,光源效果(以用AS画位图为基础)

很想研究一下。

ASP中表单项目的数据传送

2005年1月18日

通过元件的name来定位数据.
如下的代码生成元件,定义元件ID
Response.Write(“

“)

如下代码接收数据:通过元件的name来定位数据.
如下的代码生成元件,定义元件ID
Response.Write(“

“)

如下代码接收数据:
 Edit_CateID=Split(Request.Form(“cate_ID”),”,”)
 Edit_CateName=Split(Request.Form(“cate_Name”),”,”)
 Edit_CateOrder=Split(Request.Form(“cate_Order”),”,”)
 arr_hidden=Split(Request.Form(“cate_IsHidden”),”,”)
 Edit_CateIntro=Split(Request.Form(“cate_Intro”),”,”)

发现表单中的多个同name的同类元件发回的数据存在一个变量中,并以逗号”,”分隔开
很容将之转换为数组.
值得注意的是,Request.Form(“cate_ID”)收到的来自多个元件的数据中,每个数据前都被加上了一个空格,也就是说实际上是由一个逗号和一个紧跟着的空格把各个数据项分开的。

Flash讲座

2004年12月11日

白云黄鹤Flash版
白云黄鹤电子商务版
联合举办

主讲人:阿华、AW、yourway白云黄鹤Flash版
白云黄鹤电子商务版
联合举办

主讲人:阿华、AW、yourway

圆满结束!

可喜可贺!