关注2005维也纳新年音乐会

偷闲上网,突然想起了每年一次的维也纳新年音乐会,去官方网站看看,发现CD/DVD已经开始预售,自然,节目单也就公布了出来。

然而,相比节目单而言,也许更能引吸我的还是这次音乐会的指挥——洛林·马泽尔。

在平望中学上初中的时候,在钱小强老师的推荐下,1996年,我生平第一次收看了维也纳新年音乐会,很快我就被施特劳斯家族的音乐作品所吸引。而那一年的指挥,正好也就是今年的指挥:马泽尔。96年的新年音乐会上,中国的乐迷们第一次在新年音乐会中听到了中国的声音:马泽尔在用了很多种语言向全世界的听众致以新年的问候,最后一句就是中文“新年好!”。1999年,他再次指挥维也纳新年音乐会时,又说了“新年快乐!”。不知道今年他还会说什么。

也许是进口的CD太贵,也许是对音乐的追求还不够高,也许是DIY的精神过于强烈,1997年开始,我就自己开始录制维也纳新年音乐会,1997年是里卡尔多·穆蒂的指挥,我记得我是特地清洗了录像机的磁头,并买了一盒很贵的TDK的录象带来录制,后来又转录到两盒SONY的磁带上反复听(好像真得很土!)。

1998年是祖宾·梅塔的指挥,我同样录了下来,后来终于买到了一盒D版的CD,才结束了听磁带的历史。

1999年又是马泽尔的指挥,由于正好是高三的时候,这一次音乐会似乎没有能给我留下太多的印象。

2000年,又是里卡尔多·穆蒂的指挥,由于97他的指挥没能给我留下太好的印象,觉得他有点呆板,所以也就没有太多的关注,这一年开始,我开始把音乐的声音录成MP3。

2001年尼克劳斯·哈农库特指挥,这是我第一次看他指挥,所以印象也比较深刻,2001我刚在学校里买了电脑,所以2001年的曲子听的次数比较多:) 这一年,哈农库特别出心裁的将《拉德斯基进行曲》以他认为合适的较慢的速度放在了音乐会开始的时候演奏,与结束时的“正常”版本遥相呼应,让人留下了很深的印象。

2002年,小泽征尔指挥,我第一次淘汰了录象机,因为它实在是老态龙钟,录下来的东东已经没有办法听了,这一年,我直接通过电脑上的电视卡,把声音录成了MP3,由于前几年一直是元旦也在学校,所以总是到春节才能看到录下来的音乐会,这次终于算是看了实况直播了。这一年还挺感动,小泽征尔指挥乐队,请各位艺术家用各种语言向听众问好,由于乐队中有日本人,所以日语就有人说过了,所以,最后是小泽征尔自己用中文说了“新年好!”。

2003年,尼克劳斯·哈农库特再次执棒新年音乐会,没问题,如法炮制的用电视卡录了下来,那一年,央视的前方队伍在采访哈农库特时送给他一把二胡,他居然拿起来就拉出个“匈牙利进行曲”来,虽然是疙疙瘩瘩的,但至少让人听出来是啥了,感觉他巨强。

2004年,本科毕业了,有电视卡的同学也毕业走了,而我还留在学校继续读研,没东西可以录了,没办法,找了和我关系不错的郑关胜老师,用他的DV把音乐会录了下来(当然是通过视频线录,不是直接拍下来,我还没有傻),花费了三盒DV带,转成AVI文件占满了一块硬盘,只好花N个晚上时间把它们接起来,再压缩成RMVB,太累了,以后再也不敢了~~~对了,2004年的指挥又是里卡尔多·穆蒂,这一年,我改变了对他的印象,感觉穆蒂的指挥确实不错。但似乎他对央视前方人员送给他的琵琶并不感兴趣,没有像哈农库特那样表现出极大的兴趣,表现极为冷淡,让我颇感遗憾。

2005年,马上就是我收看维也纳新年音乐会的第9个年头了,看着价值26.9欧元的DVD,看来DIY又是必不可少的了,真不知今年能用上什么样的设备。不过现在要买到D盗的CD或DVD似乎比以前要方便多了,网上BT下载的威力也是不可低估,也许,今年可以用不着DIY了……

2005年维也纳新年音乐会节目单

·上半场曲目

Johann Strauß  Indigo Marsch, op.349
约翰•施特劳斯  蓝色进行曲,作品349号
Johann Strauß  Haute volée Polka, op.155
约翰•施特劳斯  上流人物波尔卡,作品155号
Joseph Strauß  Lustschwärmer, Walzer op.91
约瑟夫•施特劳斯 兴趣盎然的圆舞曲,作品91号
Joseph Strauß  Winterlust, Polka schnell op.121
约瑟夫•施特劳斯 冬趣快速波尔卡,作品121号
Joseph Strauß  Die Emancipierte, Polka Mazur op.282
约瑟夫•施特劳斯 解放波尔卡—玛祖卡,作品282号
Johann Strauß  Tausendundeine Nacht, Walzer op.346
约翰•施特劳斯  一千零一夜圆舞曲,作品346号
Johann Strauß  Die Bajadere, Polka schnell op.351
约翰•施特劳斯  印度舞伎快速波尔卡,作品351号

·下半场曲目

Franz von Suppé  Ouvertüre „Die schöne Galathée”
弗兰茨·冯·苏佩  美丽的加拉蒂亚序曲
Johann Strauß  Klipp-Klapp, Galopp op.466
约翰•施特劳斯  劈劈拍拍加洛普,作品466号
Johann Strauß  Nordseebilder, Walzer op.390
约翰•施特劳斯  北海风光圆舞曲,作品390号
Johann Strauß  Bauern-Polka, op.276
约翰•施特劳斯  农民波尔卡,作品276号
Johann Strauß  Fata Morgana, Polka Mazur op.330
约翰•施特劳斯  海市蜃楼,波尔卡—玛祖卡,作品330号
Johann Strauß  Vergnügungszug, Polka schnell op. 281
约翰•施特劳斯  游览列车快速波尔卡,作品281号
Joseph Hellmesberger jun.  Auf Wiener Art, Polka francaise
小约瑟夫·赫尔梅斯伯格  维也纳的艺术,波尔卡—法兰西对舞
Johann Strauß  Russische Marschphantasie, op.353
约翰•施特劳斯  俄罗斯幻想进行曲,作品353号
Johann Strauß  Ein Herz, ein Sinn, Polka Mazur op.323
约翰•施特劳斯  一心一意波尔卡—玛祖卡,作品323号
Johann und Joseph Strauß   Pizzicato Polka
约翰•施特劳斯和约瑟夫•施特劳斯  拨弦波尔卡
Johann Strauß   G’schichten aus dem Wienerwald, Walzer op.325
约翰•施特劳斯  维也纳森林的故事,作品325号
Eduard Strauß  Electrisch, Polka schnell o.op.
爱德华•施特劳斯  雷电波尔卡

·加演曲目

Johann Strauß   Auf der Jagd, Polka schnell op.373
约翰•施特劳斯   在猎场上快速波尔卡,作品373号
Johann Strauß   An der schönen blauen Donau, op.314
约翰•施特劳斯   蓝色多瑙河圆舞曲,作品314号
Johann Strauß Vater   Radetzky-Marsch, op.228
老约翰•施特劳斯   拉德斯基进行曲,作品228号

体验下一代微软平台开发Visual Studio 2005(3)

忙了好几天,终于又找到了一点空闲的时间来继续我们体验历程,今天我们要一起体验的是Visual C# 2005 Express Edition Beta。

Visual C# 2005 Express Edition Beta

Visual C# 2005 Express Edition Beta

可以说,打开VC#的界面,没有给我带来什么惊奇的感觉,但清新明快的启动页面还是吸引了我的目光。正如图所示,启动页上提供了一些对于体验者来说很实用的链接,其中有一项“Create a Screen Saver with the C# Starter Kit”恐怕能吸引很多像我这样的菜鸟级玩家,我们就从它开始!

按照提示,我们通过File>New>Project新建一个Screen Saver的项目,熟悉Visual Studio .NET 2003的朋友可能会很惊呀的发现新建项目时居然没有要求指定保存的路径。是的,在VC#2005中,采取了类似于Delphi、VB6的模式,只有在你要求保存项目时它才会让你指定路径,这样,对于我这样喜欢写写小测试程序的人来说是很方便的,不用担心在硬盘上留下越来越多的小垃圾项目。

好了,可以运行一下试试了,VC#2005已经为我们创建了一个可以运行的屏幕保护程序,这个程序还具有RSS新闻阅读的功能呢!程序默认的RSS地址是存放在app.config中的,您可以把它换成自己的Blog的地址试一下:)

自制RSS阅读器界面

自制RSS阅读器界面

从默认生成的项目中,我们可以看到,与VS2003相比,向导生成的代码把static void Main()从窗体类中独立了出来放到了一个名为Program的类中,这样结构对于刚上手的朋友来说可以说是更清晰了。除此之类,我们也已经可以从向导生成的代码中看到一些C#2.0的新特性。现在网上介绍C#2.0的文章已经相当的多,我在这里就不对它作全面的介绍,就看到多少说多少了。

先看生成的几个窗体的文件,VS2003中,通常一个窗体有两个文件组成.cs为代码,.resx为资源,在VC#2005中,通过运用C#2.0的Partial Class特性,把原来的.cs代码文件拆分成两个.cs文件,一个负责窗体界面构造代码的实现,一个负责其它代码的实现。所谓Partial Class特性,其实就是把一个类的的代码可以拆分写到两个.cs文件中,为实现这一特性,您仅仅需要在您想折分的类前加上partial关键字就可以了。这一小小改进实际上是有不少好处的,比如:用它就可以在窗体程序设计时实现了类似于ASP.NET的Code Behind技术。在多的个开发人员同时对一个类进行开发时,在Source Control方面也可以体现出优势:每个开发人员可以Check Out类的不同部分进行分别的同步的开发而不用担心与人它冲突。如果一个类的不同部分之间产生了冲突矛盾怎么办?一个类的元素可以有积累性和非积累性的两种,所谓积累性的,就是可以把多个部分组合起来的,比如实现的Interface,属性,方法,字段等等,非积累性的就是不可组合的元素,如可见性、基类等,要求类的每个部分对这些非积累性元素都作出一致的定义,当一个类的不同部分作出了不同的定义的时候,编译器将报错。

C#2.0另一个重要的特性就是匿名方法,很多时候,我们仅仅是为了使用一个委托,就不得不创建一个方法。比如说,我们在窗体上画个Button,双击一下,就生成了它的事件响应方法,VS其实做了不少事情,首先它得为Button.Click这个事件加一个委托:

this.button1.Click += new System.EventHandler(this.button1_Click);

然后生成相应的方法:

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}

当然这只是个例子,就像您现在看到的那样,这个方法也许只有几行代码,但委托还常常用于回调、异步调用、多线程等,这样的东东多了代码就会显得很拖沓。所以通过匿名方法的特性我们可以把上面的两部分代码组合起来,写成:

this.button1.Click += new System.EventHandler( delegate(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
);

VC# 2005中的重构

VC# 2005中的重构

C#2.0的新特性先说这么多,VC#2005主菜单条上的一个单词——Refactor——也许很吸引人的目光,VC#2005首先在VS家族中引入了代码重构的功能,正像您看到的,它实现了Extract Method、Rename、Encapsulate Field等几个重构的模式。记得在南京的DevDays2004大会上,讲解者为了演示这个功能郁闷的试了很多次,但当时的Whidbey技术预览版就是不给面子,始终不愿意展示出它强大的功能。还好在这个Express Beta 1上,这个功能已经可以正常的使用了,以Encapsulate Field为例举个简单的例子吧:

public class Test
{
public int i;
public void f()
{
i = 3;
}
}

通过在i上右击选Encapsulate Field,就得到了:

public class Test
{
private int i;
public int I
{
get
{
return i;
}
set
{
i = value;
}
}
public int f()
{
I = 3;
}
}

它可以自动把public的成员重构为private成员并公开public的属性,并且更新所有对Test.i的引用,把它们改成对Test.I属性的使用。

说到属性,可以一提的是C#2.0中引入了属性和索引的可见性,比如,可以这样:

public class Test
{
private int i;
public int I
{
get
{
return i;
}
protected set
{
i = value;
}
}
}

这就表示了I这个属性具的get具有public的访问级别,而set则只有protected的访问级,当然,用在set和get上可见性范围是不能超过属性本身的可见性的,你不能让一个属性具有private级别而它的get却有public的访问级。

不小心又回到C#2.0的新特性了,继续来看VC#2005的特性,除了重构,VC#2005在原本已经很好用代码编辑器上又下了功夫,从图中您可以看到,它对代码实现了智能标签的功能,可以帮助程序员更好的修改代码。对于正在编辑的代码,左侧可以显示出编辑的状态,修改过存过盘的代码会标上绿线,修改过未存过盘的地方会标上黄线,此外,新的括号匹配也跟Eclipse中一样好看好用了。IntelliSense中也增加了自动跟据调用生成函数原型的Generate Method Stud功能(感觉用它实施TDD真是太好了)和插入代码片段、Surround With等功能。和VC++2005一样,VC#2005同样也增加了自动查看鼠标当前位置的符号定义的功能,同样通过称之为Code Definition View的窗口来显示。Windows Forms窗体设计器也同前面介绍的VC++2005中一样做了相应的改进,这些改进的特性都给程序员带来了很大的方便。

VC# 2005中的重构

VC# 2005中的重构

准备收笔了却发现我忘记介绍了C#2.0中的一个最为重要的新特性:泛型。其实真得不是忘了,而是我对它的了解还相当的少,建议感兴趣的朋友先去看看大师们的文章吧,我会在后面的文章中结合自己学习的心得专门介绍这一重要的特性。

体验下一代微软平台开发Visual Studio 2005(2)

今天我们一起来详细探索一下VC++2005中C++/CLI为我带来了哪些新的特性。

首先,C++/CLI引入了一些新的数据类型关键字:

ref class/ref struct、value class/value struct、interface class/interface struct、enum class/enum struct,在C++/CLI中class和struct不具有C#的语意,而是仍然保持在C++中的区别,即默认的访问级别不同。在C++/CLI中,ref class/ref struct具有C#中class的语意,而value class/value struct具有struct的语意。相应的interface class/interface struct和enum class/enum struct分别类同于C#中interface和enum的语意。在这里,以ref class为例,虽然它们是两个单词,但它们共同组成了一个关键字,也就是说,在C++/CLI中,关键字中可能会包含空格,就是要把多个单词合起来理解成是一个关键字,而不能把它们孤立开。

在C++/CLI中,关键字还分为上下文敏感和上下文不敏感的,前面提到的关键字都是上下文不敏感的,即它们无论出现在哪里,都表示是关键字,不能用作标识符。而上下文敏感的关键字则只在它们应当出现的地方才作为关键字,否则将不具备任何特殊的含义,包括可以作为标识符使用。

新加入的上下文敏感数据类型关键字有:property、delegate和event,它们基本上都对等于C#中的相应关键字。

除了数据类据关键字,C++/CLI还引入其它一些新的关键字:abstract、new、override、sealed、generic、where、finally、gcnew、initonly、literal、nullptr,它们与它们在C#中的含义基本一致,稍后我会对其中部分C#中没有关键字作介绍。

C++/CLI中还引入了两个新的运算符,^和%,它们用于支持C++/CLI中新的“名柄”的概念。除此以外,C++/CLI还引入了一些新语言构造,它们是以库的型式来实现的,不作为关键字出现。

在C++/CLI中,由于引入了托管堆,所以,内存分配方法除了C++原有的Native的栈分配和堆分配,又多出一种在托管堆上的分配,配合这一理念的语法特性就包括了句柄,^和%运算符,gcnew等关键字。

下面是一个代码片断,举例说明了在C++/CLI中使用托管代码的情况:

ref class R
{
private:
int m_value;
public:
property int Value
{
int get()
{
return m_value;
}
void set(int value)
{
m_value = value;
}
}
};
int main()
{
R ^ r = gcnew R();
r->Value = 6;
}

这里演示了ref class即托管类的用法,还有新的property关键字以及托管对象分配的方法。可以这样理解^符号,它就是一种托管的指针,相当于Managed C++中的__gc指针,用它可以指向一个托管的对象,语法上用起来与*一致,只不过得用gcnew而不是new才能返回一个^类型的指针(称为句柄)。与此同时,新增的%运算符其实就对应了C++原来的&运算符,只不过它是用于托管对象的。而新增的nullptr关键字则相当于在C#中的null关键盘,用于表示一个空的托管对象引用。从这个程序中可以看出C++/CLI从语法层面上要比Managed C++好看好用得多。

喜欢C++的人往往都是对性能很敏感,对内存分配也很敏感,虽然在托管的情况下,内存分配从来就不是一个大问题,不过很多情况下我们也希望对对象的释放作更多的控制。在C#中用using(…){}就可以保证在对象超出个区域时自动调用它的IDisposable.Dispose()方法释放资源,C++/CLI提供了更优雅的写法:

int main()
{
R r;
r.Value = 6;
}

这样就行了,注意,是个托管引用对象,所以它并不会在栈上生成,它仍会在托管堆生成,但在栈上有对它的引用,并保证在超出引用域时调用IDisposable::Dispose()方法。很遗憾,在我下载试用的Visual C++ 2005 Beta 1中,这个特性似乎并没有实现,上面的写法会出现语法错误,据说是要打上Update补丁才可以支持。

C++/CLI就先说这么多,VC的文档中Express Library for Visual Studio/Visual C++ Express Edition/Reference/C/C++ Languages/C++ Language Reference/New C++ Language Features一节中比较全面的列出了C++/CLI中的新特性,通过它可以迅速的帮助我们了解C++/CLI。

Visual C++ 2005为我们带来了C++/CLI,而Visual C# 2005同样也为我们带来了新东西,C# 2.0在C#的基础上作了很多的改进,尤其是引入了泛型,我们后面再一起来体会它吧。

体验下一代微软平台开发Visual Studio 2005(1)

今天无聊在微软网站闲逛,不小心看到了Visual Studio 2005的各组件的Express Beta版本下载,于是就把它们下载了来下来试用。

最早看到有关VS2005的介绍是在DevDays 2004上,那时还是一个Preview的版本,随后就是在上一次的微软开发者大会上发到的MSDN开发精选杂志上看到了相关的介绍,但一直没有机会去尝试,这回就一起来尝尝鲜吧。

这次提供下载的是VS2005 Express Beta 1版包括VB、C#、VC++、J#、WebDev和SQL Server的2005版本,但都是Express即精简的版本,只提供了最基本的功能。另外与之配套提供下载的还有.NET Framework 2.0、VJ# Redistributable Pack 2.0和精简版的MSDN。这也东东也可以向微软订购免费的光盘,可惜要支付$30的邮费。

我依次安装了.NET Framework 2.0、VJ# Redistributalbe Pack和SQL Server 2005。然后安装VC++(其它几个包还在下载中)。整个过程都相当的顺利,除了SQL Server安装程序提醒我我的机器配置太低外:(

先来看看VC++吧。

VC 2005 界面

VC 2005 界面

界面上最明显的变化其实是最不重要的变化,与VS.NET2003相比,只不过是风格和布局有所调整。但我们也能看到一些新特性。

首先是增加了三个面板,左边的Program Manager,中间的Definition和Call Browser。

Program Manager的功能实话说我也没有闹明白,好像是用于管理一个项目的多种生成模式的设置的,比如Debug模式、Release模式等等。

Property Manager

Property Manager

Definition面板的功能我在Source Insight中见过,还是比较有用的,就是当编辑区中光标落在某个标识符上时,Definition面板中将相应显示出这个标识符的定义供你参考,并可以迅速切换到相关的位置以便修改。

Call Browser面板则可以显示出一个方法调用了其它哪些方法以及这个方法在哪些地方被调用过。感觉上这个功能对代码重构会很有帮助。很遗憾在VC++中没有找到重构的功能,好像只是在VC#中实现了。

VC++从2003版开始支持了Windows Forms的可视化设计,在2005版中,窗体设计功能也有了不少的进步,最明显的就是控件自动对齐功能,省去了原先很烦的对齐控件的操作。智能标记的功能(如果用过VS2003做ASP.NET就会注意到控件角上会有一个绿色的小三角,这就是智能标记功能,但那时并没有用)也开始在部分控件上使用。窗口设计器还增加了一种称为Property Editing View,可以对控件的常用属性进行十分方便的修改。

Windows Forms设计器

Windows Forms设计器

Windows Forms设计器

Windows Forms设计器

同时,就Windows Form本身而言,.NET 2.0也为它增加了不少的控件,新的DataGridView控件取代了原来的DataGrid,还增加了Serial Port(操作串口)、BackgroundWorker(多线程)、WebBrowser(对WebBrowser ActiveX控件的托管封装版本)等不少实用的组件。很遗憾的是我没有在这个Express版中找到对ADO.NET的支持,所以对数据访问还没有能有所认识。

其实VC2005最大的变化恐怕并不是开发环境的变化,由于原先VC用于支持.NET的Managed C++语法实在过于麻烦难看,所以VC2005引入了全新的语法来支持.NET,这就是最近的一个热门话题C++/CLI,它对标准C++进行了扩展,目前正在进行国际标准化的工作。关于C++/CLI的新特性,我正在学习中,随后将贴文总结。

Blog重新开张

经历了几天的新鲜劲儿后,我的Blog从6月底开始到现在就再也没有过动静。三个月来,周围朋友的Blog如同雨后春笋般建立起来,且以惊人的速度进行着更新,于是,经历了有想法而无行动的几天后,我决定我的Blog重新开张。

国庆前一直盼着国庆回家,回到家才发现家里和在学校一样无聊。除了看看电视,就还是只能在电脑面前度过大量的时间。

项目开发的需要,让我在这个学期把久违的.NET又捡了起来。微软平台开发最近热点的恐怕是Smart Client莫属了,从DevDays 2004上第一次听到这个概念,到9月27日微软开发者大会上的Smart Client专题,加上MSDN上铺天盖地的文章,让人感觉到了Smart Client的无处不在。

DevDays 2004上的IssueVision示例程序,让我第一次到接触到Smart Client的概念,也让我又一次体会到软件构架的重要,暑假里对DevDays 2004 DVD上的IssueVision和OpenHack两个示例程序以及经典的.NET示例Duwamish进行了学习,学到了很多有用的东西。这次9月27日的开发者大会上,又介绍了一个新的Smart Client的示例程序TaskVision,回到家,我又迫不及待的把它下载了下来进行学习。

TaskVision程序与IssueVision很相似,但相对来说功能更强劲一些,它的功能是对工作中的各种任务进行管理,可以创建任务并把它指定给某人去完成,某人也可以重新把任务指定给其它人去完成,完成的进度和所有的转交情况都将被记录下来。作为Smart Clinet的示例程序,Smart Client的几个核心特性在这个程序中都有不错的体现。它的官方网站说它演示了以下的技术:

  • Application offline and online model(脱机和连机工作模式,这是Smart Client的核心特性之一)
  • Application update model via HTTP (no-touch deployment) (无接触部署,Smart Client的核心特性,通过AppUpdate组件实现,很Easy)
  • Authorization to control user access to application features
  • Data collision handling (有脱机支持就必须有良好的数据冲突处理机制,ADO.NET为我们提供了很好的工具)
  • Printing and Print Preview (一个IssueVision没有的特性,很简单,不过很实用)
  • Windows XP Themes
  • Dynamic properties
  • Localization support (也是一个IssueVision没有的特性)
  • Accessibility support (limited) (同样是新特性)
  • Forms authentication using a database for user names/passwords (这个验证方式与IssueVision用的不同,我正在学习)
  • Asynchronous XML Web service class (提高用户体验的很重要的特性,IssueVision用了一个BackgroundWorker组件,似乎比TaskVision用的方法很简单一些)
  • ADO.NET data access using SQL stored procedures (通过存储过程进行各种数据库操作,是微软反复强调的调用模式)
  • Graphics development using GDI+ (TaskVision用它做了一些可视化的组件)
  • Integration between .NET Framework-based code and COM applications (COM interop) (对于IssueVision的一个新特性,正好对我很有用,它通过COM interop把数据输出到一个Excel的Sheet,而我的项目中需要把数据输出到一个AutoCAD的图纸。)

让我很惊呀的一点是TaskVision居然没有对缓存在本地的数据进行加密,而IssueVision对这一点则做得很好。另外一点是IssueVision中用的很有用的Commander模式和Observer模式也没有在TaskVision中使用。从总体上说,感觉TaskVision虽然是一个新的示例程序,功能比较强大,但完善程度和制作的精细程度与IssueVision相比还是差了一些,GotDotNet网站有一个协作改进的项目。

国庆期间,除了学习TaskVision,另一件占据大量时间的事情就是协同刘海先生测试他的新软件iDreamPiano 1.0,从2000年试用了刘海的HappyEO 1.0这个键盘模拟琴软件后,我就一直与他保持比较多的联系,全线参与了HappyEO 1.05到3.05(该软件已获Tucows五头牛认证),Jp-Word 1.0到2.0(一个简谱编辑软件)和iDreamPiano的测试工作。iDreamPiano也是一个键盘模拟琴软件,目前功能还不能与HappyEO的功能相比,但从技术上说它有一个重要的改进,就是不再依赖系统的MIDI设备发声,而是直接通过dls波表和DirectX发声,这样做会有几个明显的好处:1.在不同的机器上可以达到一致的发声效果,2.没有MIDI软波表可能带来的延时的情况,3.不再受General MIDI或者Roland的GS和Yamaha的XG标准限制,可以扩展出任意多的音色,包括民族乐器的音色。