-
2005-12-01
BMP 相关
-
2005-11-04
深圳网叶
-
2005-10-21
谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词文:伐木丁丁鸟鸣嘤嘤 来源:http://fmddlmyy.home4u.china.com/text6.html 时间:2005-7-1 14:54:58 点击:1333谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题:
- 问题一:
使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢?
我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢?
- 问题二:
- 最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF-8这三种编码方式的相互转换。对于Unicode(UCS2)、GBK、UTF-8这些编码方式,我原来就了解。但这个程序让我有些糊涂,想不起来UTF-16和UCS2有什么关系。
查了查相关资料,总算将这些问题弄清楚了,顺带也了解了一些Unicode的细节。写成一篇文章,送给有过类似疑问的朋友。本文在写作时尽量做到通俗易懂,但要求读者知道什么是字节,什么是十六进制。
0、big endian和little endian
big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。如果将49写在前面,就是little endian。
“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,一个皇帝送了命,另一个丢了王位。
我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。
1、字符编码、内码,顺带介绍汉字编码
字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。
从ASCII、GB2312到GBK,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK都属于双字节字符集 (DBCS)。
2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。从汉字字汇上说,GB18030在GB13000.1的20902个汉字的基础上增加了CJK扩展A的6582个汉字(Unicode码0x3400-0x4db5),一共收录了27484个汉字。
CJK就是中日韩的意思。Unicode为了节省码位,将中日韩三国语言中的文字统一编码。GB13000.1就是ISO/IEC 10646-1的中文版,相当于Unicode 1.1。
GB18030的编码采用单字节、双字节和4字节方案。其中单字节、双字节和GBK是完全兼容的。4字节编码的码位就是收录了CJK扩展A的6582个汉字。 例如:UCS的0x3400在GB18030中的编码应该是8139EF30,UCS的0x3401在GB18030中的编码应该是8139EF31。
微软提供了GB18030的升级包,但这个升级包只是提供了一套支持CJK扩展A的6582个汉字的新字体:新宋体-18030,并不改变内码。Windows 的内码仍然是GBK。
这里还有一些细节:
GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。
对于任何字符编码,编码单元的顺序是由编码方案指定的,与endian无关。例如GBK的编码单元是字节,用两个字节表示一个汉字。 这两个字节的顺序是固定的,不受CPU字节序的影响。UTF-16的编码单元是word(双字节),word之间的顺序是编码方案指定的,word内部的字节排列才会受到endian的影响。后面还会介绍UTF-16。
GB2312的两个字节的最高位都是1。但符合这个条件的码位只有128*128=16384个。所以GBK和GB18030的低字节最高位都可能不是1。不过这不影响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。
2、Unicode、UCS和UTF
前面提到从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。
Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。
根据维基百科全书(http://zh.wikipedia.org/wiki/)的记载:历史上存在两个试图独立设计Unicode的组织,即国际标准化组织(ISO)和一个软件制造商的协会(unicode.org)。ISO开发了ISO 10646项目,Unicode协会开发了Unicode项目。
在1991年前后,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。
目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2005年的Unicode 4.1.0。ISO的最新标准是ISO 10646-3:2003。
UCS只是规定如何编码,并没有规定如何传输、保存这个编码。例如“汉”字的UCS编码是6C49,我可以用4个ascii数字来传输、保存这个编码;也可以用utf-8编码:3个连续的字节E6 B1 89来表示它。关键在于通信双方都要认可。UTF-8、UTF-7、UTF-16都是被广泛接受的方案。UTF-8的一个特别的好处是它与ISO-8859-1完全兼容。UTF是“UCS Transformation Format”的缩写。
IETF的RFC2781和RFC3629以RFC的一贯风格,清晰、明快又不失严谨地描述了UTF-16和UTF-8的编码方法。我总是记不得IETF是Internet Engineering Task Force的缩写。但IETF负责维护的RFC是Internet上一切规范的基础。
2.1、内码和code page
目前Windows的内核已经支持Unicode字符集,这样在内核上可以支持全世界所有的语言文字。但是由于现有的大量程序和文档都采用了某种特定语言的编码,例如GBK,Windows不可能不支持现有的编码,而全部改用Unicode。
Windows使用代码页(code page)来适应各个国家和地区。code page可以被理解为前面提到的内码。GBK对应的code page是CP936。
微软也为GB18030定义了code page:CP54936。但是由于GB18030有一部分4字节编码,而Windows的代码页只支持单字节和双字节编码,所以这个code page是无法真正使用的。
3、UCS-2、UCS-4、BMP
UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。下面让我们做一些简单的数学游戏:
UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。
UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个plane。每个plane根据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是最后一个字节不同,其余都相同。
group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。
将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。
4、UTF编码
UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:
UCS-2编码(16进制) UTF-8 字节流(二进制) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx 0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx 例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
读者可以用记事本测试一下我们的编码是否正确。需要注意,UltraEdit在打开utf-8编码的文本文件时会自动转换为UTF-16,可能产生混淆。你可以在设置中关掉这个选项。更好的工具是Hex Workshop。
UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。
5、UTF的字节序和BOM
UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?
Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:
在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。
这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
6、进一步的参考资料
本文主要参考的资料是 "Short overview of ISO-IEC 10646 and Unicode" (http://www.nada.kth.se/i18n/ucs/unicode-iso10646-oview.html)。
我还找了两篇看上去不错的资料,不过因为我开始的疑问都找到了答案,所以就没有看:
- "Understanding Unicode A general introduction to the Unicode Standard" (http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter04a)
- "Character set encoding basics Understanding character set encodings and legacy encodings" (http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter03)
我写过UTF-8、UCS-2、GBK相互转换的软件包,包括使用Windows API和不使用Windows API的版本。以后有时间的话,我会整理一下放到我的个人主页上(http://fmddlmyy.home4u.china.com)。
我是想清楚所有问题后才开始写这篇文章的,原以为一会儿就能写好。没想到考虑措辞和查证细节花费了很长时间,竟然从下午1:30写到9:00。希望有读者能从中受益。
附录1 再说说区位码、GB2312、内码和代码页
有的朋友对文章中这句话还有疑问:
“GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。”我再详细解释一下:
“GB2312的原文”是指国家1980年的一个标准《中华人民共和国国家标准 信息交换用汉字编码字符集 基本集 GB 2312-80》。这个标准用两个数来编码汉字和中文符号。第一个数称为“区”,第二个数称为“位”。所以也称为区位码。1-9区是中文符号,16-55区是一级汉字,56-87区是二级汉字。现在Windows也还有区位输入法,例如输入1601得到“啊”。(这个区位输入法可以自动识别16进制的GB2312和10进制的区位码,也就是说输入B0A1同样会得到“啊”。)
内码是指操作系统内部的字符编码。早期操作系统的内码是与语言相关的。现在的Windows在系统内部支持Unicode,然后用代码页适应各种语言,“内码”的概念就比较模糊了。微软一般将缺省代码页指定的编码说成是内码。
内码这个词汇,并没有什么官方的定义,代码页也只是微软这个公司的叫法。作为程序员,我们只要知道它们是什么东西,没有必要过多地考证这些名词。
所谓代码页(code page)就是针对一种语言文字的字符编码。例如GBK的code page是CP936,BIG5的code page是CP950,GB2312的code page是CP20936。
Windows中有缺省代码页的概念,即缺省用什么编码来解释字符。例如Windows的记事本打开了一个文本文件,里面的内容是字节流:BA、BA、D7、D6。Windows应该去怎么解释它呢?
是按照Unicode编码解释、还是按照GBK解释、还是按照BIG5解释,还是按照ISO8859-1去解释?如果按GBK去解释,就会得到“汉字”两个字。按照其它编码解释,可能找不到对应的字符,也可能找到错误的字符。所谓“错误”是指与文本作者的本意不符,这时就产生了乱码。
答案是Windows按照当前的缺省代码页去解释文本文件里的字节流。缺省代码页可以通过控制面板的区域选项设置。记事本的另存为中有一项ANSI,其实就是按照缺省代码页的编码方法保存。
Windows的内码是Unicode,它在技术上可以同时支持多个代码页。只要文件能说明自己使用什么编码,用户又安装了对应的代码页,Windows就能正确显示,例如在HTML文件中就可以指定charset。
有的HTML文件作者,特别是英文作者,认为世界上所有人都使用英文,在文件中不指定charset。如果他使用了0x80-0xff之间的字符,中文Windows又按照缺省的GBK去解释,就会出现乱码。这时只要在这个html文件中加上指定charset的语句,例如:
如果原作者使用的代码页和ISO8859-1兼容,就不会出现乱码了。再说区位码,啊的区位码是1601,写成16进制是0x10,0x01。这和计算机广泛使用的ASCII编码冲突。为了兼容00-7f的ASCII编码,我们在区位码的高、低字节上分别加上A0。这样“啊”的编码就成为B0A1。我们将加过两个A0的编码也称为GB2312编码,虽然GB2312的原文根本没提到这一点。
-
2005-10-21
微软官方提供的开发和实用工具
微软官方提供的开发和实用工具
所有这些资源都是免费下载。开发资源为主,是开发人员和想知道Windows Mobile具体底层知识的人的最好参考资料。
推荐Windows Mobile Developer Power Toys,我经常用,最有用的一个功能是在ActiveSync连接情况下在PC上看到并控制PPC或者SP。这个工具是free的。
Emulator Images for Windows Mobile 2003 Second Edition software for Smartphone
http://www.microsoft.com/downloads/details.aspx?familyid=791bae52-b057-4d72-b263-105534825ca5&displaylang=en
Emulator Images for Windows Mobile 2003 Second Edition software for Pocket PC
http://www.microsoft.com/downloads/details.aspx?familyid=4953d34d-692f-4c87-ac69-cb235dbdad1d&displaylang=en
Emulator Images for Windows Mobile 2003-based Pocket PC Development
http://www.microsoft.com/downloads/details.aspx?familyid=57265402-47a8-4ce4-9aa7-5fe85b95de72&displaylang=en
Emulator Images for Windows Mobile 2003-based Smartphone Development
http://www.microsoft.com/downloads/details.aspx?familyid=8fe677fa-3a6a-4265-b8eb-61a628ecd462&displaylang=en
eMbedded Visual C++ 4.0
http://www.microsoft.com/downloads/details.aspx?familyid=1DACDB3D-50D1-41B2-A107-FA75AE960856&displaylang=en
eMbedded Visual C++ 4.0 SP3
http://www.microsoft.com/downloads/details.aspx?familyid=5bb36f3e-5b3d-419a-9610-2fe53815ae3b&displaylang=en
Smartphone 2003 SDK SPDPS Update for eMbedded Visual C++ 4.0 SP4
http://www.microsoft.com/downloads/details.aspx?FamilyId=B8C1D059-6886-4C64-BF45-A71DA3EEC61A&displaylang=en
SDK for Windows Mobile 2003-based Pocket PCs
http://www.microsoft.com/downloads/details.aspx?familyid=9996b314-0364-4623-9ede-0b5fbb133652&displaylang=en
SDK for Windows Mobile 2003-based Smartphones
http://www.microsoft.com/downloads/details.aspx?familyid=a6c4f799-ec5c-427c-807c-4c0f96765a81&displaylang=en
Developer Resources for Windows Mobile 2003 Second Edition
http://www.microsoft.com/downloads/details.aspx?familyid=6A34DC83-C3CE-4A4C-AB83-491FD5729551&displaylang=en
Windows Mobile Developer Power Toys
http://www.microsoft.com/downloads/details.aspx?familyid=74473fd6-1dcc-47aa-ab28-6a2b006edfe9&displaylang=en
ActiveSync 3.7.1
http://www.microsoft.com/windowsmobile/downloads/activesync37.mspx
AppLaunch ActiveX Control for Pocket PC
http://www.microsoft.com/downloads/details.aspx?familyid=409252f0-33f7-4a01-81d6-d56da96e3a27&displaylang=en
OwnerInfo ActiveX Control for Pocket PC
http://www.microsoft.com/downloads/details.aspx?familyid=4df1a11b-4788-4d03-bcaf-a04e6e37ecab&displaylang=en
Pocket PC GAPI 1.2
http://www.microsoft.com/downloads/details.aspx?familyid=d9879b0e-4ef1-4049-9c61-e758933d84c4&displaylang=en
High Encryption Pack for Pocket PC
http://www.microsoft.com/downloads/details.aspx?familyid=da49d0cf-ef96-4567-b817-215e24668f75&displaylang=en
.NET Compact Framework 1.0 SP2 Developer Redistributable (Re-release)
http://www.microsoft.com/downloads/details.aspx?familyid=10600643-09b3-46d8-ba28-bc494bc20d26&displaylang=en
.NET Compact Framework 1.0 SP2 Redistributable (Re-release)
http://www.microsoft.com/downloads/details.aspx?FamilyId=359EA6DA-FC5D-41CC-AC04-7BB50A134556&displaylang=en
download homepage
http://msdn.microsoft.com/mobility/windowsmobile/downloads/default.aspx
终端服务客户端
http://www.microsoft.com/china/windowsmobile/resources/downloads/pocketpc/default.mspx。
Developer Resources for Windows Mobile 2003 Second Edition
http://www.microsoft.com/downloads/details.aspx?FamilyId=6A34DC83-C3CE-4A4C-AB83-491FD5729551&displaylang=enhotfix 2004-12-24 07:15 以后有新的我就陆续更新[em07]
安装步骤
1.activesync
2.开发工具evc4或者vs2003,如果是evc4别忘了装.net framework,以及evc4的补丁
3.PPC或者SP的SDK(也可以都装,没顺序要求)
4.PPC或者SP的emulator(也可以都装,没顺序要求)
5.开发第二版的再装第二版资源工具包
6.power toys(可选)
其他的就根据个人需求再装吧,每个软件的说明在链接后面都有,大家自己去研究一下
[align=right][color=#000066][此贴子已经被作者于2004-12-26 10:44:08编辑过][/color][/align]多普达565 2004-12-24 13:05
多谢您hotfix!为我们提供那多好而又实用的工具!!小愁 2004-12-25 15:24 怎么没有说明啊!~~~~~~~~~~~~~~~~~~ Jean 2004-12-26 01:50 太棒了,能否给个说明、安装步骤、开发流程之类的,感激不尽哇 michaeliu 2004-12-26 04:12 哈哈,有空我研究研究,说不定一不小心变专家哦![em08][em08][em08][em08] lsmx 2004-12-28 03:09 还是来点中文的吧 汽水盖子 2005-1-6 12:35 楼主提供的内容对于SmartPhone开发者来说真是如获至宝。1。前几个Emulator Images是开发SmartPhone程序时的模拟器,可以供开发者在开发完自己的程序后在模拟器中进行调试,不同的模拟器针对不同的Windows Mobile版本,还有语言之分,比如英文版,中文版。开发环境使用微软的Visual Studio .NET就可以了,安装后在选择新建项目时就可以看到移动设备应用程序的选项,在调试时就可以选择使用某个已经安装的模拟器进行调试了。一切调试成功后,就可以上载到SmartPhone上了。这个模拟器虽然是为开发用,但是对于暂时没有SmartPhone的朋友,也可以安装上看看SmartPhone的界面和功能到底是什么样子的。因为它自带完整的Windows Mobile,和真机是完全一样的,只是缺少某些第三方软件。2。embedded Visual C++ 4.0 and SP3,是供使用嵌入式C++进行开发的人员使用的开发环境。3。SDK也是供开发者使用的资源工具包,里面有开发文档,是对于开发者来说很好的帮助。4。Power Toys,里面有很多有用的小工具,可以协助开发者做测试。最常用的是Remote Display这个小工具,将SmartPhone和PC连接好后,打开这个工具,可以在PC机上的一个小窗口中显示出SmartPhone的屏幕。对于操作演示是非常有用的!5。ActiveSync,这个就不用说了吧,有SmartPhone的人必然用这个。这个是负责SmartPhone与PC进行数据传输的,是很多软件使用的前提条件。同时自己也带有很多有用的功能,比如可以在PC上以文件管理器的形式浏览SmartPhone的文件,进行复制,删除等操作,还可以同步OUTLOOK。非常有用!其他的我暂时还没有用过。。。呵呵。。。[em04] WinMobile 2005-1-10 04:03 支持![em06][em06] shuihy 2005-1-12 13:12 各位DX,我下载了那个Emulator Images for Windows Mobile 2003 Second Edition software for Smartphone,可是提示我说没有microsoft smartphone 2003 sdk,让我先安装SDK再安装Emulator Images,不知道我要安装什么阿,我现在机器上已经安装VS2003了,请各位指教。 hotfix 2005-1-13 06:56 SDK for Windows Mobile 2003-based Smartphoneshttp://www.microsoft.com/downloads/details.aspx?familyid=a6c4f799-ec5c-427c-807c-4c0f96765a81&displaylang=en请下载这个SDK,安装后就可以装Emulator了 shuihy 2005-1-14 07:41 郁闷啊,写了那么多没有发送成功 shuihy 2005-1-14 08:15 我已经安装了,而且在我的机器(XP Pro)上可以正常使用,我用C#写了一段程序,能够成功部署到模拟器上,而且能在模拟器上正常运行,但是同样一段程序拷贝到我的办公室机器(XP Home)上就不行了,可以正常部署,模拟器上也显示安装成功,就是不能运行,VS上显示正在启动程序,但是我等了几个小时还是那样,模拟器上我进行别的操作都没有问题,不知道是不是SDK不支持Home版本的XP啊?ps: 这个模拟器编程好慢啊:) -
2005-10-21
潜入式系统常用词
什么是CISC
CISC就是Complex Instruction Set Computing的缩写,中文翻译为复杂指令运算集,它只是 CPU分类的一种,好处是CPU所提供能用的指令较多、程式撰写容易,常见80X86相容的CPU即 是此类。
什么是RISC
RISC为Reduced Instruction Set Computing的缩写,中文翻译为精简执令运算集,好处是 CPU核心很容易就能提升效能且消耗功率低,但程式撰写较为复杂;常见的RISC处理器如 Mac的Power PC系列。
什么是Strong ARM
ARM所授权开发的一种内嵌式处理器,具有低功率消耗高时脉的优点,常被运用在行动电 话或手持电脑等设备中;现在被大量运用在Pocket PC的为Intel Strong ARM SA1110, 具有极高的运作时脉及所带来的效能,同时也不会损耗太多功率。
什么是MIPS
MIPS系列处理器有授权相当多厂商生产,此系列产品分布相当广泛,高阶有64bit等级用 在伺服器的产品线,低阶的也有32bit等级应用在嵌入式的场合,此系列的处理器擅长使 用快取及提升汇流排速率等技术来提升整体效能;Pocket PC多使用授权NEC生产的VR41 00系列。
什么是SH3/SH4
日立(Hitach)所发展的Super H系列是专门使用在嵌入式应用的处理器,主要着眼於低功 率及使用固定长度指令码来取得优良的解码效率;Pocket PC多使用SH3系列。
什么是RAM
RAM的全名为随机存取记忆体(Random Access Memory),可重复的写入都出资料,但需 使用电力来保持资料,照组成来分有静态记忆体(SRAM)及动态记忆体(DRAM),DRAM由 於具有较低的单位容量价格,所以被大量的采用作为系统的主记忆。
什么是ROM
OM的全名为唯读记忆体(Read Only Memory),资料一但写入後只能用特殊方法或根本 无法更改,由於此特性ROM常在嵌入式系统中担任存放作业系统的用途。
什么是Flash ROM
由於ROM不易更改的特性让更新资料变得相当麻烦,因此就有了Flash Memory的发展 ,Flash Memory具有ROM不需电力维持资料的好处,又可以在需要的时候任意更改资料 ,不过单价也比普通的ROM要高。 -
2005-10-21
VOIP
Voip 知识第一部分
1.什么是voip?
VoIP(Voice over Internet Protocol)是一种以IP电话为主,并推出相应的增值业务的技术。VoIP最大的优势是能广泛地采用Internet和全球IP互连的环境,提供比传统业务更多、更好的服务。 VoIP可以在IP网络上便宜的传送语音、传真、视频、和数据等业务,如统一消息、虚拟电话、虚拟语音/传真邮箱、查号业务、Internet呼叫中心、Internet呼叫管理、电视会议、电子商务、传真存储转发和各种信息的存储转发等。
2.什么是网关?
网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。
3.什么是网守?
网守:是对网络端终(如电话)网关等呼叫和管理功能,它是Voip网络系统的重要组成部分。
4.什么是公网?
公网就是普通电路交换网,即现在的网通,电信,铁通等架设的骨干及分支网络。
5.什么是软交换?
软交换是网络演进以及下一代分组网络的核心设备之一,它独立于传送网络,主要完成呼叫控制、资源分配、协议处理、路由、认证、计费等主要功能,同时可以向用户提供现有电路交换机所能提供的所有业务,并向第三方提供可编程能力。
6.何为网络传真?
电子传真系列业务是基于PSTN和互联网络,整合了电话网、智能网和互联网技术开发的增值服务。传真文件以图形格式存储,用户可以通过传真机向互联网传真信息存储网络发送传真信息,通过计算机或者传真机收取传真。
7.什么是H.323?
H.323是国际电信组织ITU-T所制定媒体(Media)在分封网路(Packet network)上的传输标准。
8.什么是VoIP Gateway?
VoIP Gateway意指VoIP与传统PSTN网路界接并转换相关协定的设备。
9.什么是VoIP Termianl?
VoIP Termian意指VoIP网路上的终端设备﹝如:IP Phone,TA…﹞。
10.什么是Gatekeeper
Gatekeeper是一种soft switch,负责VoIP网路上的讯号交换及控制功能。其功能类似传统PSTN上的交换机。
11.什么是SIP协议?
SIP(Session Initiation Protocol)是由IETF定义,基于IP的一个应用层控制协议。由于SIP是基于纯文本的信令协议,可以管理不同接入网络上的会晤等。会晤可以是终端设备之间任何类型的通信,如视频会晤、既时信息处理或协作会晤。该协议不会定义或限制可使用的业务,传输、服务质量、计费、安全性等问题都由基本核心网络和其它协议处理。SIP得到了微软、AOL、等厂商及IETF和3GPP等标准制定机构的大力支持。支持SIP的网络将提供一个网桥,以扩展向互联网和无线网络的各种设备提供融合业务能力。这将允许运营商为其移动用户提供大量的信息处理业务,通过SMS互通能力与固定用户和2G无线用户交互。SIP也是在UMTS3GPP R5/R6版本中使用的信令协议,因此可以保护运营商目前的投资而及具技术优势和商业价值。
12.H.248协议基本概念
H.248协议是 2000年由 ITU-T第 16工作组提出的媒体网关控制协议,它是在早期的 MGCP协议基础上改进而成。H.248/ MeGaCo协议是用于连接MGC与MG的网关控制协议,应用于媒体网关与软交换之间及软交换与 H.248/ MeGaCo终端之间,是软交换应支持的重要协议。H.248协议定义的连接模型包括终端(termination)和上下文(context)两个主要概念。终端是 MG中的逻辑实体,能发送和接收一种或多种媒体,在任何时候,一个终端属于且只能属于一个上下文,可以表示时隙、模拟线和RTP(real time protocol)流等。终端类型主要有半永久性终端(TDM信道或模拟线等)和临时性终端(如RTP流,用于承载语音、数据和视频信号或各种混合信号)。用属性、事件、信号、统计表示终端特性,为了解决屏蔽终端多样性问题,在协议中引入了包(package)概念,将终端的各种特性参数组合成包。一个上下文是一些终端间的联系,它描述终端之间的拓扑关系及媒体混合/交换的参数。朗讯公司(Lucent)在MGCP协议中首次提出 context概念,使协议具有更好的灵活性和可扩展性,H.248/MeGaCo协议延用了这个概念,它可用 Add命令创建,用Subtract或 Move命令删除。
13.什么是VPN?
PN(Virtual Private Network):虚拟专用网络,是一门网络新技术,为我们提供了一种通过公用网络安全地对企业内部专用网络进行远程访问的连接方式。我们知道一个网络连接通常由三个部分组成:客户机、传输介质和服务器。VPN同样也由这三部分组成,不同的是VPN连接使用隧道作为传输通道,这个隧道是建立在公共网络或专用网络基础之上的,如:Internet或Intranet。要实现VPN连接,企业内部网络中必须配置有一台基于Windows NT或Windows2000 Server的VPN服务器,VPN服务器一方面连接企业内部专用网络,另一方面要连接到Internet,也就是说VPN服务器必须拥有一个公用的IP地址。当客户机通过VPN连接与专用网络中的计算机进行通信时,先由ISP(Internet服务提供商)将所有的数据传送到VPN服务器,然后再由VPN服务器负责将所有的数据传送到目标计算机。VPN使用三个方面的技术保证了通信的安全性:隧道协议、身份验证和数据加密。客户机向VPN服务器发出请求,VPN服务器响应请求并向客户机发出身份质询,客户机将加密的响应信息发送到VPN服务器,VPN服务器根据用户数据库检查该响应,如果账户有效,VPN服务器将检查该用户是否具有远程访问权限,如果该用户拥有远程访问的权限,VPN服务器接受此连接。在身份验证过程中产生的客户机和服务器公有密钥将用来对数据进行加密。
第二部分
1.网络电话的工作原理?
通过互联网能打电话到普通电话上,关键是服务供应商要在互联网上建立一套完善的电话网关。所谓电话网关,是指可以将Internet和公共电话网连接在一起的电脑电话系统,其一端与Internet连接,另一端是可以打进打出的电话系统。当用户上网后,使用专用的网络电话软件,可以通过麦克风和声卡将语音进行数字化压缩处理,并将信号传输到离目的地最近的电话网关,电话网关将数字信号转换成可以在公共电话网上传送的模拟信号,并接通对方电话号码,双方就可以通过互联网电话网关通话了。
2.网关的工作原理
网关的工作原理是:当路由器的物理接口或路由模块的虚拟接口接收到数据包时,通过判断其目的地址与源地址是否在同一网段,来决定是否转发数据包,通常小型办公室的网络设备只有两个接口,一个连接Internet,另一个连接局域网集线器或交换机,因此,一般设成缺省路由,只要不是内部网段,全部转发。
3.网守的功能
(一)在IP电话中,网守处于高层,是用来管理IP电话网关的。总的来说网守的功能如下:一、RAS功能RAS部分的功能有用户认证、地址解析、带宽管理、路由管理、安全性管理、区域管理。
1、区域管理:由于IP Phone网络正在发展中,网络的拓扑结构各种各样,考虑到目前的发展趋势,网守在结构上应能适应各种结构,既能支持单网守、单区域,也能支持多网守、多区域;在多区域情况下,各个区域即可以建立平等和直接的联系,也可通过上级网守联系。每个区域可配置多个网守,以用于备份和负荷分担。每个网关保存两个网守的地址,网关启动后定期向网守发RRQ登录,如果登录失败,则向另一网守登录。登录时网守保存网关的登录生存周期,超时后未重新收到网关的RRQ则认为网关故障,将其状态置为不可用。
2、用户认证:网关用ARQ把用户卡号和密码发给网守,网守再把卡号和密码送给计费认证中心,如果计费认证中心认证通过,网守向网关发ACF,否则回ARJ。
3、地址解析:网关在用户认证完成后,接受被叫号码,接收完被叫号码后把号码用ARQ送给网守,网守在路由表中查找目的网关的IP地址,如果目的网关不在本区域中,向上级网守或邻近网守请求在别的区域中查找。找到目的网关后在ACF中返回其IP地址,未找到返回ARJ。网守到网守的通信方式遵循H.225.0 Annex G的建议。
4、带宽管理:由于每个网关接入到Internet的带宽有限,为了避免在话务高峰期造成网络拥塞,影响所有的呼叫,网守可设定进行带宽管理,网关在ARQ中填入所需的带宽,网守判断有无足够的带宽资源,如果资源不足,就拒绝呼叫。由于呼叫所需的带宽取决于语言编码的类别、是否采取静音、每个RTP包带几帧数据等,因此,在ARQ中的带宽应按最大需求申请,在通话开始时,再用BRQ修改所需带宽。
5、路由管理:为了提高网络的可靠性和接通率,对话务流量进行分配,网守提供路由管理。在路由表中,每个区号可以对应多个路由,路由具有优先级,选路时先选高优先级路由,如果高优先级路由拥塞或不可达,再选低优先级的路由。当呼叫跨区域时,双方的网守可以直接建立联系,也可以通过上级网守联系,还可以通过别的同级网守联系,方式灵活,保证系统的灵活配置和网络的可靠性。具有相同区号和路由特性的网关可以组成网关组,选路时可以针对网关,也可以针对网关组。对某一网关组选路时,可以按每个网关的优先级,也可以按百分比在网关间进行流量分配。为了在某些情况下能与即不在本网守的控制下,也无法与其网守通信的网关互通,路由还可设为“独立网关”,直接与之通信。
6、安全性管理:由于Internet是一个开放的网络,容易遭到攻击,网守应提供基于H.235的安全机制,在相互通信的网关和网守之间、网守与网守之间设置密码,相互认证。为了与别的设备互通或别的原因,网守也可以不提供基于H.235的安全性机制或也可以针对IP地址进行认证,根据对方的IP地址来判断对方是否是合法用户。
(二)呼叫处理功能
网守除了进行RAS功能外,还需要具有呼叫处理功能,利用H.225.0和H.245进行呼叫的建立,能力交换,呼叫维护和结束呼叫等处理。对于PC-to-Phone业务,PC需要对网守发起呼叫。再由网守向被叫网关发起呼叫,网守在进行呼叫处理的时侯,其处理能力会下降很多。
(三)用户界面和参数设置
用户界面和参数设置部分完成路由表、网关数据表、网关组数据表、本网守数据设定等数据的输入、修改、保存和调试信息、日志信息、告警信息的管理和用户权限管理。
1、各种数据的管理:网守的数据主要有网关数据表、网关组数据表、网守数据表、路由表、国家信息表五个表格和本网守的各种设置,如RAS端口号,是否采用H.235,本网守的国家号和国家号前缀等。通过用户界面,可以实时修改大部分数据,少数参数如端口号等只能在系统初始化时设定,运行中禁止修改。所有的数据都可以保存在文件中,下次启动可直接使用。
2、告警信息管理:提供告警窗口,在系统出现异常时打印告警信息。
3、调试信息管理:可以输入一些命令,来控制系统的运行和显示某些感兴趣的信息,如VOS的内存信息,显示收到的消息等。
4、日志管理:记录网守所有的操作,以便进行问题跟踪等。
5、用户权限管理:对操作设置各级权限,根据权限确定用户对网守的操作。
(四)RADIUS Client程序
计费认证中心中保存着所有卡号用户的信息,当网关向网守发送ARQ请求对用户进行认证时,GK通过Radius Client向计费认证中心发送用户验证请求,等待计费认证中心的验证结果。呼叫开始通话时,网守收到网关的通知后通过Radius Client向计费认证中心发送计费开始消息,通话结束后发送计费结束消息。
(五)网管功能
网守支持SNMP,通过运行SNMP代理,与网管中心建立联系。
(六)其他功能
1、设备备份的考虑:为了保证系统的可靠性,每个区域应至少配置两个网守,这两个网守可以配置为一个为主,一个为从,也可以配置为两个平等的网守,对区域内的网关进行负荷分担,同时互为备用。在正常情况下网关只向主网守登记,但主备网守中都保存有该网关的数据,当网关向主网守登记失败后,向备用网守登记。
2、设备管理:为了在某一网关或网守出现故障时能及时改变路由,提高接通率,网守应能及时发现其管理下的网关和与之联系的其它网守的状态改变并以此改变路由数据。网守管理下的网关不断向网守发送登记请求,每次登记的生存周期可以设得很短,当生存周期已到而未收到网关新的登记请求时,网守就可以认为网关发生故障,并不在向其分配呼叫。与此同时,网关不停向所有与之向连的网守发送服务请求,与之建立联系。当向对方发出服务请求未收到对方的证实,重发也超过最大重发次数时,认为对方发送故障,这时改变自己的路由表。
3、会话管理:网关上的每一个呼叫在网守中都有一与之对应的呼叫控制块,当网关发起呼叫时向网守发送ARQ,网守在收到后ARQ创建呼叫控制块,呼叫结束时网关向网守发送DRQ,网守释放呼叫控制块。为了避免在某些情况下网守未收到网关的DRQ而造成网守无法释放呼叫,网守定期向网关发送查询命令,检查呼叫是否存在,如果不存在,则释放呼叫控制块。为了避免呼叫超出网守处理能力而造成网守崩溃,网守可以设一最大呼叫数,超出的呼叫将被拒绝。对每个网关也设一最大呼叫数,当该网关上的呼叫数超出门限值时呼叫也将被拒绝。网守还可以闭塞某一网关或网守,禁止其呼入或呼出。对每一网守,还可以设一拥塞上限和拥塞下限,当呼叫超出呼叫上限时认为该网守已拥塞,不再向该网守分配呼叫;当呼叫数低于拥塞下限时,认为拥塞已经解除。
4.软交换技术及其应用
(1)软交换技术产生的背景
人类的通信包括话音、数据、视频与音频组合的多媒体三大内容。一直以来,上述三类通信业务均是分别由不同的通信网来承载和疏通。电话网承载和疏通语音业务、数据网承载和疏通数据业务,多媒体网承载和疏通多媒体业务。
随着社会信息化程度的进一步加深,通信已经成为人们生活和工作中不可缺少的工具,人们对通信要求也不再仅仅是基本的语音通信业务和简单的WWW浏览和收发E-mail,人们需要的是能够随时、随地、灵活地获取所需要的信息。因此要求电信运营商能够灵活地为用户提供丰富的电信业务,而基于由不同通信网络提供不同业务的运营模式难以满足用户“灵活地获取所需要的信息”的需求,只有构建一个"全业务网络——即能够同时承载和疏通语音、数据、多媒体业务的网络”才能满足用户日益增长的对通信业务的需求。
电话网的历史最为悠久,其核心是电话交换机,电话交换机经历了磁石式、共用电池式、步进制、纵横制、程控制5个发展阶段,其差别在于交换机的实现方式发生了改变。程控制电话交换机的出现是一个历史性的变革,它采用了先进的体系结构,其功能可以分为呼叫业务接入、路由选择(交换)和呼叫业务控制3部分,其中的交换和呼叫业务控制功能均主要是通过程序软件来实现。但其采用的资源独占的电路交换方式,以及为通信的双方提供的对等的双向64kbit/s固定带宽通道不适于承载突发数据量大、上下行数据流量差异大的数据业务。
数据网的种类繁多,根据其采用的广域网协议不同,可将其分为DDN、X.25、帧中继和IP网,由于IP网具有协议简单、终端设备价格低廉、以及基于IP协议的WWW业务的开展,基于IP协议的Internet呈爆炸式发展,一度成为了数据网的代名词。IP网要求用户终端将用户数据信息均封装在IP包中,IP网的核心设备——路由器仅是完成“尽力而为”的IP包转发的简单工作,它采用资源共享的包交换方式,根据业务量需要动态地占用上下行传输通道,因此IP网实际上仅是一个数据传送网,其本身并不提供任何高层业务控制功能,若在IP网上开放语音业务,必须额外增加电话业务的控制设备。值得一提的是,IP网中传送的IP包能够承载任何用户数据信息,为实现语音、数据、多媒体流等多种信息在一个承载网中传送创造了条件。
可见,电话网和数据网均存在一定的先天缺陷、无法通过简单地改造而成为一个“全业务网”,因此,为了能够实现在同一个网络上同时提供语音、数据以及多媒体业务,即通信业务的融合,产生了软交换(softswitch)技术。
2 软交换技术介绍
2.1 软交换网络的总体结构
软交换技术采用了电话交换机的先进体系结构,并采用IP网中的IP包来承载话音、数据以及多媒体流等多种信息。
一部程控电话交换机可以划分为业务接入、路由选择(交换)和业务控制3个功能模块,各功能模块通过交换机的内部交换网络连接成一个整体。软交换技术是将上述3个功能模块独立出来,分别由不同的物理实体实现,同时进行了一定的功能扩展,并通过统一的IP网络将各物理实体连接起来,构成了软交换网络。
电话交换机的业务接入功能模块对应于软交换网络的边缘接入层;路由选择(交换)功能模块对应于软交换网络的控制层;业务控制模块对应于软交换网络的业务应用层;IP网络构成了软交换网的核心传送层。
2.2 边缘接入层
软交换技术将电话交换机的业务接入模块独立成为一个物理实体,称为媒体网关(MG),MG功能是采用各种手段将各种用户及业务接入到软交换网络中,MG完成数据格式和协议的转换,将接入的所有媒体信息流均转换为采用IP协议的数据包在软交换网络中传送。
根据MG接入的用户及业务不同,MG可以细分为以下几类。
中继媒体网关(TG):用于完成与PSTN/PLMN电话交换机的中继连接,将电话交换机PCM中继中的64kbit/s的语音信号转换为IP包。
信令网关(SG):用于完成与PSTN/PLMN电话交换机的信令连接,将电话交换机采用的基于TDM电路的七号信令信息转换为IP包。
TG和SG共同完成了软交换网与采用TDMA电路交换的PSTN/PLMN电话网的连接,将PSTN/PLMN网中的普通电话用户及其业务接入到了软交换网中。接入网关(AG):提供模拟用户线接口,用于直接将普通电话用户接入到软交换网中,可为用户提供PSTN提供的所有业务,如电话业务、拨号上网业务等,它直接将用户数据及用户线信令封装在IP包中。
综合接入设备(IAD,Integrated Access Device):一类IAD同时提供模拟用户线和以太网接口,分别用于普通电话机的接入和计算机设备的接入,适用于分别利用电话机使用电话业务、利用计算机使用数据业务的用户;另一类IAD仅提供以太网接口,用于计算机设备的接入,适用于利用计算机同时使用电话业务和数据业务的用户,此时需在用户计算机设备中安装专用的“软电话软件”。
多媒体业务网关(MSAG,Media Servers Access Gateway):用于完成各种多媒体数据源的信息,将视频与音频混合的多媒体流适配为IP包。 H.323网关:用于连接采用H.323协议的IP电话网网关。
无线接入媒体网关(WAG,Wireless Access Gateway):用于将无线接入用户连接至软交换网。
可见,AG、TG和SG共同完成了电话交换机的业务接入功能模块的功能,实现了普通PSTN/PLMN电话用户的语音业务的接入,并将语音信息适配为适合在软交换网内传送的IP包。同时软交换技术还对业务接入功能进行了扩展,体现在IAD、MSAG、H.323 GW、WAG等几类媒体网关。通过各类MG,软交换网实现了将PSTN/PLMN用户、H.323 IP电话网用户、普通有线电话用户、无线接入用户的语音、数据、多媒体业务的综合接入。 2.3 控制层
软交换技术将电话交换机的交换模块独立成为一个物理实体,称为软交换机(SS),SS的主要功能是完成对边缘接入层中的所有媒体网关的业务控制及媒体网关之间通信的控制,具体功能如下。
(1) 根据业务应用层相关服务器中登记的用户属性,确定用户的业务使用权限,以确定是否接受用户发起的业务请求。
(2) 对边缘接入层的各种媒体网关的资源进行控制,控制各个媒体网关资源的使用,并掌握各个媒体网关的资源占用情况,以确定是否有足够的网络通信资源以满足用户所申请的业务要求。
(3) 完成呼叫的路由选择功能,根据用户发起业务请求的相关信息,确定哪些媒体网关之间应建立通信连接关系,并通知这些媒体网关之间建立通信连接关系并进行通信,以及在通信过程中所采用的信息压缩编码方式、是否启用回声抑制等功能。
(4) 对媒体网关之间的通信连接状态进行监视和控制,在用户业务使用完成后,指示相应的媒体网关之间断开通信连接关系。
(5) 计费。由于软交换机只是控制业务的接续,而用户之间的数据流是不经过软交换机的,因此软交换机只能实现按接续时长计费,而无法实现按信息量计费。若要求软交换机具备按信息量计费的功能,则要求媒体网关具备针对每用户的每次使用业务的信息量进行统计的功能,并能够将统计结果传送给软交换机。
(6) 与H.323网的关守(GK)交互路由等消息,以实现软交换网与H.323 IP电话网的互通。
2.4业务应用层
软交换技术将电话交换机的业务控制模块独立成为一个物理实体,称为应用服务器(AS),AS的主要功能是完成业务的实现,具体功能如下。 (1) 存储用户的签约信息,确定用户对业务的使用权限,一般采用专用的用户数据库服务器+AAA服务器或智能网SCP来实现。
(2) 采用专用的应用服务器和智能网SCP(要求软交换机具备SSP功能)来实现YDN 065-1997《邮电部电话交换设备总技术规范书》中定义的基本电话业务及其补充服务功能,以及智能网能够提供的电话卡、被叫付费等智能网业务。
(3) 采用专用的单个应用服务器或多个应用服务器实现融合语音、数据以及多媒体的业务,灵活地为用户提供各种增值业务和特色业务。
(4) 软交换网控制层中的软交换机之间是不分级的,当网络中每增加一个软交换机时,其它所有软交换机必须增加相应的局数据;而这对于网络运营来说,将是极为麻烦的,其解决办法是在业务应用层中设置策略服务器来为软交换机提供路由信息。当然,策略服务器的设置方案将直接影响软交换网络的安全可靠性。
2.5 核心传送层
核心传送层实际上就是软交换网的承载网络,其作用和功能就是将边缘接入层中的各种媒体网关、控制层中的软交换机、业务应用层中的各种服务器平台等各个软交换网网元连接起来。
鉴于IP网能够同时承载语音、数据、视频等多种媒体信息,同时具有协议简单、终端设备对协议的支持性好且价格低廉的优势,因此软交换网选择了IP网作为承载网络。
软交换网中各网元之间均是将各种控制信息和业务数据信息封装在IP数据包中,通过核心传送层的IP网进行通信。
2.6 软交换网中的协议及标准
软交换网络中同层网元之间、不同层的网元之间均是通过软交换技术定义的标准协议进行通信的。国际上从事软交换相关标准制定的组织主要是IETF和ITU-T。它们分别从计算机界和电信界的立场出发,对软交换网协议作出了贡献。
2.6.1 媒体网关与软交换机之间的协议
除SG外的各媒体网关与软交换机之间的协议有MGCP协议和MEGACO/H.248协议两种。
MGCP协议是在MEGACO/H.248之前的一个版本,它的灵活性和扩展性比不上MEGACO/H.248,同时在对多运营商的支持方面也不如MEGACO/H.248协议。
MEGACO/H.248实际上是同一个协议的名字,由IETF和ITU联合开发,IETF称为MEGACO,ITU-T称为H.248。MEGACO/H.248称为媒体网关控制协议,它具有协议简单,功能强大,且扩展性很好的特点。
SG与软交换机之间采用SIGTRAN协议,SIGTRAN的低层采用SCTP协议,为七号信令在TCP/IP网上传送提供可靠的连接;高层分为M2PA、M2UA、M3UA。由于M3UA具有较大的灵活性,因此目前应用较为广泛。SIGTRAN/SCTP协议的根本功能在于将PSTN中基于TDM的七号信令通过SG以IP网作为承载透传至软交换机,由软交换机完成对七号信令的处理。
2.6.2软交换机之间的协议
当需要由不同的软交换机控制的媒体网关进行通信时,相关的软交换机之间需要通信,软交换机与软交换机之间的协议有BICC协议和SIP-T协议两种。
BICC协议是ITU-T推荐的标准协议,它主要是将原七号信令中的ISUP协议进行封装,对多媒体数据业务的支持存在一定不足。SIP-T是IETF推荐的标准协议,它主要是对原SIP协议进行扩展,属于一种应用层协议,采用Client-Serve结构,对多媒体数据业务的支持较好、便于增加新业务,同时SIP-T具有简单灵活、易于实现、扩展性好的特点。目前BICC和SIP协议在国际上均有较多的应用。
2.6.3软交换机与应用服务器之间的协议
软交换机与Radius服务器之间通过标准的Radius协议通信。软交换机与智能网SCP之间通过标准的智能网应用层协议(INAP、CAP)通信。一般情况下,软交换机与应用服务器之间通过厂家内部协议进行通信。为了实现软交换网业务与软交换设备厂商的分离,即软交换网业务的开放不依赖于软交换设备供应商,允许第三方基于应用服务器独立开发软交换网业务应用软件,因此,定义了软交换机与应用服务器之间的开放的Parlay接口。
2.6.4媒体网关之间的协议
除SG外,各媒体网关之间通过数据传送协议传送用户之间的语音、数据、视频等各种信息流。 软交换技术采用RTP(Real-time Transport Protocol)作为各媒体网关之间的通信协议。RTP协议是IETF提出的适用于一般多媒体通信的通用技术,目前,基于H.323和基于SIP的两大IP电话系统均是采用RTP作为IP电话网关之间的通信协议。
2.6.5小结
MGCP、MEGACO/H.248、SIGTRAN、BICC、STP-T、Parlay协议传送的均是控制类信息,不包含任何用户之间的有用通信信息。RTP传送的是用户之间的有用通信信息。同时,媒体网关与连接的非软交换网设备之间需采用相应的协议通信。值得一提的是,软交换网与H.323网互通,H.323 GW与H.323网的IP电话网关采用RTP通信,同时软交换机需与H.323网的GateKeeper之间采用H.323协议通信。
第三部分
3 软交换技术的应用
3.1目前的软交换设备对业务的支持情况
目前,许多电话交换设备供应商和数据设备供应商均推出了自己的软交换设备,国内厂商包括中兴、华为和大唐;国外厂商包括阿尔卡特、北方电讯、西门子、朗讯、Cisco、Sonus、UT斯达康等公司。各厂商提供的软交换设备均遵从软交换技术的总体架构,只是在具体实现方式上存在着一些差异。
软交换技术的产生是为了构件一个“全业务网”,即在同一个网上实现语音、数据、多媒体视频流业务的融合;并且为了实现这个目的,将呼叫控制和业务功能在功能实体上进行了分离。但目前各厂家提供的软交换系统在业务提供上与上述目标还存在一定的差距,还需要经历一个不断发展和完善的过程。
目前,语音业务仍旧在通信业务中占据主导地位,也是各电信运营商盈利的主要来源,软交换网实现多业务的融合,应首先能够提供至少与PSTN相同的语音业务。因此,各设备厂商也将对语音业务的支持列为首要任务。
语音业务可以分为语音转接业务和语音直接接入业务。
软交换网的虚拟中继业务提供语音转接业务,实际上就是利用软交换网转接PSTN端局之间的语音业务,而软交换网本身不直接接入语音终端用户,此时软交换网的功能类似于PSTN中的汇接局或长途局的功能。提供虚拟中继业务,软交换网中必须配置TG、SG和软交换机设备,若仅提供与PSTN相同的语音转接业务,则不需要单独的应用服务器,此时呼叫控制和业务的实现均是由软交换机负责完成。目前各软交换设备供应商提供的系统均已经能够提供虚拟中继业务。
语音直接接入业务,要求软交换网具备PSTN本地端局的功能,在我国信息产业部2001年5月25日发布的《电话交换设备总技术规范》以及补充件中规定了PSTN交换机应具备的各项功能,目前各软交换设备厂家均是利用软交换机来实现上述功能,而未采用专用的应用服务器。对于用户信息和存储和鉴权认证也是由软交换机来实现,也支持由专用的应用服务器或智能网SCP来实现,因此,从某种意义上说,目前各厂商提供的软交换系统对于基本语音业务仍未采用“呼叫控制与业务应用的分离”的概念。同时,软交换网中为直接接入用户还必须配置AG和/或IAD设备;与PSTN相连,则还需配置TG和SG设备。目前各软交换设备供应商提供的系统均已经能够提供基本的语音直接接入业务,但不同厂商提供的系统对于《电话交换设备总技术规范》以及补充件中规定了PSTN交换机应具备的各项功能的支持情况仍各不相同。同时,对于PSTN智能网实现的各种语音增值业务,各厂家提供的软交换系统也是通过智能网方式来实现的,此时,软交换机具备SSP功能,触发智能网业务,访问智能网的SCP。 近年来数据业务的增长较快,但业务应用主要集中在WWW浏览、E-mail、下载、网络游戏、网络视频流媒体在线观看、网上购物、ICQ及网上聊天等业务。软交换设备供应商推出了一些数据与语音相融合的业务,例举如下。
上网呼叫等待业务:用户通过电话线拨号上网,当有电话呼入时,用户可以在PC界面上得到电话呼入的提示,并可选择接听、拒绝、前转来电。
点击拨号业务:通过点击Web页面上的Tel或Fax的号码,发起电话呼叫。
Web 800业务:通过点击Web页面上的800号码,通过PC发起电话呼叫,话费由被叫承担。
短消息业务:通过PC发送、接收短消息至移动手机。
个人数据库业务:用户可以将自己的包括电话号码、E-Mail地址在内的通信录、单日或多日的个人日程安排表等重要私人信息存放在系统为用户分配的专用数据存储设备中,并可随时调用查看和编辑修改,以备纸制文件或手机的遗失。
唯一信息业务:系统为用户分配专用的存储资源,用户的固定电话和手机电话留言、E-mail收件、网上购物定单等所有接收信息均存储在用户的统一信箱中,用户可通过PC机访问自己的统一信箱而获得所有与自己相关的信息。
呼叫跟随业务:实际上是对电话业务中的呼叫前转业务的扩展,允许用户设定多个被叫号码,来电在不同的时段转接至不同的被叫号码,且在同一时段,来电顺序接至不同的被叫号码。
网络交流中增加语音交流的业务:目前在Internet上进行网络游戏、网络聊天时,用户之间的交流只能基于PC文本的方式,此业务提供了PC-PC的语音交流功能。
其它还有会议等多方语音、数据通信业务等。
以上列举了一些目前软交换设备供应商通过增加应用服务器,已经能够支持的一些主要业务,当然不同厂商对上述业务的支持情况、实现方式、业务功能不尽相同。
3.2软交换网可行的应用
从上述业务中可以看出,目前软交换网络提供的业务仍主要是在语音业务方面,且提供的增值业务功能也很有限,其中部分业务功能利用智能网一样能够实现,目前,软交换设备供应商、运营商尚无法提供真正吸引用户的“Kill”级的、软交换网特有的业务。软交换网业务的发展和完善仍需要设备供应商、运营商、内容服务提供商的努力,仍有一段漫长的路要走。
根据软交换技术的特点、设备的成熟性,以下提出一些目前软交换网可行的应用。
3.2.1长途语音业务
目前,大部分软交换设备供应商均已经能够提供成熟的虚拟中继业务,来转接PSTN语音业务。
对于拥有庞大的、完善的IP网络,但无PSTN的电信运营商来说,采用软交换网络提供长途语音业务是一种较好的选择,由于软交换网是采用IP网作为承载,因此,可以节省TDM传输电路建设的投资。建设软交换网的TG、SG和软交换机,并完成与PSTN连接,同时选择合适的用户鉴权方式即可开放业务。
对于拥有一个已经将自己各地分支机构通过IP网连接起来的跨地域的企业来说,采用软交换网将各分支机构的电话机连接起来,即TG、SG与各分支机构的PABX连接起来,或者通过AG、IAD直接连接各电话机,并建设软交换机即可使用内部网络疏通长途电话业务,节省数目可观的电话费 3.2.2本地语音接入业务
对于拥有庞大的、完善的本地IP网络,但无本地PSTN端局的电信运营商来说,采用软交换网络接入用户也是一种较好的选择,本地PSTN端局的覆盖范围有限,且用户线布放的工程实施难度较大,因此,可以在用户端设置IAD设备,利用已有的小区宽带IP网络连接至软交换IP网络,完成各个IAD与软交换机、其它媒体网关设备的连接,即实现了本地电话机的接入,同时为了保证本地接入的电话能够与其它运营商的PSTN通信,还需完成软交换网与PSTN的连接。
同时,对接入的本地用户还可以灵活、多样地为用户开放软交换业务,并随着软交换业务的发展不断丰富完善。
3.2.3移动3G网络
无论是WCDMA还是CDMA2000,其发展目标均是在核心网络实现语音和数据业务的统一承载和交换,软交换技术无疑将是一种较好的选择。在3G网络中,原MSC将裂变为MSC-GW和MSC-SERVER,MSC-GW完成媒体网关的功能,MSC-SERVER完成软交换机的功能,IP网络作为3G网络的统一语音、数据媒体流的承载网络,实现各种业务数据流的融合。
3.3软交换网络建设中应注意的问题
3.3.1安全问题
安全问题包括网络安全和用户数据安全两个方面。
网络安全是指软交换网络本身的安全,即保证软交换网络中的媒体网关、软交换机、应用服务器设备不会受到非法攻击。由于软交换技术选择了IP网作为承载网,IP协议的简单和通用为网络黑客提供了便利条件。当软交换选择了开放的(与Internet相连的)IP网作为承载网时,网络安全问题尤其突出,必须在IP网上采用合适的安全策略,以保证软交换网的网络安全。
用户数据安全是指用户的签约信息和通信信息的安全,即不会被非法的第三方窃取和监听。首先,软交换网需采用必需的安全认证策略保证用户签约信息的安全,同时,无论是用户的签约信息还是用户的通信信息的安全均需要IP网的安全策略作为保证。
3.3.2 QoS服务质量保证
目前各软交换设备供应商均声称所提供软交换系统支持对QoS服务质量的保证,即软交换机能够根据语音、数据、视频的业务特性为用户所申请使用的业务分配特定的网络资源,以保证QoS。但软交换网的业务是承载在IP网上的,基于“best effort”服务策略的IP网难以很好地贯彻软交换机的QoS策略,因此,为保证软交换网的业务服务质量,必须要求软交换的IP承载网支持“Diff serv”等必要的服务质量保证策略。
3.3.3 IP地址
软交换技术选择了IP网作为软交换网的承载网,因此,软交换网中的各网元设备均需要设备IP地址;若软交换网仅提供虚拟中继业务,则不需为用户分配用户IP地址,若软交换网提供本地直接接入用户的业务,则需要为每一个用户均分配一个用户IP地址。 目前的IP地址有IPv4和IPv6两种标准,IPv4推出较早,是目前广泛采用的标准,但目前剩余的IP地址数量已经极为有限。为了解决IPv4地址资源紧张的问题,产生了IPv6,IPv6对IP地址资源进行了扩展,IP地址资源已经不再成为限制。但IPv4和IPv6在同一网络中不能并存,必须在网络中进行转换和包封,IPv4和IPv6的大规模混合组网尚无经验可循。IPv4将IP地址划分为公有IP地址和私有IP地址两大类,同时IP网络设备支持动态IP地址和静态IP地址的分配使用方式,公有地址和私有地址的选用既要考虑网络访问效率因素,又要综合考虑网络安全因素;动态地址和静态地址的选用既要考虑拥有的地址资源、地址使用效率,又要考虑对开放业务的影响。如上所述,目前软交换网络能够提供的极具吸引力的业务还很有限,还需要设备供应商、运营商、内容服务提供商以及用户需求的各方努力,软交换网的建设应结合软交换技术的特点和自身的业务需求,避免盲目建设。 同时,软交换网的建设还需要关注IP承载网的建设情况,只有构建在一个安全、完善的IP网上的软交换网才具有生命力。
5.关于网络传真号码的定义
关于传真号码的定义:请不要输入国际电话访问代码,如 1 或 100。相反,只需要象下面的例子这样,输入国家代码、地区或城市代码以及本地电话号码。即使将传真发送给您自己,也必须遵守这条规则。形式如下:(国家代码)(城市代码)(本地电话号码)例如,中华人民共和国的国家代码为“86”,北京地区代码为“10”。如果您要发送传真到北京地区,即使从北京发送,也应按照下面的形式输入传真号码:8610XXXXXXXX 或 86-10-XXXXXXXX发往其他国家或地区的传真的号码形式如下所示:(国家代码)(城市代码)(本地电话号码)
6.H.323标准的IP电话网络中4种实体及作用
在采用H.323标准的IP电话网络中,主要有4种实体:终端、网关(GW,Gateway)、网守(GK,Gatekeeper)和多点控制单元(MCU,Multipoint Control Unit)。其中终端是在分组网络上遵循H.323标准进行实时通信的端点设备;网关负责不同网络之间的信令和控制信息的转换以及媒体信息变换和复用;而网守处于高层,提供对端点(终端、网关、多点控制单元统称为端点)和呼叫的管理功能,是IP电话网络系统中的重要管理实体。网守的主要功能有:地址解析、接入控制、带宽管理、区域管理等四项基本功能;此外,还能提供呼叫控制信令、呼叫管理等其他功能。要构建一个稳定可靠的、实用的VOIP网,离不开GK的管理。[img]Upload/200563017418951.gif[/img] -
2005-10-12
EMAIL
-
2005-10-09
标准MIDI文件格式
标准MIDI文件格式--转
达思挺·考德威尔
标准的MIDI文件格式就像奇异的兽。总体看来,它是那样的让你无法抗拒。当然,你怎样看它无关紧要,可是用足够多的描述符描述一段音乐并使它能够重现,可不是很少的工作就可以完成的。然而,它虽然复杂,但是真正理解之后,MIDI文件格式的结构还是很直观明了的。在这里我必须放弃一些东西,因为毕竟我不是MIDI也不是MIDI文件专家!最近我为我的PC准备了一块Gravis 超音频音效卡,利用它听完几段MIDI文件(.mid)之后,想:“呵,我要是能够制作自己的MIDI(.mid)文件该多好啊!”嗯,经过烦人的几个小时之后,我发现,那些并不是没有价值的工作。但是,我是不会让一个冗长的文件格式就能够阻止的(此外,我告诉过我的妻子,计算机不是很难用的,而且我十分憎恨当一个伪君子)。那么,在这篇文章中如果发现什么错误,请让我知道,我会修改它的。同时,这份文档的范围并没有提供所有类型的MIDI命令和任何可能的文件配置!这篇基本指南将使读者能够(以中等的时间投资)制作出MIDI类型的文件。
1.概述:
一个MIDI文件基本上由两个部分组成,头块和轨道块。第二节讲述头块,第三节讲述轨道块。一个MIDI文件有一个头块用来描述文件的格式、许多的轨道块等内容。一个轨道可以想象为像一个大型多音轨录音机那样,你可以为某种声音、某种乐谱、某种乐器或者你需要的任何东西分配一个轨道。
2.头块:
头块出现在文件的开头,有三种方式来描述文件。头块看起来一直是这样的:
4D 54 68 64 00 00 00 06 ff ff nn nn dd dd前4个字节等同于ASCII码MThd,接着MThd之后的4个字节是头的大小。它将一直是00 00 00 00 06,因为现行的头信息将一直是6字节。
ff ff是文件的格式,有3种格式:
0-单轨
1-多规,同步
2-多规,异步单轨,很显然就只有一个轨道。同步多轨意味着所有轨道都是垂直同步的,或者其他的措辞为他们都在同一时间开始,并且可以表现一首歌的不同部分。异步多轨没有必要同时开始,而且可以完全的不同步。
nn nn 是MIDI文件中的轨道数。
dd dd 是每个4分音符delta-time节奏数(这之后将做详细介绍)。3.轨道块:
头块之后剩下的文件部分是轨道块。每一个轨道包含一个头,并且可以包含你所希望的许多MIDI命令。轨道头与文件头及其相似:
4D 54 72 6B xx xx xx xx
与头一致,前4个字节是ASCII吗,这个是MTrk,紧跟MTrk的4个字节给出了以字节为单位的轨道的长度(不包括轨道头)。
在头之下是MIDI事件,这些事件同现行的可以被带有累加的MIDI合成器端口接受和发送的数据是相同的。一个MIDI 事件先于一个delta-time。一个delta-time是一个MIDI事件被执行后的节奏数,每个四分之一音符的节奏数先前已经定义在了文件的头块中。这个delta-time是一个可变长度的编码值。这种格式虽然混乱,可是允许根据需要利用多位表示较大的数值,这不会因为需求小的数值情况下以添零的方式浪费掉一些字节!数值被转换为7位的字节,并且除了最后一个字节以最高有效位是0外,各个字节最有意义的一位是1,。这就允许一个数值被一次一个字节地读取,你如果发现最高有效位是0,则这就是这个数值的最后一位(意义比较小)。依照MIDI说明,全部delta-time的长度最多超过4字节。
delta-time 之后就是MIDI事件,每个MIDI事件(除了正在运行的事件外)带有一个最高有效位总是1的命令字节(值将>128)。大部分命令的列表在附录A中。每个命令都有不同的参数和长度,但是接下来的数据将是最高有效位为零(值将<128)。这里有个例外就是meta-event,最高有效位可以是1。然而,meta-events需要一个长的参数以区分。
微小失误就可以导致混乱的是运行模式,这是现行MIDI命令所忽略的地方,并且最终发行的MIDI命令是假定的。这就意味这如果包含了命令,那么MIDI事件就是由delta-time与参数组成而转换的。
4.综述:
如果这份说明仅仅是使问题更加混乱,那么以下提供的例子可能有助于澄清问题!同时,两个公用程序和一个图解文件包含在这个文档里面:
DEC.EXE——这个公共程序是将二进制文件(比如.MID)转换成以十进制表示的对应每个字节的有标记界限的文本文件。
REC.EXE——这个公共程序是将有标记界限的十进制数文本文件对应的每一字节转换成二进制文件。
MIDINOTE.PS——这是一个对应键盘和五线谱的音符数字附录页。
附录A1.MIDI事件命令
每个命令字节有两部分,左nybble(4位)包含现行的命令,右nybble包含将被执行的命令的通道号,这里有16各MIDI通道8个MIDI命令(命令nybble必须最高有效位是1的)。在下表中,X表示MIDI通道号。所有的音符即数据字节都<128(最高有效位是0)。
十六进制 二进制 数据 描述
8x 1000xxxx nn vv 音符关闭 (释放键盘)
nn=音符号
vv=速度9x 1001xxxx nn vv 音符打开 (按下键盘)
nn=音符号
vv=速度Ax 1010xxxx nn vv 触摸键盘以后
nn=音符号
vv=速度Bx 1011xxxx cc vv 调换控制
cc=控制号
vv=新值Cx 1100xxxx pp 改变程序(片断)
pp=新的程序号Dx 1101xxxx cc 在通道后接触
cc=管道号Ex 1110xxxx bb tt 改变互相咬和的齿轮 (2000H 表明缺省或没有改变)(什么意思搞不懂:)
bb=值的低7位(least sig)
tt=值的高7位 (most sig)下表是没有通道的 meta-events列表 ,他们的格式是:
FF xx nn dd
所有的 meta-events 是以 FF 开头的命令 (xx),长度,或者含在数据的字节数(nn),现行的数据(dd)
十六进制 二进制 数据 描述
00 00000000 nn ssss 设定轨道的序号
nn=02 (两字节长度的序号)
ssss=序号01 00000001 nn tt .. 你需要的所有文本事件
nn=以字节为单位的文本长度
tt=文本字符02 00000010 nn tt .. 同文本的事件, 但是用于版权信息
nn tt=同文本事件03 00000011 nn tt .. 序列或者轨道名
nn tt=同文本事件04 00000100 nn tt .. 轨道乐器名
nn tt=同文本事件05 00000101 nn tt .. 歌词
nn tt=同文本事件06 00000110 nn tt .. 标签
nn tt=同文本事件07 00000111 nn tt .. 浮点音符
nn tt=同文本事件2F 00101111 00 这个事件一定在每个轨道的结尾出现
51 01010001 03 tttttt 设定拍子
tttttt=微秒/四分音符58 01011000 04 nn dd cc bb 拍子记号
nn=拍子记号分子
dd=拍子记号分母2=四分之一
3=8分拍, 等等.
cc=节拍器的节奏
bb=对四分之一音符标注的第32号数字59 01011001 02 sf mi 音调符号
sf=升调/降调(-7=7 降调, 0=基准C调,7=7 升调)
mi=大调/小调(0=大调, 1=小调)7F 01111111 xx dd .. 音序器的详细信息
xx=被发送的字节数
dd=数据下表列出了控制整个系统的系统消息。这里没有MIDI通道数 (这些一般仅应用于MIDI键盘等.)
十六进制 二进制 数据 描述
F8 11111000 同步所必须的计时器
FA 11111010 开始当前的队列
FB 11111011 从停止的地方继续一个队列
FC 11111100 停止一个队列下表列出的是与音符相对应的命令标记。
八度音阶|| 音符号
# ||
|| C | C# | D | D# | E | F | F# | G | G# | A | A# | B
-----------------------------------------------------------------------------
0 || 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
1 || 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23
2 || 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35
3 || 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47
4 || 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59
5 || 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71
6 || 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83
7 || 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95
8 || 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107
9 || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119
10 || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 |参考资料:
"MIDI Systems and Control" Francis Rumsey 1990 Focal Press
"MIDI and Sound Book for the Atari ST" Bernd Enders and Wolfgang Klem 1989 M&T Publishing, Inc.
MIDI file specs and general MIDI specs were also obtained by sending e-mail to LISTSERV@AUVM.AMERICAN.EDU with the phrase GET MIDISPEC PACKAGE in the message.
------------------------------ DEC.CPP ------------------------------------/* file dec.cpp
by Dustin Caldwell (dustin@gse.utah.edu)
*/
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>void helpdoc();
main()
{
FILE *fp;unsigned char ch, c;
if((fp=fopen(_argv[1], "rb"))==NULL) /* open file to read */
{
printf("cannot open file %s\n",_argv[1]);
helpdoc();
exit(-1);
}c=0;
ch=fgetc(fp);while(!feof(fp)) /* loop for whole file */
{
printf("%u\t", ch); /* print every byte's decimal equiv. */
c++;
if(c>8) /* print 8 numbers to a line */
{
c=0;
printf("\n");
}ch=fgetc(fp);
}fclose(fp); /* close up */
}void helpdoc() /* print help message */
{
printf("\n Binary File Decoder\n\n");printf("\n Syntax: dec binary_file_name\n\n");
printf("by Dustin Caldwell (dustin@gse.utah.edu)\n\n");
printf("This is a filter program that reads a binary file\n");
printf("and prints the decimal equivalent of each byte\n");
printf("tab-separated. This is mostly useful when piped \n");
printf("into another file to be edited manually. eg:\n\n");
printf("c:\>dec sonata3.mid > son3.txt\n\n");
printf("This will create a file called son3.txt which can\n");
printf("be edited with any ascii editor. \n\n");
printf("(rec.exe may also be useful, as it reencodes the \n");
printf("ascii text file).\n\n");
printf("Have Fun!!\n");
}---------------------------- REC.CPP ----------------------------------
/* File rec.cpp
by Dustin Caldwell (dustin@gse.utah.edu)
*/#include <dos.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>void helpdoc();
main()
{
FILE *rfp, *wfp;unsigned char ch, c;
char s[20];if((rfp=fopen(_argv[1], "r"))==NULL) /* open the read file */
{
printf("cannot open file %s \n",_argv[1]);
helpdoc();
exit(-1);
}if((wfp=fopen(_argv[2], "wb"))==NULL) /* open the write file */
{
printf("cannot open file %s \n",_argv[1]);
helpdoc();
exit(-1);
}c=0;
ch=fgetc(rfp);
while(!feof(rfp)) /* loop for whole file */
{if(isalnum(ch)) /* only 'see' valid ascii chars */
{
c=0;
while(isdigit(ch)) /* only use decimal digits (0-9) */
{
s[c]=ch; /* build a string containing the number */
c++;
ch=fgetc(rfp);
}
s[c]=NULL; /* must have NULL terminator */fputc(atoi(s), wfp);/* write the binary equivalent to file */
}
ch=fgetc(rfp); /* loop until next number starts */
}fclose(rfp); /* close up */
fclose(wfp);
}
void helpdoc() /* print help message */
{
printf("\n Text File Encoder\n\n");printf("\n Syntax: rec text_file_name binary_file_name\n\n");
printf("by Dustin Caldwell (dustin@gse.utah.edu)\n\n");
printf("This is a program that reads an ascii tab-\n");
printf("delimited file and builds a binary file where\n");
printf("each byte of the binary file is one of the decimal\n");
printf("digits in the text file.\n");
printf(" eg:\n\n");
printf("c:\>rec son3.txt son3.mid\n\n");
printf("(This will create a file called son3.mid which is\n");
printf("a valid binary file)\n\n");
printf("(dec.exe may also be useful, as it decodes binary files)\n\n");
printf("Have Fun!!\n");
} -
2005-10-09
Daydreaming -- my music
这是一张找了很久的钢琴独奏CD,全称Daydreaming - Piano Solo Collection 韩国的新世纪(NEW AGE)音乐家的作品。这个专辑里诉说的是爱与别离,铺陈的梦境充满伤感与凄美的爱情。 The Daydream 是作者的艺名,这张《Dreaming》是The Daydream的NewAge风格的钢琴独奏专辑,曲风缓慢恬静,带着丝丝淡淡的忧伤,聆听这张专辑,也许会想起过去的爱恨离别,或者从前的遗憾……没错,虽然是NewAge风格的钢琴曲,但丝毫不比古典钢琴逊色,曲子表达的忧伤可以直达您的心扉,让你有点点伤感,有点点怀念,却又是那么那么的美。
如你在唱片店的陈列架前倘佯,于五彩缤纷各式各样的唱片中看到了这张《梦》,相信你会忍不住把它拿起来仔细端详一番。这张唱片的封套设计图案很特别,这种类似彩色漫画风格的绘画,与近两年一位引起绘画界普遍关注的另类配文画家“几米”的作品有异曲同工之妙。画面中一男一女漂浮在满天星斗的夜空中,他们安逸的表情和卷曲状的身体似乎正在呼应着专辑名字中的“梦”所暗示的情境。这充满奇幻神秘色彩的概念设计,很能引起人的好奇心,想一探片中音乐的真实面貌。这张以“梦”为题的唱片,是由旅韩华裔New Age钢琴家白日梦(The Daydream)演奏的钢琴独奏音乐。白日梦今年35岁,是一位处世风格神秘的音乐家。据说他从未在大众面前曝光(难怪也没有媒体知道他的真实姓名),从5岁就开始学弹钢琴至今,在大学主修现代艺术课程,而且在写诗方面也相当活跃。深厚的艺术修养,使他的音乐有种特殊的美感。2001年2月,白日梦的钢琴独奏专辑《梦》在韩国出版,短期内便在韩国市场上打败珍妮佛·洛佩兹、新好男孩、恩雅等国际明星和其他韩国本土歌手的新专辑,打入韩国TOWER RECORDS排行榜前四名内,创造了新世纪音乐在韩国的销售新纪录。对照近年来韩国电影、韩曲风靡中国大地的状况,一位华裔音乐人居然征服了韩国乐迷,确实让我们有扬眉吐气的感觉。
白日梦的音乐让人很自然联想起另一位同样在New Age领域中耕耘的著名钢琴家乔治·温斯顿(George Winston),他们的演奏及作曲风格颇有相似之处,而且都非常擅长用音乐写景、抒情、构筑意境、烘托气氛。《梦》中的音乐分为13段,每段均有独立的标题,整体上又是前后互相关联的。白日梦所演奏的是我们生活中的故事,有爱恨离别,有对人生的迷恋,有对幸福的憧憬,也有梦境难圆的悲伤情怀。其中Track 3《美丽女子》、Track 5《思念》、Track 6《下雨的星期日》、Track 7《白日梦》、Track 12《问句》和Track 13《雨中漫步》等几段,音乐相当优美,时常会让听者恍如置身电影院里正在观看一部情节凄美曲折的电影一般。在白日梦的音乐中,我们很少会有闲暇去留意他的演奏技法如何等琐碎细节,他的音乐天生就像具有莫名的感染力,紧紧扣住听者的思绪,可见他是一位真正了解人类情感的音乐家。市面上不少新世纪音乐专辑空有华美的包装和商业气息浓厚的内容主题,很难让人听过一遍后反复咀嚼。《梦》这张专辑如同一幅下笔不多的中国水墨画,简洁生动之余,给人留下无穷的思维空间,是一张构思精巧,制作成功的新世纪音乐精品。
曲以慢速的节奏为主调,在那双舞动的手下,流转出一个一个澹然的音符,勾勒出一副天凉如水的默默。始终缓缓的弹奏着,犹如溶在秋凉夜幕下的人们,遥望着天边的星群,独自默然着;也若同秋夜无聊的时刻,脑子里不断交织各色想法。但主旋律是不变的,缓缓的节拍,低音弹奏的主旋律,每个变奏中间还有清脆的几声单音,似乎眼睛微雾着,然后仿佛听见清脆的滴落声。有稍快节拍的弹奏,也有慢速的低语。犹如起起伏伏的心情,只为思念的哪个人。他们有时候是似听见走近自己的脚步声的喜悦,有时候会是夜夜思君不见君的浅愁……就在这样一种声音中,静默于一种幻听中,犹如经历着庄周的化蝶之梦,再分不清哪里是自己生活的彼岸,哪里是彼岸生活的自己。
01. Tears
02. You And Me
03. Beautiful Lady
04. Walking With You
05. I Miss You
06. Rainy Sunday
07. Daydream
08. Valentine`S Day
09. Love Is... 1
10. Wedding(Mendelssohn)
11. Love Is... 2
12. Questions
13. Steeping On The Rainy Street







