经过了一个月的努力,FreeTalk终于算是正式发布了。这个网络电话本来是老师留的一个作业,其实网上有现成的C++写好的代码,不过为了学习C#我决定还是重新写一个。这一个月里,先是用了1/4的时间学习C#,又用了1/4的时间研究DirectX,最后1/2的时间就是开始编写代码和调试了。
要说学习编程是从小学5年级开始的,那时学的是Basic,用的是Apple II+的电脑(可不是现在的苹果,比286还差),后来初中学Pascal,不过都是Dos模式下的编程。高中转向网站制作和动画设计,就没怎么再接触编程了。虽然这个FreeTalk很简单,但却是我Windows窗体程序的处女作,应该算是我的电脑学习生涯的里程碑吧:)
FreeTalk是基于.Net环境下用C#编写的,语音的采集和播放用DirectX下的DirectSound实现。C#应该是现在最新的编程语言,他大大简化了编程的复杂度,又是基于.Net平台,因此可移植性也很好。比如用C#写网络传输不用建立麻烦的Socket对象,用UDPClient/TCPClient就可以很轻松的搞定,C#的开发效率恐怕Java望尘莫及啊……音频部分其实也可以用Windows API来实现,不过无论从功能还是可扩展行都不如DirectX,DirectX提供了一个完整的多媒体和游戏解决方案,包括DirectDraw,Direct3D,DirectSound,DirectShow等等。音频的采集和播放用DirectSound或DirectShow都可以,由于DirectX对流式数据的完美支持,使得音频的时时采集和播放能够很容易的实现。
在后续的开发过程中,我还打算对这个软件加以改进。一是增加音频压缩编码,这样能够更加节约带宽。二是采用DirectShow代替DirectSound以实现视频音频聊天。第三就就是增加中央目录服务器,可以让用户更方便的选择聊天对象……
回想整个开发过程,最难忘的就是查找资料,逛书店、搜Google、找ebook、混csdn……关于C#网络编程的资料确实不少,不过查找DirectX9 Managed的资料就像大海捞针,逛遍了海图也没发现一本相关的书籍。手头上只有DirectX SDK可以参考,又是英文的,所以感觉自己的英文水平提高了不少:)软件开发进度曾一度停滞在解决音频时时播放这个问题上,SDK中又没有详细介绍,最后很偶然的机会我在国外的一个BBS上看到了一个求助帖,其中是他一段错误的代码,而他正确的部分正是我需要的,我正确的部分也正是他需要的……:)
这一个月以来最要感谢的就是我的好朋友DigitalGhost,由于我是从对C#一窍不通开始学起,所以很多最基本的问题都解决不了,DigitalGhost给予了我很大的帮助和支持,还有从他那抢的两本书也让我受益匪浅。
在开发这个软件的过程中我也深刻的体会到,编写程序其实是很缺乏创造力的,我们只是在老美构建的程序世界中不断的Discovery而不是Invent,和使用他们早已准备好的资源。就算编写出再nb的程序,我们也只不过是IT民工罢了……



