具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,IAD设备的处理器芯片内部集成USB-Host模块,而且IAD设备系统内核支持USB设备的热插拔检测和分区的挂载,为此可以通过IAD设备的USB-Host接口实现语音数据的大容量存储。本发明实施例设计了一种利用USB接口存储语音留言的USB语音信箱。语音信箱数据库存储在IAD设备外接的USB存储设备上,IAD设备的处理器将截取的VoIP网络和PSTN网络中的留言语音数据转换成特定格式的音频文件存放在语音信箱数据库中。由于USB设备的热插拔和可移动的特性,该USB语音信箱可以根据用户需要进行更换以实现语音信箱容量的扩充。留言可以方便的通过USB设备转存到PC机上。另外,USB设备除存储留言外还可以扩展IAD设备的存储空间,协助IAD设备存储一些只读数据如提示音文件,有助于减小IAD设备体积。
请参阅图1,为本发明实施例提供的基于IAD设备的语音处理方法的实现流程,其包括以下步骤:
在步骤S101中,IAD设备截取VoIP网络和/或PSTN网络中的留言语音数据;
在步骤S102中,IAD设备将截取到的留言语音数据转换成特定格式的音频文件;
在步骤S103中,IAD设备将所述音频文件转存至IAD设备外接的USB存储设备上。
作为本发明一实施例,USB存储设备挂载到IAD设备,以及USB存储设备从IAD设备中卸载的实现流程如下:
在步骤S201中,检测USB的热插拔事件;
当USB存储设备挂载到IAD设备时,IAD设备获取环境变量add的值,根据所述环境变量add的值确定有USB存储设备挂载到IAD设备;当USB存储设备从IAD设备中卸载时,IAD设备获取环境变量remove的值,根据所述环境变量remove的值确定USB存储设备从IAD设备中卸载。
在步骤S202中,当检测到USB插入事件时,使用mount命令挂载USB存储设备到指定的目录;
在步骤S203中,当检测到USB拔出事件时,使用umount命令卸载USB分区;
在步骤S204中,初始化USB语音信箱,包括在USB分区目录下创建语音信箱目录和初始化留言索引表,若语音信箱目录已经存在则对留言索引表和留言文件进行容错校验并重建留言索引表。
作为本发明另一实施例,语音信箱目录管理的实现流程如下:
由于每个FXS终端对应的语音信箱在USB存储设备中是独立的,所以每个FXS终端的语音信箱所属文件均由endpt进行区分。另外为了避免过多的对目录文件进行读、写、查找等操作,所有留言文件信息均由留言索引表文件统一管理,这就是index目录的作用。record目录下存放的是每个FXS终端语音信箱的留言文件,其格式统一为wav格式,可以直接通过多媒体播放器播放。voice Notify 目录根据需要可以存放在USB存储设备中,也可以直接放在IAD设备的flash中,该目录下存放语音信箱业务操作过程中用到的导航提示音文件以及问候语文件,所有的导航提示音文件包括默认的标准问候语文件均放置在default目录下,用户自己录制的个性化外出问候语则存放在custom目录下并用endpt进行区分。
作为本发明另一实施例,留言语音数据管理的实现流程如下:
PSTN网络的留言模拟语音数据经采样量化后为线性PCM数据,VoIP网络的语音留言的通信格式是通过协商确定的,为了避免各种格式之间的编解码转换,在此需要修改IAD设备的媒体能力,并将通信格式强制协商为G.711格式,这样VoIP网络的语音留言可以统一为G.711格式的语音数据。G.711格式又分为U律和A律两种,其压缩算法在所有的语音压缩算法中复杂度最低而且音质最好,每个采样的语音数据经G.711编码后所占空间是线性PCM数据的一半,另外,G.711格式语音数据不用经过编解码转换只需要加上特定的wav头域即可生成wav文件。鉴于以上原因,本发明实施例的所有留言及提示音的语音数据均统一为G.711格式,并且将留言语音数据封装成特定格式的wav音频文件。
为了方便对留言进行管理和读写操作,语音信箱需要记录每条留言的基本信息,这些信息包括:来电号码、目的号码、留言时间(年月日时分秒)、文件大小(留言时长)、编码类型(U律/A律)和已读标记。其中来电号码、目的号码和留言时间组合在一起形成wav文件名,该文件名唯一标识每一条留言,不会造成重复,并且能清晰的表示每条留言的基本信息,打开留言目录所有留言信息便一目了然,极大的方便了用户查阅。
请参阅图2,wav文件由wav头域和语音数据构成,文件大小(如留言时长)和编码类型记录在wav文件的头域中。本实施例对wav文件进行了修改,在wav文件的末尾增加了已读标记和校验和以满足语音信箱对留言管理的需要,增加的已读标记和校验和共占8个字节并且不计算在RIFF文件内,不会对wav文件造成影响。
wav头域中带引号的部分均为字符,riffSize由整个wav文件大小(不包含已读标记和校验和所占的8个字节)减去8计算而来,fmtSize不带附加信息时固定为16,编码方式分为6和7两种,分别对应G.711A律和G.711U律两种编码类型,声道数目在此为1表示单声道,采样频率与IAD设备SLIC语音采样频率相同为8k(十六进制为0x1F40),G.711格式每个采样所需字节数为1个字节,每秒所需字节数可由采样频率乘以每个采样所需字节数计算而来为0x1F40,每个采样所需比特数为8,dataSize的值即留言的文件大小,已读标记为1表示该留言已听,已读标记为0时表示该留言未听(新留言)。在播放未听留言时则根据此标记判断是否播放该留言,未听留言播放完毕后会将该标记改为1,下次播放未听留言时将不再播放该条留言。校验和由wav文件名、wav头域以及已读标记计算而成,当已读标记变动后需要重新计算校验和。由于在播放留言时语音数据被破坏只会造成一定的噪音并不会影响文件的正常播放,再考虑到语音数据比较庞大,为此本发明实施例并没有对语音数据进行全局校验,只对文件名和文件内容的头尾部分进行校验,这样可以更加快速有效的对文件的完整性进行检测,保证留言的正常播放。
在本发明实施例中,所述特定格式的音频文件的生成过程如下:
步骤S301,远程话机呼叫IAD设备,IAD设备检测到无人应答或遇忙情况下,自动转入语音信箱开始录音;
步骤s302:IAD设备判断USB分区的预留空间是否充足;
例如按120s录音时长计算需要的空间大概为1M,低于1M则认为USB容量不足;
步骤s303:若充足,获取来电号码、目的号码和当前留言时间组合成wav文件名,根据目的号码确定endpt的目录,并在该目录下创建wav文件;若预留空间不足,则结束本次操作;
步骤s304:在创建的wav文件头部填充wav头域,wav头域中的riffSize和dataSize的值初始为0;
步骤s305:判断留言是否结束,若留言结束则跳至步骤s307;
步骤s306:向wav文件中写入G.711格式的语音数据;
步骤s307:留言结束后修改wav头域的riffSize的dataSize的值;
步骤s308:wav文件末尾写入已读标记,新录制的留言已读标记为0;
步骤s309:根据wav文件名、wav头域和已读标记计算校验和;
步骤s310:将校验和写入wav文件末尾,紧跟已读标记之后;
步骤s311:关闭打开的wav文件;
步骤s312:根据来电号码、目的号码、留言时间、留言时长、编码类型和已读标记计算校验和并生成新的留言索引节点信息,最后将留言节点信息添加到留言索引表中;
步骤s313:整个录音过程结束,退出语音信箱。
作为本发明的另一实施例,留言索引表管理的实现流程如下:
为了对每个FXS终端语音信箱的留言文件进行统一管理,本发明实施例为每个语音信箱建立了一个留言索引表recordIndex,留言索引表的结构如图3所示。整个留言索引表分为索引头域和索引节点两部分。索引头域记录每个FXS终端语音信箱的留言统计信息,如留言起始位置、留言总数、未读留言的总数、未读留言起始位置等,在此索引头域预留一部分空白区域,以备信息的扩充。每条留言索引节点中记录的来电号码、目的号码、留言时间、留言时长、编码类型和已读标记与前面所述的留言文件中记录的留言信息完全对应。其中留言时间采用十六进制表示,不再使用年月日时分秒表示的字符串,为方便VoIP的RTP语音传输的需要,编码类型不再使用wav文件中规定的编码方式,而采用RTP协议中规定的类型:0表示G.711U律,8表示G.711A律。校验和由每条留言的索引节点信息生成,以保证索引节点的完整性。
管理留言索引表的操作接口有添加、插入、搜索、修改和删除。添加操作是指在留言总数对应的索引节点的末尾添加一条留言索引节点,插入操作是指在某个留言结点位置插入一条留言索引节点,该节点之后的所有留言索引节点均后移,修改操作是指修改留言索引节点信息以及索引头域信息,如播放完一条留言后需要修改已读标记并重新计算校验和,同时未读留言起始位置和未读留言总数也要相应的修改,删除操作是指删除某个位置的留言索引节点,该节点之后的所有留言索引节点前移。添加、插入、修改和删除操作的同时会导致索引头域信息的改变。
操作留言时有两种索引方式:根据留言信息索引和根据节点位置索引。留言信息索引主要用于搜索符合某个条件的所有留言,如删除超期留言文件操作时则根据索引节点中的留言时间信息判断该留言是否超过保留期限,过滤留言时则根据索引节点中的来电号码或目的号码信息过滤掉不符合条件的留言。节点位置索引用于本地话机听取和管理留言的操作,如播上一条留言、下一条留言等则需要根据当前节点位置计算出待播放的留言的节点位置。确定索引表中对应的索引节点后再根据索引节点信息中的来电号码、目的号码、留言时间等信息生成wav文件名,然后打开对应终端目录下此文件名的留言文件。
作为本发明另一实施例,操作某条留言时,IAD设备会进行双重容错校验,即索引节点容错校验和留言文件容错校验,具体实现流程如下:
步骤S401,根据留言索引表中的索引节点信息计算校验和,其中该校验和由来电号码、目的号码、留言时间、文件大小、编码类型和已读标记生成。
步骤S402,将计算所得的校验和与从索引节点中读取的校验和相比较;
步骤S403,若两个校验和相同则进入留言文件容错校验过程,若不同则把当前索引节点从索引表中删除;并修改索引头域相应的统计信息。
在本发明实施例中,进行留言文件容错校验的实现流程如下:
首先由wav文件名、wav文件头域和末尾的已读标记计算校验和,若计算所得的校验和与wav文件末尾读取的校验和相同则进入留言信息比较过程,若不同则删除该留言文件以及对应的索引节点;并修改索引头域相应的统计信息。
在本发明实施例中,留言信息比较的步骤具体为:读取索引节点和wav文件中的来电号码、目的号码、留言时间、文件大小、编码类型、已读标记等信息并依次进行比较,若所有字段比较结果都相同则可以执行留言文件的读写操作。
由上可知,双重容错校验过程极大地提高了容错校验的可靠性,降低了出错率。
作为本发明另一实施例,由于USB存储设备的可移动性,为此可以将USB存储设备直接从IAD设备拔掉插入PC机,由PC机播放和管理wav格式的留言。PC机进入USB存储设备的record目录后可以双击打开多媒体播放器播放留言也可以删除留言。由于PC机删除留言文件或手动添加一些新的文件并不会自动修改留言索引表,抑或留言内容或留言索引表内容因操作不当或PC机故障被破坏,这样就造成了留言索引表内容与留言文件不完全同步或是出错的情况,为此每次将USB存储设备插入IAD设备或IAD设备重启时也需要进行容错校验并重建留言索引表。具体实现流程如下:
步骤s501:当IAD设备上电重启或USB存储设备插入IAD设备后,开始进行如下步骤;
步骤s502:读取留言索引表头域信息,获取留言总数(即索引节点数);
步骤s503:判断是否到了索引表的末尾,若到了索引表末尾则跳至步骤s513;
步骤s504:读取索引表中的节点信息;
步骤s505:根据索引节点信息(来电号码、目的号码、留言时间、文件大小、编码类型和已读标记)计算校验和;
步骤s506:比较计算的校验和与从索引节点中读取的校验和的值是否相同,若不相同则表示该索引节点内容有出错,进入步骤s507,否则跳至步骤s508;
步骤s507:删除出错或对应留言不存在的索引节点,执行完删除操作后继续读取下一个索引节点信息返回步骤s503;
步骤s508:由索引节点的来电号码、目的号码和留言时间生成wav文件名,并判断该wav文件是否存在,若不存在返回步骤s507;
步骤s509:根据wav文件名、wav文件头域、wav文件末尾的已读标记计算校验和;
步骤s510:比较计算的校验和与从wav文件末尾读取的校验和的值是否相同,若不相同则表示留言文件出错,执行步骤s511和s507,否则跳至步骤s512;
步骤s511:删除出错的留言文件以及对应的索引节点,返回步骤s503;
步骤s512:比较索引节点记录的留言信息和wav文件中记录的留言信息是否相同,若不相同则表示该留言文件出错,执行步骤s511和s507,否则返回步骤s503读取下一条索引节点信息;
步骤s513:索引表所有节点均校验完毕后,开始扫描留言文件目录获取留言文件列表;
步骤s514:判断是否到列表末尾,若到了列表末尾则跳至步骤s520结束留言校验和索引表重建的过程;
步骤s515:根据留言文件名中的来电号码、目的号码和留言时间信息判断索引表中对应节点是否存在,若索引节点已经存在则表示该留言文件已经校验过返回步骤s514,若索引节点不存在则继续执行s516;
步骤s516:根据wav文件名、wav文件头域、wav文件末尾的已读标记计算校验和;
步骤s517:比较计算的校验和与从wav文件末尾读取的校验和的值是否相同,若不相同则表示留言文件不可靠执行步骤s518,否则跳至步骤s519;
步骤s518:删除不可靠的留言文件,返回步骤s514;
步骤s519:生成新的索引节点信息(包括校验和)并根据留言时间的先后顺序插入到索引表中合适的位置,同时需要修改索引头域信息;
步骤s520:留言文件列表处理完毕后,结束留言校验和索引表重建的过程。
作为本发明另一实施例,访问留言文件的实现流程如下:
基于IAD设备的USB语音信箱可以通过本地话机和远程话机访问留言,通过按键交互式操作方式根据导航提示音选择要播放的留言,如选择播放所有未听留言时,IAD设备会从留言索引表的头域中读取未读留言个数和起始位置等信息,然后从未读留言起始位置开始依次播放所有未听留言,某条未听留言播放完毕后,会修改索引节点的已读标记并重新计算校验和,同时会修改索引头域的索引统计信息。
除通过话机方式访问语音信箱,还可以通过IAD设备的Web配置页面访问语音信箱,Web页面会获取IAD设备的所有FXS口的语音留言索引表并按时间先后顺序逐条显示在Web客户端,每条留言显示的内容包括FXS终端号、来电号码、目的号码、留言时间、文件大小(留言时长)、已读标记等,Web用户通过查看留言列表即可一目了然的掌握所有留言的基本信息,当Web用户想显示某来电号码或目的号码的所有留言时可以添加过滤规则,通过索引节点中来电号码或目的号码进行过滤显示需要的留言列表。除显示和删除留言信息外,Web用户也可以播放留言,Web客户端首先将要播放留言的FXS终端号和来电号码、目的号码、留言时间等信息传递给IAD设备侧的Web服务器,Web服务器根据获取的信息生成wav文件名,然后打开USB存储设备中该wav文件,经过容错检验后读取wav音频数据返回给Web客户端,Web客户端接收到wav音频数据流自动关联并打开默认播放器播放留言。
另外,针对USB的移动特性,USB语音信箱可以完全脱机运行,即插入PC机由用户直接访问USB语音信箱的目录下的文件,用户可以像操作普通的wav音频文件一样操作语音信箱留言。
请参阅图4,为本发明实施例提供的基于IAD设备的语音处理系统的结构。为了便于说明,仅示出了与本发明实施例相关的部分。所述基于IAD设备的语音处理系统可以是内置于IAD设备中的软件单元、硬件单元或者是软硬件结合的单元。
所述基于IAD设备的语音处理系统包括:截取模块101、转换模块102、以及转存模块103。
截取模块101,用于截取VoIP网络和/或PSTN网络中的留言语音数据。
转换模块102,用于将截取到的留言语音数据转换成特定格式的音频文件。
转存模块103,用于将所述音频文件转存至IAD设备外接的USB存储设备上。
作为本发明一实施例,所述系统还包括:检测模块、挂载模块、卸载模块、以及初始化模块。
检测模块,用于检测USB的热插拔事件;具体为:当USB存储设备挂载到IAD设备时,获取环境变量add的值,根据所述环境变量add的值确定有USB存储设备挂载到IAD设备;当USB存储设备从IAD设备中卸载时,获取环境变量remove的值,根据所述环境变量remove的值确定USB存储设备从IAD设备中卸载。
挂载模块,用于当检测到USB插入事件时,使用mount命令挂载USB存储设备到指定的目录。
卸载模块,用于当检测到USB拔出事件时,使用umount命令卸载USB分区。
初始化模块,用于初始化USB语音信箱,包括在USB分区目录下创建语音信箱目录和初始化留言索引表,若语音信箱目录已经存在则对留言索引表和留言文件进行容错校验并重建留言索引表。
作为本发明另一实施例,所述系统还包括:转入模块、空间判断模块、文件创建模块、填充模块、格式写入模块、修改模块、标记写入模块、计算模块、以及生成模块。
转入模块,用于当远程话机呼叫IAD设备,且当检测到无人应答或遇忙情况下,自动转入语音信箱开始录音。
空间判断模块,用于判断USB分区的预留空间是否充足。
文件创建模块,用于若判断出预留空间充足,获取来电号码、目的号码和当前留言时间组合成wav文件名,根据目的号码确定endpt的目录,并在该目录下创建wav文件。
填充模块,用于在创建的wav文件头部填充wav头域,wav头域中的riffSize和dataSize的值初始为0。
格式写入模块,用于向wav文件中写入G711格式的语音数据。
修改模块,用于留言结束后修改wav头域的riffSize的dataSize的值。
标记写入模块,用于在wav文件末尾写入已读标记,新录制的留言已读标记为0。
计算模块,用于根据wav文件名、wav头域和已读标记计算校验和,将校验和写入wav文件末尾,紧跟已读标记之后。
生成模块,用于根据来电号码、目的号码、留言时间、留言时长、编码类型和已读标记计算校验和并生成新的留言索引节点信息,最后将留言节点信息添加到留言索引表中。
作为本发明另一实施例,所述系统还包括:校验和计算模块、比较模块、删除模块、以及留言文件容错校验模块。
校验和计算模块,用于根据留言索引表中的索引节点信息计算校验和,其中该校验和由来电号码、目的号码、留言时间、文件大小、编码类型和已读标记生成。
比较模块,用于将计算所得的校验和与从索引节点中读取的校验和相比较;
删除模块,用于若两个校验和不同则把当前索引节点从索引表中删除。
留言文件容错校验模块,用于若两个校验和相同则执行留言文件容错校验过程。
在本发明实施例中,留言文件容错校验模块,具体用于首先由wav文件名、wav文件头域和末尾的已读标记计算校验和,若计算所得的校验和与wav文件末尾读取的校验和相同则进入留言信息比较过程,若不同则删除该留言文件以及对应的索引节点。
在本发明实施例中,留言信息比较的步骤具体为:读取索引节点和wav文件中的来电号码、目的号码、留言时间、文件大小、编码类型、已读标记等信息并依次进行比较,若所有字段比较结果都相同则可以执行留言文件的读写操作。
综上所述,本发明实施例有如下有益效果:
1)所有留言、录制的问候语均保存在IAD设备外接的USB存储设备中,导航提示音可以根据需要决定是否存储在USB存储设备中,有利于减小IAD设备体积和扩展IAD设备存储空间;
2)语音留言统一保存为G.711单声道wav格式音频文件,不需要将留言语音数据进行编解码转换成wav音频文件,只需要加上特定的wav文件头即可生成可用多媒体播放器播放的wav文件,该wav格式文件所占空间只有通用的16bit PCM双声道wav文件的四分之一;
3)USB语音信箱具有可移动性并且可以脱机运行,即使在IAD设备不能正常工作的情况下也可以访问语音信箱中留言,将USB语音信箱插入PC机即可方便的查看和播放wav格式的留言文件,也可以方便将语音信箱的留言转存到PC机;
4)USB语音信箱容量可扩充,用户根据自己的需要可以更换USB存储设备以扩充语音信箱容量;
5)对用作语音信箱的USB存储设备没有特殊要求,支持挂载NTFS和FAT格式的USB存储设备;
6)由来电号码、目的号码、留言时间组成留言的wav文件名,可以唯一标识每一条留言使之不产生冲突,也可以方便用户查看和管理;
7)通过wav文件的文件名、头域和末尾的已读标记等字段复用的方式记录每条留言的基本信息(来电号码、目的号码、留言时间、文件大小、编码类型、已读标记),而且这些信息不会增加留言文件额外的负担,也不会影响留言文件的正常播放;
8)由留言索引表统一管理留言,留言索引表同步记录每条留言的索引节点信息和留言统计信息,留言索引表支持留言的添加、插入、搜索、修改和删除操作;
9)采用双重容错校验(留言索引节点容错校验和留言文件容错校验)保证留言的可靠性;
10)留言文件的容错校验只对wav文件名、wav文件头域和wav文件末尾的已读标志等内容进行校验,不需要对语音数据进行全局校验,这样在提高校验效率的同时保证wav文件的完整性;
11)当USB语音信箱移动后留言索引表或留言文件被破坏或内容不同步情况下,IAD设备上电重启和热插拔时会扫描索引表和留言文件进行容错校验并重建留言索引表;会对语音信箱进行自检,自动删除被破坏或不符合语音信箱留言格式的留言,自动向留言索引表中添加新的留言。
12)可以通过IAD本地话机、远程话机、Web配置页面访问USB语音信箱,也可以在脱机情况下由PC机访问USB语音信箱;
13)Web页面可以显示所有语音信箱留言,也可以应用过滤规则只显示某来电号码或目的号码的留言,Web页面还可以执行播放和删除留言操作;
14)用户通过本地话机、远程话机执行播放未听留言功能时,当该条未听留言播放完毕后会将已读标记设为1,下次再执行播放未听留言功能时将不再播放该条留言。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机或嵌入式可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。