1/1, 8«1»

[置顶]回答:为什么我的文章几乎没有实例程序

2008-11-17 9:28:04 公告 抢沙发(0)

在这里回答下吧,因为本人的Blog数据库被彻底的无法挽回过,因此现在时刻备份数据库了,但由于如果添加实例程序的话会加大备份时间长度..........因此本人一般只贴完整代码,而不放出实例的原因了.......甚至原始文件都很少放..................

当然,现在我会尽量的多释放些原文件和实例了~~

如果您有需要相关的内容代码,可以留下您的Email~~~
或者 Email 我咯~~~

APNG?

2008-11-11 0:18:44 开发者 抢沙发(0)

嗯,没错就是一个扩展PNG(Portable Network Graphics)的新格式APNG(Animated Portable Network Graphics)!!

产生的意义也就不说了,此文件生于2004年,直到2007年才被所谓的主流浏览器给加入到机制中。

不过本人还是比较怀疑的是APNG是否能成为标准??

用于Web上,如果IE不支持,尤其像大部分国内普通用户是“忠实”的IE Fans......

自SWF针对位图方法做了较多优化,想必大多数网站都会采用SWF作为位图的逐帧动画了吧~~

至于如何替代GIF?貌似某组织几个老顽固一直坚持只要是和PNG爷爷扯上关系的,就必须只能表现一张图....

不过,目前支持的浏览器倒是有了FF3 和 第九代小O同学了~~~  有兴趣的话可以看下后面的图片~~~

未来谁知道呢?也许哪天弄个简单的解码器尝试下吧~~~  或许目前作为某种加密也不错~~~

啊,今天又是新的一天啦~~~ 期待着向某人索要JS写的解码器看看,不知道是不是仅仅在传说中.......

PS:
数了下这个PNG的帧标签~~~ 靠~~ 25帧............ 千万要记得用FF3+~~~或者Opera9.5+

[原]视觉模型心得---第二次扩展及补充

2008-11-9 20:48:30 原创 抢沙发(0)

本次主要针对了上回模型总结的补充和扩展,上回的解释可以参看这篇陋文:
[原]视觉模型心得

本次纠正模型如下(点击图片看大图):
还是需要等待时间和实践的验证~~~



 

[转]MP3文件格式解析

2008-10-23 12:58:20 开发者 抢沙发(0)

原文http://blog.163.com/waft_xu/blog/static/438152942008139330707/

MP3文件格式解析

1, MP3简介

MP3是今天一种常见的音乐格式,但恐怕除了工作要求之外,有兴趣对此进行研究的人恐怕不多。所以,当我打算做MP3解码方面的工作时,在找资料时也颇费了一番周折,同时也觉得很有趣。所以想在这里分享一下自己的心得,做一个总结性的介绍。这样有兴趣的同志也可以对此有一个大概了解,尽快入门。

MP3
MPEG-1 Audio Layer 3的简称,是当今比较流行的一种数字音频编码和有损压缩格式(有Layer 3,也必然有Layer1Layer2,也就是MP1MP2,但不在本文讨论范围之内)。MP3技术的应该可以用来大幅度的降低音频文件存储所需要的空间。它丢掉脉冲编码调制(PCM)音频数据中对人类听觉不重要得数据,从而达到了较高的压缩比(高达121101)。简单地说,MP3在编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成有较高压缩比的MP3文件,并使压缩后的文件在回放时也能够达到比较接近原音源的效果。

MP3
的音频质量取决于它的BitrateSampling frequency,以及编码器质量。MP3的典型速度介于每秒128320kb之间。采样频率也有44.14832 kHz三种频率,比较常见的是采用CD采样频率——44.1kHz。常用的编码器是LAME,它完全遵循LGPLMP3编码器,有着良好的速度和音质。

 

2,      MP3文件格式

用一个二进制查看器(比如Ultra-Edit)打开一个MP3文件,就能看到一大堆看似杂乱无序的数据。但只要用心了解就会知道,其实,这一切都是有规律可循的。

MP3
文件是由帧(frame)构成,帧是MP3文件的最小组成单位。每帧都包含帧头,并可以计算帧的长度。根据帧的性质不同,文件主要分为三个部分,ID3v2标签帧,数据帧和ID3v1标签帧。并非每个MP3文件都有ID3v2,但是数据帧和ID3v1帧是必须的。ID3v2在文件头,以字符串“ID3为标志,包含了演唱者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。ID3v1在文件结尾,以字符串“TAG”为标记,其长度是固定的128个字节,包含了演唱者、歌名、专辑、年份等信息。

I, ID3V2

ID3V2到现在一共有四个版本,但流行的播放软件一般只支持第三版,既ID3V2.3每个ID3V2.3 的标签都一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3 文件的首部。

标签头

长度为10个字节,位于文件首部,其数据结构如下:

char Header[3]; /* 字符串 "ID3" */

char Ver;       /* 版本号ID3V2.3 就记录3 */

char Revision; /* 副版本号此版本记录为0 */

char Flag;     /* 存放标志的字节,这个版本只定义了三位,很少用到,可以忽略 */

char Size[4]; /* 标签大小,除了标签头的10 个字节的标签帧的大小 */

标签大小为四个字节,但每个字节只用低7位,最高位不使用,恒为0,其格式如下:
0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx

计算公式如下:

ID3V2_frame_size = (int)(Size[0] & 0x7F) << 21
                 | (int)(Size[1] & 0x7F) << 14
                  | (int)(Size[2] & 0x7F) << 7
                  | (int)(Size[3] & 0x7F) + 10;


标签帧

每个标签帧都有一个10字节的帧头和至少一个字节的不固定长度的内容组成。它们是顺序存放在文件中,由各自特定的标签头来标记帧的开始。其帧的结构如下:

char FrameID[4];   /*用四个字符标识一个帧,说明其内容 */

char Size[4];      /* 帧内容的大小,不包括帧头,不得小于1 */

char Flags[2];     /* 存放标志,只定义了6 位,此处不再说明 */

常用帧标识:

TIT2:标题
TPE1
:作者
TALB
:专辑
TRCK
: 音轨,格式:N/MN表示专辑中第几首,M为专辑中歌曲总数
TYER
:年份
TCON
:类型
COMM
:备注,格式:“eng\0备注内容”,其中eng表示所使用的语言
帧大小为四个字节所表示的整数大小。


II, ID3V1

其数据结构如下:

char Header[3];    /* 标签头必须是"TAG"否则认为没有标签 */
char Title[30];    /*
标题 */
char Artist[30];   /*
作者 */
char Album[30];    /*
专集 */
char Year[4];      /*
出品年代 */
char Comment[28]; /*
备注 */
char reserve;      /*
保留 */
char track;;       /*
音轨 */
char Genre;        /*
类型 */

其实,关于最后31个字节还存在另外一个版本,就是30个字节的Comment和一个字节的Genre.

有了上述的这些信息,我们就可以自己写代码,从MP3文件中抓取信息以及修改文件名了。但是,如果真的想写一个播放软件,还是需要读它的数据帧,并进行解码。


III,
数据帧

数据帧往往有多个,至于有多少,由文件大小和帧大小来决定。每个帧都有一个四字节长的帧头,接下来可能有两个字节的CRC校验,其存在由帧头中的具体信息决定。接着就是帧的实体数据,也就是MAIN_DATA了。

A,帧头结构如下:

位置     长度     描述
BIT  BITS
————————————————————————————
31
19   12       Frame sync(0xFFF)
18/17    2        Layer, 00 – reserved, 01 – Layer III
                         10 – Layer II, 11
Layer I
16       1         protection_bit, 0
意味着受CRC保护,帧头后面跟16位的CRC
15-12    4        bitrate_index,
比特率
11-10    2        sampling_frequency,    00 – 44.1KHz, 01 – 48KHz
                                         10 – 32 KHz,  11 –
保留
9        1        padding_bit,1
意味着帧里包含padding位,仅当采样频率为44.1KHz时发生。
8        1        private_bit
7
6     2        mode,    00stereo,        01-joint stereo(intensity stereo and/or ms_stereo)
                           
11- dual_channel, 11 – single_channel
5-4      2        mode_extension,
Layer III中表示使用了哪一种joint stereo编码方式。
                            Intensity_stereo   ms_stereo
                   00            off                off
                   01            on                 off
                   10            off                on
                   11            on                 on
3        1        copyright,1
表示受版权保护。
2        1        original
0表示该bitstream是一个copy1表示是original.
1-0      2        emphasis
,表示会使用哪一种de-emphasis
                   00
no emphasis,     01 – 50/15 microsec. Emphasis
                   
10 – reserved,        11 – CCITT J.17

1)      无论帧长是多少,每帧的播放时间都是26ms

2)      数据帧大小:

FrameSize = 144 * Bitrate / SamplingRate + PaddingBit
144 * Bitrate / SamplingRate不能被8整除,则加上相应的paddingBit.

B,MAIN_DATA:

MP3granule包含18 * 32subband采样。每个数据帧含有两个granule的数据,其内容结如下:
       - main_data_end pointer
       - side info for both granules (scfsi)
       - side info granule 1
       - side info granule 2
       - scalefactors and Huffman code data granule 1
       - scalefactors and Huffman code data granule 2

主要数据里包含了scalefactors, Huffman encoded dataancillary information。其内容不再详叙,可以参考MP3 SPECIS0 11172-3 AUDIO PART。我们一般用的都是立体声,scfsi的长度为32个字节。

这里要解释的一个概念就是位流――bitstream。我们平常接触到的数据都是整数,最小的单位就是byte后者char。虽然我们也会用一个字节里的不同位来表示不同的含义,但总的来说,我们在出来数据的时候还是把它当作一个个字节看待。但对MP3这种数据格式来说,这是行不通的。在解码时,它的数据输入就是一个个比特流。其中一个或几个比特会是你的采样数据或者信息编码。你需要从整个MAIN_DATA里提取你所需要的以BIT为单位的参数和输入信号,从而进行解码。所以我们需要一个子程序,getbit(n),也就是从缓冲中提取所需要的位,并形成一个新的整数,作为我们的输出。

C,LAME标签帧

可是,当你真的打开一个MP3文件的时候,你会发现,很奇怪,很多时候第一个数据帧的帧头后面的32个字节居然都为0,这是为什么呢,这么奇怪的解码信息该如何解释?找到MP3 INFO TAG REV SPECIFICATION的网站,我才明白,原来第一帧并不是真正的数据帧,而是LAME编码的标志帧。

这里又要牵涉到两个概念:CBRVBRCBR表示比特率不变,也就是每帧的长度是一致的,它以字符串“INFO”为标记。VBRVariable BitRate的简称,也就是每帧的比特率和帧的长度是变化的,它以字符串“Xing”为标记。同时,它还存放了MP3文件里帧的总个数,和100个字节的播放总时间分段的帧的INDEX,还有其他一些参数,这被称为Zone A,传统Xing VBR标签数据,共120个字节。

在二进制文本编辑器里我们还可看到一个字符串“LAME”,并且后面清楚地跟着版本号。这就是20个字节的Zone B初始LAME信息,表示该文件是用LAME编码技术。接下来一直到该帧结束就是Zone CLAME标签。

3,      相关资料

× Mp3 Info Tag rev 1 specifications - draft 0

× MP3 文件格式

× MP3 SPECIS0 11172-3 AUDIO PART

今日Blog升级至v3.1.5

2008-10-8 17:56:09 公告 抢沙发(0)

今日Blog升级至v3.1.5,中途出了点意外。

现在将皮肤换成这个移植的Yofox

海贼王与CXO

2008-7-13 20:11:59 常识 抢沙发(0)

虽然CXO有很多,但是对于创业初期和小型技术公司来说5个CXO的相对应只能的高层官员就够了。

他们分别是 CEO、CTO、CIO、CFO、COO

只要看过海贼王的都知道草帽路飞那一伙人的团队构成:(以下按入团顺序陈述)


路飞[MONKEY·D·LUFFY]:
主职CEO:要成为海贼王的男人!而且是船长,所以当然是CEO
副职CTO:呵呵,海贼的主业就是贼字头,当然靠打斗为主职业,所以这个就他兼职了。

一个人干技术当然比较累咯,就收了绿藻头卓洛。

卓洛[RORONOA·ZORO]:
仅仅是个团队成员,一个很固执和单调的男人,要成为世界上最强的剑客/刀客。当然,他很多时候都是很酷酷的。

两个人性格类似,而且特别挥霍,所以需要找个人来管管他们,而且很多时候会迷路,于是收了娜美

娜美 [NAMI]:
主职CFO:哈哈,为什么?如此爱财女哈哈不用说了吧。
副职CIO:之所以副职,因为她以小窃贼出身,固然对信息了解程度很多,而且又是出色的航海师,固然是她,不过也就因此限制于此,原因就是因为罗宾的存在。当然在航海前期,她也算是CIO。

一个痴呆,一个傻不啦叽,就一个娜美是不是太无趣了,所以来个小丑类型的乌索普,不过好在他有某方面魅力,让草帽一伙拥有了自己的船。

乌索普[USOPPU]:
主职CCO:哎?怎么跑出了CCO了? 哈哈,因为他是骗人布阿,哈哈。给他按这个适合不过了,不过不在议题内。
副职:COO. 前期的修船工,加上此人也能让某女心动获得了首航的大船(囧,这也算阿)

可是就有钱有人出力有人搞笑的生活是不是还缺了什么呢?对了,吃是最重要的,尤其是一个“饭桶”路飞(没贬义的意思,事实上却是如此),一个大酒鬼卓洛....所以就需要有人来烧饭啊之类的。。。。于是收了山治。。。

山治[SANJI]:
也仅仅是个团员,如果要CXO的话也是CCO吧,不过是个Cook,区别于USOPPU,而且不是主业的,所以没什么CXO可以评上。

这么多人了,可是比如吃坏肚子怎么办呢,哈哈 ,而且小女孩在有个小PET抱抱的话肯定很惬意,哈哈,对咯,乔巴,“加入我们吧!”

乔巴 [TONY·TONY·CHOPPER]
团员,同样,因为与主业无关所以,称为CDO就免了,是个医生嘛~~ 哈哈。

一个人拥有世上绝无仅有的阅历,可被迫仅给坏党当参太可惜了,尤其是那么美丽的女人,来吧。“也加入我们吧!”虽然前面是不请自来的,但是既然来了,我们就是一伙,铁铁的一伙!!!!


罗宾 [NICO·ROBIN]
主职:CIO。人家可是考古学家呢!

人多了,船小了,而且航行了那么久,也就要离开了。 首部船黄金梅丽号的离开,让我感动了很久,这是一伙团队深深情意的船。可以说是团队一员。可是它就这么离开了........

弗兰奇[FRANKY]:
主职:COO。哈,真正强大的修船工,世界上目前仅只剩师兄一人可比,但都是双雄。

布鲁克 [BROOK]:
目前也是个团员,还没看出来是什么......谁让他只剩下了骷髅架子....................

soso~~
就这样啦~~
长话就不多说了,如果当今团队如此,夫复何求呢?!!

具体的了解请看《海贼王》吧!!!!就当我广告下咯~~~~

推荐的一首歌,泪别黄金梅利号的时候歌:
<DearFriends>
http://fscw.myweb.hinet.net/mp3/DearFriends.mp3

 

再呐喊一句:

兄弟如此,夫复何求!!

[转]创造你的角色时该考虑的20个问题

2008-7-4 0:08:13 游戏 抢沙发(0)

创造你的角色时该考虑的20个问题
原作者不详,紫晶翻译 (原载于奇幻天地) 

紫晶注:本文是一位未署名的作者贴在RPG.net上的。文章的本意是为玩TRPG的玩家创造角色时提供帮助,国内玩TRPG的玩家虽然不多,但最近许多热爱奇幻的网友都开始尝试自己创作奇幻同人作品,紫晶希望这篇短文在刻画角色上能有所助益。

1.角色的父母是谁?角色是否由他们抚养成人?如果不是的话是因为什么原因?如果不是的话又是由谁抚养的?
2.角色有从小时候就是死党的好友吗?有兄弟姐妹吗?他们现在在哪里?角色和他们还有联系吗?还是已经分开了?
3.角色的童年是什么样的?平静宁和还是动荡不安深受创伤?
4.角色有什么钦佩的偶像吗?如果有,是什么样的?
5.在这个故事开始之前,角色是干什么的?是谁训练了角色学会现在在做的工作?
6.角色的道德观和宗教信仰是什么样的?为了维护他的信仰,他会做出多大的努力?是谁或什么事情教会了角色接受这种道德观念和信仰?
7.角色有什么不同寻常的爱好或者体格特征吗?旁人一般对此有何反应?
8.别的角色对你的角色的态度如何?从你的角色的观点来看,他们为何会有这种反应?
9.角色能杀人吗?他/她为什么会做出杀戮的行为?他/她有什么敌人吗?角色能杀他们吗?
10.现在角色的人际关系如何?他/她有什么亲密的朋友吗?或是仇敌吗?如果有的话是谁?原因是什么?
11.角色在精神心理上有麻烦吗?有什么恐惧症的对象吗?如果有的话是什么?是因为什么原因?
12.角色平素是怎么对待别人的?他/她容易相信别人吗?还是特别不容易相信别人?
13.角色看起来是什么样子?他/她有什么伤疤或是纹身吗?如果有的话是因为什么原因?
14.角色的日常生活是什么样的?如果这种规律的生活因为不同的原因被打断了他会有什么不同的反应?

下面和你的DM一起坐下来考虑下面两个问题:

15.角色曾经历过这个世界上的什么重大事件吗?他/她的经历对角色有何影响?
16.角色有任何声名狼藉或是名声显赫的祖先吗?他/她做了什么?当人们知道了角色有这样的祖先后他们会有何反应?角色的行为是为了提升这种声誉,降低声誉,还是忽视之?

最后再考虑一下下面四个问题:

17.角色的理想或者说人生目标是什么?
18.他/她是怎样追寻目标的?故事中描述的冒险经历对完成这种梦想有何作用?
19.角色有过建立家庭的想法吗?如果有的话,他/她心目中理想的伴侣是哪种类型的?
20.角色考虑过他/她死亡的可能性吗?他/她有什么未了的心愿吗?

紫晶注:上面这二十个问题,基本上覆盖了角色的各个方面,为创造角色提供了一个大致的框架。之所以需要这么一个框架,目的还是为了使你的角色更加生动可信。大家不妨以FR中的名人崔斯特为例试着解答一下这些问题,并把问题的答案和崔斯特的性格经历联系起来看看有什么样的前因后果。其实,解答这些问题的过程,就几乎完成了一部小说的大纲了,剩下的就是用合适的语句写出来了。最后,祝愿大家创造出自己丰富多彩的角色!

1/1, 8«1»