语音服务器软件系统设计与实现

时间:2022-05-17 09:41:09

语音服务器软件系统设计与实现

摘要:利用语音卡发送语音通知是一种非常实用的技术,可以极大的提高日常工作的办事效率。重点介绍了语音服务器软件的开发流程、主要技术及解决方案,并给出了实现系统的主要状态图及伪代码。该方案对普通用户进行类似系统的开发具有一定的参考价值。

关键词:状态图;数据库;极性反转;线程

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2008)29-0370-02

Design and Implementatioan of the Voice Software Based on Server

YANG Yi1, DOU Wan-feng1,2

(1.College of Mathematics and Computer Sience,Nanjing Normal University,Nanjing 210097,China;2.State Key Laboratory of Novel Software Technology, Nangjing University,Nanjing 210093,China)

Abstract: Sending speech notice through voice card is of bread-and-butter function, it can greatly bring efficiency to normal work of people. It mainly introduces the process ,key technology and scheme of solution during of developing the software. and then it provides thesomepseudo codes for system running. It is helpful in the development of other similar system for ordinary users.

Key words: state chart; database; polarity reversal; thread

1 引言

在手机和固定电话日益普及的今天,基于手机和电话开发的计算机软件相继涌出。在高校院系、政府、会展中心和其他通知或者信息比较频繁的单位大多使用基于串口的短信群发系统[3]。作为短信群发系统的一个辅助,语音电话以语音的方式不知疲倦地向被通知者送达重要信息;同时由于有一段持续的响铃,更容易引起被通知者的注意。因此语音电话特别适合于不方便使用发送短信的人员。语音服务器软件对办公人员的高效工作、提高办事效率具有重要的意义。本文主要介绍了语音服务器软件系统状态转换图、使用到的主要技术和解决方案。

2 语音服务器软件系统示意图

语音服务器软件要实现计算机无需人工交互的自动对一组需要被通知的人员实现拨号功能。系统具体示意图见图1。首先,需要将市话线接入语音卡通道接口;然后,客户端把语音文件和需被通知人的号码上传到web服务器的指定位置;最后语音服务器应用程序从数据库中取数据,执行逐条拨号任务发送语音通知文件。

3 语音服务器软件处理状态转换图及部分伪代码

语音服务软件的功能主要处理拨号过程中的各种状态转换,这里重点给出系统的主状态转换图(图2)和拨号状态转换子图(图3)。

3.1 主状态转换处理流程详细描述

1) 检测数据库发送任务表(SendTable)中有没有记录,有则读入待发送队列转2),无则转4);

2) 是有效号码,并且语音文件存在,开始逐个拨号,发送队列拨号完毕则转3);

3) 发送结果插入提醒表(WarnTable)转4);

4) 等待一分钟转1)。

主流程伪代码描述:

VoiceNoticMain()//处理发送业务的主函数。函数//名作为实参传给创建的一线程函数

{ ……

switch(state){

case S_READ://读状态

取当前系统时间stime

if (数据库不空&&8

{ ……

加载语音卡

GetDataFromDB();//从数据库中读数据

DeleSendTable();//清空SendTable表

……

state=S_SEND;//置发送状态

}

else

{ DisableCard();//释放语音卡

state=S_WAIT;//置等待状态

}

break;

case S_SEND:

{ ……

逐个拨号发送通知

yzDialOut();

……

state=S_WRITE;//置写发送结果状态

}

break;

case S_WRITE://

{ ……

InsertWarnTable();//向提醒表中写发送结果

……

state=S_WAIT;

}

break;

case S_WAIT://等新任务状态

{……

Sleep(60000);//等待1分钟再去从数据库中读数据

……

state=S_READ;

}

break;

}// end of switch

}//end of VoiceNoticeMain

3.2 拨号状态转换子图详细描述

进入执逐条行拨号状态后,通过拨号检测函数Sig_CheckDial()[1]检测线路状态,如果是占线、无拨号音、无人接听、无信号则置语音卡通道为空闲状态,准备下一次拨号,如果已经连接,则依次摘机、播放录音文件、挂机、重置通道为空闲状态.限于篇幅省略伪代码描述。

4 关键技术及解决方案

4.1 与数据库集成

本系统以Visual C++6.0实现,采用ADO数据库访问接口连接Microsoft SQL Server 2000[2]。ADO技术是基于OLE DB的访问接口,是Visual C++中提供面向对象的OLE DB技术。OLE DB为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库,电子邮件,文件系统,文本和图形以及自定义业务对象等。ADO继承了,OLE DB的优点,并对OLE DB作了封装,属于高层访问接口。

4.2 极性反转问题

在插表(WarnTable:存储没有发送成功的原因及相关信息)的过程中,需要通过语音卡开发包中接口函数Sig_CheckDial()[2] 检测线路的状况,是占线,无拨号音,无人接听,还是无信号。对于固定电话,无论有无彩铃都可以准确的检测,参见图4-a和图4-b用信号分析工具Sig Analyze分析的两种波形,两图的波形频率一致,呈有固定频率的矩形。但是对于手机,有无彩铃反馈的信号与固定电话不同,如拨号后有一段彩铃或者有提示手机状态的一段人工录音,手机彩铃的波形频率不固定呈干扰信号,参见图4(d)。而波形的不规则导致无法检测对方是否摘机。解决办法是向当地电信服务提供商申请极性反转业务。反极就是把电话线的极性在极短的时间反转,总局终端的每条通道都有自己独立的极性反转检测电路,如果对方无人接听或错误提示,本地电话局不会反转极性。如果对方的电话一摘机,本地电话局在瞬间将用户的电话线极性反转。有了极性反转就能解决有彩铃手机无法检测的问题。

4.3 线程启动运行

Windows提供了两种线程: 辅助线程和用户界面线

程。两种线程均为MFC库所支持。在本系统中,由于发送语音消息需较多地消耗资源,特别是在发送人员较多的情况下,用户界面就如同死机般状态失去响应。若将发送语音消息作为一个辅助线程,就可解决这个问题。发送语音消息时,辅助线程在后台运行,就不会影响到用户界面的美观。

5 结束语

作为服务程序软件其安全、可靠是第一位的,无论在何时何地都要保证系统的稳定性、可靠性。所以在开发语音服务器软件时要求在逻辑上不能有半点马虎,在数据库操作上要安全、可靠,对于可能发生的异常要能及时捕获防止服务器宕机。此系统已经使用,达到了设计要求。

参考文献:

[1] 东进语音卡技术支持[EB/OL]./jszc.asp.

[2] 王瑞,于速.Visual C++数据库系统开发完全手册[M].北京:人民邮电出版社,2006.

[3] 钟金,窦万峰.基于串口的短信群发系统设计与实现[J].金陵科技学院学报,2005,21(6):15-19.

上一篇:基于OGRE的虚拟场景的构建 下一篇:有关SQL中架构问题的探讨