C#Winform做一个简单的呼叫中心的心得
C# Winform是我们大一时学的一基础课程,现在在大二我们都让我们做一个简单的呼叫系统,不时我做的时候没有太在意,就按教师说的支做了,但做来做去没有硬件,只做一个样子(只有其表没有其主要内容),太没意思了,于是在网上找了一些关二网络语音通信的资料用三天的时候写了一个容易的的语音通系统,当写完个小有点小功能的软件后,我想到了现实中,将来的呼叫中心,将完用用电脑软件的语音识别来完成,当用记打进电话来的时候会根据用户所按的键进行自的分析,选的是什么项目,然后进行客户与计算机程序的交流,这样从一方面为一些大型企业节省了不少的开销,比较原来用20个人来完成的工作现在只要有一台电脑完全可以OK了,并且在程序中可以设置管理员进行监听,同样具有现在所拥有的功能。想到这里我想起了我刚学asp.net时写的一个在线英语考试系统,里面有荐为在线学习(其功能为用记可以在线试听管理员所录入的所有信息内容,),如果用户的浏览器不支持用户还可以下载其音频来在自己的计算机上来试,当初开发这个功能的原因,是因为,我们学软件开发学习英语非常重要,这样的话我们就可以在边敲代码边听单词。这样下来就可以学到不少单词,别有还有考试的功能,考生管理等,我就不说了,加正题,于是我就把这个功能加到了这个呼加中心的项目上来了,让我们这个呼叫中心有了语音阅读的功能,和语音报时的功能,同时还可以有语音整点播报,写完了这个小功能我就放了半天,突然想到,现读留言也是一个将概念于是我试着做了做,但由于时候的关系,我没有做出来我没有放弃,我想实现不了这功能,那就实现一个发语音邮件吧,发语音邮件就就要涉及到要录音。因为用C#来控制Mic比较麻烦,我没有做这个,我想起来我原来的英语考试系统上也是有这种功能,这们我就把文字换成了语音以附件的形式发到邮件接收人的那里,这里Asp.net和C#是一点也不想同的我试了很多次,老天从来没有让我坚持的事情失败过,我终于成功了,我高兴的给我们同学了几交OK成功!这只是一个小应用,将来我会继续研究语音技术,争取做一个我符合我想法软件,来与社会分享
这是我写录音时用到的资料张贴出来和大家分享一下:
1 DirectSound是什么?
DirectSound 是微软提供的DirectX API 的一部分。它使你能以极低的时延播放声音,使应用程序可以高度利用硬件资源。
2 DirectSound能做什么?
2.1 按照WAV格式播放声音。
2.2 可以同时播放多种声音。
2.3 将高优先级的声音分配给由硬件控制的缓冲区。
2.4 将普通的声音融入自定的3D环境中。
2.5 可以给声音添加不同的效果,比如回声,合唱等。
2.6 从麦克风或其它音频输入设备中捕获WAV声音。
3 DirectSound有哪些主要对象?
对象 | 说明 | 作用 | .Net中的类或结构体 |
设备对象 | 每个应用程序只有一个设备对象 | 用来管理设备,创建辅助缓冲区 | Microsoft.DirectX.DirectSound.Capture |
主缓冲区 | 一个应用程序只有一个主缓冲区 | 操控声音捕捉缓冲区和产生混音效果的区域 | Microsoft.DirectX.DirectSound.CaptureBuffer |
辅助缓冲区 | 每一个声音对应一个辅助缓冲区,可以有多个辅助缓冲区 | 用来存储要播放的声音文件,可建立多个辅助缓冲区来放多个要播放的声音文 | Microsoft.DirectX.DirectSound.SecondaryBuffer |
事件通知对象 | 一个缓冲区可以有多个通知对象 | 用于在缓冲区的特定点触发通知事件,来通知程序执行操作 | Microsoft.DirectX.DirectSound.Notify |
4 其它辅助对象
对象 | 作用 | .Net中的类或结构体 |
音频格式 | 定义WAV音频格式,如采样频率、量化位数、声道数等 | Microsoft.DirectX.DirectSound.WaveFormat |
通知的事件 | 通知正在等待的线程已发生事件 | System.Threading.AutoResetEvent |
5 必需知道的关键点
实在是太不厚道了!!!!!辛苦写了半天,提交前没有事先复制一份,结果提交了半天给我展示了一个“无法显示该页面”,害得我又得从上次保存的地方开始写。真晕呀!!还不知道能不能记起刚才写的。都有点不想写了,可又觉得可惜。可恶!!可恶!!
5.1 WAVE格式
WAVE是录音时用的标准的WINDOWS文件格式,扩展名为“WAV”,
我们使用DirectSound采集的WAV声音,其音频数据是按照PCM(脉冲编码调制,对连续变化的模拟信号进行抽样、量化和编码产生的数据,0和1的组合)调制后放入缓冲区的。
WAVE文件格式采用RIFF文件格式结构,对PCM数据和其它一些音频信息进行相应的编排,从而最终形成的WAVE文件才能被音频播放器识别,才能进行播放。
5.2 缓冲区指针
缓冲区是存放音频数据的地方,并且它还提供了我们两个指针:读指针和捕捉指针。它们的位置按照相对于缓冲区起始位置的偏移量计算。读指针位于当前已经被完全捕捉到缓冲区的数据末尾。捕捉指针位于当前将要从硬件中复制的数据块的末尾。如果你想从缓冲区中读取数据,则只能从已经完全写入缓冲区的数据中读取,也就是说我们只能从偏移量小于读指针的地方读取。
5.3 缓冲区通知
大家应该都知道时间相同的音频文件,WAVE文件会比其它格式的音频文件大得多,这是因为WAVE文件没有对数据进行压缩。如果录音的时候,不限制缓冲区大小,那么你录制很短的时间可能就会占用很多内存,说不定不过多久,你的1G内存就不够用了。因此我们必须对缓冲区的大小进行限制,而且当缓冲区满了之后,还可以重新从缓冲区起始处开始,用新的数据覆盖旧的数据。那旧的数据怎么办呢?如果你不想丢失旧的数据,那就得在旧的数据被覆盖之前,将它转移到其它地方。
如何才能在旧的数据没有被覆盖之前,将它转移走呢?如果是你,你会采用什么办法?