1、第6章 语音处理技术及应用 第6章 语音处理技术及应用 6.1 概述概述 6.2 凌阳音频技术简介凌阳音频技术简介 6.3 常用应用程序接口常用应用程序接口 6.4 语音压缩方法语音压缩方法 6.5 键控放音程序键控放音程序 6.6 语音识别技术语音识别技术 第6章 语音处理技术及应用 6.1 概概 述述 6.1.1 音频信号音频信号我们所说的音频是指频率在20 Hz20 kHz的声音信号,分为波形声音信号、语音信号和音乐信号三种。其中波形声音就是自然界中的声音,是声音数字化的基础。语音也可以表示为波形声音,但波形声音表示不出语言语音学的内涵,语音是对讲话声音的一种抽象,是语言的载体,是人类社
2、会特有的一种信息交流系统,是社会交际工具的符号。音乐与语音相比更规范一些,是符号化了的声音。但音乐不能对所有的声音进行符号化,乐谱是符号化声音的符号组,表示比单个符号更复杂的声音信息。第6章 语音处理技术及应用 6.1.2 音频信号的抽样和量化音频信号的抽样和量化要将音频模拟信号进行数字化处理,就必须将模拟信号转换为数字信号。模拟信号数字化有多种方法,目前采用最多的是信号波形的A/D变换法(波形编码)。它直接将时域信号波形变换为数字序列,接收恢复的信号质量高。此外,还有参量编码(后面介绍)等。常用的波形编码方法有脉冲编码调制(PCM调制)和增量调制(DM)。数字音频信号的质量取决于采样频率和量
3、化位数这两个重要参数。此外,声道的数目、相应的音频设备质量也会影响音频质量。第6章 语音处理技术及应用 6.1.3 音频格式音频格式音频文件通常分为两类:声音文件和MIDI文件。声音文件指的是通过声音录入设备录制的原始声音信号,直接记录了真实声音的二进制数据,通常文件较大。MIDI文件是一种音乐演奏指令序列,相当于乐谱。可以利用声音输出设备或与计算机相连的电子乐器进行演奏,由于不包含声音数据,其文件较小。第6章 语音处理技术及应用 1.声音文件格式声音文件格式 1)WAVE文件(*.wav)WAVE文件使用三个参数来表示声音,分别是采样位数、采样频率和声道数。在计算机中采样位数一般为8位和16
4、位两种,而采样频率有11 025 Hz(11 kHz)、22 050 Hz(22 kHz)和44 100 Hz(44 kHz)三种。一般WAVE文件的波特率可达到88704 kb/s。WAVE格式是Microsoft公司开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范。它用于保存Windows 平台的音频信息资源,Windows平台及其应用程序均支持WAVE格式。WAVE格式支持多种压缩算法,支持多声道、多种音频位数和采样频率,是PC机上最流行的声音文件格式。但其文件较大,多用于存储简短的声音片段。第6章 语音处理技术及应用 2
5、)AIFF文件(AIF/AIFF)AIFF是音频交换文件格式(Audio Interchange File Format)的英文缩写,是苹果计算机公司开发的声音文件格式。Macintosh 平台及其应用程序、Netscape Navigator浏览器中的LiveAudio、SGI及其它专业音频软件包均支持AIFF文件格式。AIFF支持ACE2、ACE8、MAC3和MAC6压缩,支持16位44.1 kHz立体声。第6章 语音处理技术及应用 3)Audio文件(.au)Audio 文件是Sun Micosystems 公司推出的一种经过压缩的数字声音格式,是Internet中常用的声音文件格式。N
6、etscape Navigatir 浏览器中的LiveAudio 支持Audio 格式的声音文件。第6章 语音处理技术及应用 4)MPEG文件(.mp1/.mp2/.mp3)MPEG 是运动图像专家组(Moving Picture Experts Group)的英文缩写,MPEG音频层(MPEG Audio Layer)代表MPEG标准中的音频部分。MPEG音频文件的压缩是一种有损压缩,根据压缩质量和编码复杂程度的不同可分为三层(MPEG Audio Layer1/2/3),分别对应MP1、MP2和MP3这三种声音文件。MPEG音频编码具有很高的压缩率,MP1和MP2的压缩率分别为4:1和6:
7、18:1,MP3 的压缩率则高达10:112:1,就是说若一分钟CD音质的音乐未经压缩需要10 MB存储空间,而经过MP3压缩编码后只需1 MB左右的存储空间,其音质基本保持不失真。因此,目前使用最多的是MP3文件格式。第6章 语音处理技术及应用 5)RealAudio文件(.ra/.rm/.ram)RealAudio文件是RealNerworks公司开发的一种新型流式音频Streaming Audio文件格式。它包含在RealMedia中,主要用于在低速的广域网上实时传输音频信息。网络传输速率不同,客户端所获得的声音质量也不尽相同,对于28.8 kb/s的速率可以达到广播级的声音质量,如果拥
8、有ISDN或更快的线路连接,则可获得CD音质的声音。第6章 语音处理技术及应用 2.MIDI文件文件(.mid/.rmi)MIDI是乐器数字接口(Musical Instrument Digital Interface)的英文缩写,是数字音乐、电子合成乐器的国际标准。它定义了计算机音乐程序合成器及其它电子设备交换音乐信号的方式,还规定了不同厂家的电子乐器与计算机连接的电缆和硬件及设备间的数据传输协议。用于为不同乐器创建数字声音信号,可以模拟大提琴、小提琴、钢琴等常见乐器。在MIDI文件中,只包含产生某种声音的指令,这些指令包括使用什么MIDI设备的音色、声音的强弱、声音持续时间等,计算机将这些
9、指令发送给声卡,声卡按照指令将声音合成,MIDI在重放时可以有不同的效果。相对于保存真实采样数据的声音文件,MIDI文件显得更加紧凑,其文件大小比声音文件小得多。第6章 语音处理技术及应用 6.1.4 语音压缩编码基础语音压缩编码基础1.语音压缩编码中的数据量语音压缩编码中的数据量语言压缩编码中的数据量表达式为数据量=(采样频率量化位数)/8声道数目 (字节数)压缩编码的目的是通过对数据的压缩,达到高效率存储和数据转换的目的。即在保证一定音质的条件下,以最小数据量来表达和传送声音信息。第6章 语音处理技术及应用 2.压缩编码的必要性压缩编码的必要性实际应用中音频数据量很大,直接进行传输或存储是
10、不现实的,要通过对信号趋势的预测和冗余信息处理进行数据压缩,这样可以用较少的资源传输或存储更多的语音信息。例如,没有压缩过的CD品质一分钟数据需要占用11 MB的内存空间,如果将原始数据进行压缩处理,在确保声音品质不失真的前提下,将数据压缩一半,5.5 MB就可以完全达到原来的效果。在实际操作中可以根据需要选择适当的算法。第6章 语音处理技术及应用 3.常见的几种音频压缩编码常见的几种音频压缩编码1)波形编码波形编码的基本原理是在时间轴上对模拟语音信号按一定的速率抽样,然后将幅度样本量化、编码。译码是其逆过程,将收到的数字序列经过译码和滤波恢复成模拟信号。如脉冲编码调制PCM(Pulse Co
11、de Modulation)、差值脉冲编码调制DPCM、增量调制DM、自适应差分编码ADPCM、自适应增量调制ADM、自适应差值脉冲编码调制ADPCM、自适应增量调制ADM、自适应传输编码ATC(Adaptive Transfer Coding)和子带编码SBC等都属于波形编码技术。其特点为话音质量高,数码率高,适用于高保真音乐及语音。第6章 语音处理技术及应用 2)参量编码参量编码(又称为声源编码)是将信源信号在频率域或其它正交变换域提取特征参数,并将其变换成数字代码进行存储或传输的过程。它是通过对语音信号特征参数的提取和编码重建语音信号,具有尽可能高的准确性,但重建信号的波形同原语音信号的
12、波形会有相当大的差别。线性预测编码LPC及其它各种改进型编码都属于参量编码。译码是编码的逆过程,将收到的数字序列经变换恢复特征参量,根据特征参量重建语音信号。参数编码比特率可压缩到24.8 kb/s甚至更低,但语音质量只能达到中等,自然度较低,常用于设备播报的提示音等。其特点为压缩比大,计算量大,音质一般,廉价。第6章 语音处理技术及应用 3)混合编码混合编码是将参数编码技术和波形编码技术结合起来使用。计算机的发展为语音编码技术的研究提供了强有力的工具,超大规模集成电路的出现则为语音编码的实现提供了技术支持。20世纪80年代以来语音编码技术有了实质性的进展,产生了新一代的编码算法即混合编码。它
13、将波形编码和参数编码结合起来,克服了原有波形编码和参数编码的弱点,结合各自的优点,保持了波形编码的高质量和参数编码的速率低的特点。如多脉冲激励线性预测编码MPLPC、规划脉冲激励线性预测编码KPELPC、码本激励线性预测编码CELP等都是属于混合编码技术,其数据率和音质均介于参数编码与波形编码之间。第6章 语音处理技术及应用 4.音频压缩技术发展趋势音频压缩技术发展趋势音频压缩技术的发展趋势如下:(1)降低数据率,提高压缩比,用于廉价低保真场合。如电话、机器提示音等。(2)追求高保真度复杂的压缩技术,用于对音质要求较高的场合。如CD、音乐等。第6章 语音处理技术及应用 6.1.5 语音合成和识
14、别技术语音合成和识别技术1.语音合成技术分类语音合成技术分类按照实现的功能来分,语音合成可分为两类:(1)有限词汇的计算机语音输出技术。(2)基于语音合成技术的文字语音转换技术(TTS,Text-to-Speech)。按照人类语言功能的不同层次分,语音合成可分为三个层次:(1)从文本到语音的合成(Text-to-Speech),如图6.1所示;(2)从概念到语音的合成(Concept-to-Speech);(3)从意向到语音的合成(Intention-to-Speech)。第6章 语音处理技术及应用 文本处理词典及语音规范韵律处理语音合成语音数据库文本输入合成语音输出图6.1 文本到语音转换过
15、程 第6章 语音处理技术及应用 2.语音识别语音识别 语音识别技术有三 个研究领域:口音独立、连续语音和可辨认词汇数量。语音识别原理框图如图6.2所示。声音模型训练复杂声学语音条件下的语音输入识别结果语音处理语音匹配语音模式训练语音模型语音模型图6.2 语音识别原理框图 第6章 语音处理技术及应用 1)口音独立口音独立的特点有:(1)早期只能辨认特定的使用者即特定语者SD(Speaker Dependent)模式,可针对特定语者辨认词汇(可由使用者自行定义,如人名声控拨号)做简单快速的训练,纪录使用者的声音特性来加以辨认。随着技术的成熟进入了语音适应阶段SA(Speak Aadaptation
16、),使用者只要对于语音识别系统经过适当的口音训练即可达到一定的识别率。(2)非特定语者模式SI(Speaker Independent)使用者无需训练即可使用,任何人皆可随时使用此方式。第6章 语音处理技术及应用 2)连续语音连续语音分为下面两种:(1)单字辨认:为了确保每个字音可以正确地切割出来必须逐字分开念,很不自然。(2)整句识别:只要按照正常说话的速度(中间不需停顿)说出来,是最直接最自然的一种方式,当然,难度也最大。虽然现阶段连续语音的识别率及正确率效果还不错,但仍需提高。由于中文有很多同音字,所以目前几乎所有的中文语音识别系统都是以词为依据来判断的。第6章 语音处理技术及应用 3)
17、可辨认词汇数量内建的词汇数据库的大小直接影响其识别能力,因此就语音识别的词汇数量来说可分为小词汇量(10100)、中词汇量(1001000)和无限词汇量(即听写机)三种。第6章 语音处理技术及应用 6.2 凌阳音频技术简介凌阳音频技术简介 6.2.1 压缩算法的编码标准压缩算法的编码标准 表6.1列出了不同音频质量的编码技术标准响应频率。凌阳音频压缩算法处理的语音信号频率范围为200 Hz3.4 kHz。第6章 语音处理技术及应用 表表6.1 编码技术标准频响编码技术标准频响 信号类型 频率范围/Hz 采样频率/kHz 量化精度/位 电话话音 2003400 8 8 宽带音频(Am 音质)50
18、7000 16 16 调频广播(FM 音质)2015 k 37.8 16 高质量音频(CD 音质)2020 k 44.1 16 第6章 语音处理技术及应用 6.2.2 压缩分类压缩分类 压缩分为无损压缩和有损压缩。无损压缩一般指磁盘文件,压缩比低(2:14:1);有损压缩指语音、视频文件,压缩比高(100 1)。凌阳音频压缩算法根据不同的压缩比分为以下几种(以压缩8 KB 16位的WAVE文件为例):SACM_A2000 压缩比为 8:1,8:1.25,8:1.5;SACM_S480 压缩比为 80:3,80:4.5;SACM_S240 压缩比为 80:1.5。音质排序为:A2000S480S
19、240。第6章 语音处理技术及应用 6.2.3 常用的音频形式和压缩算法常用的音频形式和压缩算法1.波形编码波形编码波形编码采用子带编码技术(SBC,Sub-Band Coding)压缩算法 SACM_A2000。特点为话音质量高,编码率高,适用于高保真语音和音乐。2.参量编码参量编码参量编码采用压缩算法SACM_S240。特点为压缩比高,计算量大,音质一般,价格低廉。第6章 语音处理技术及应用 3.混合编码混合编码混合编码采用压缩算法SACM_S480。特点为综合了参数编码和波形编码之优点。除此之外,还具有FM 音乐合成式即SACM_MS01等。凌阳SPCE061A是16位单片机,具有DSP
20、功能,有很强的信息处理能力,最高时钟可达到49 MHz,具备运算速度高的优势。这无疑为语音的录制、播放、合成及识别提供了条件。凌阳压缩算法中SACM_A2000、SACM_S480、SACM_S240主要是用来放音,可用于语音提示;DVR则用来录、放音。第6章 语音处理技术及应用 滤波器组PARCOR线性预测系数相关函数滤波、预加重语音分析模式匹配词典识别结果输出语音图6.3 语音识别功能框图 第6章 语音处理技术及应用 6.3 常用应用程序接口常用应用程序接口 6.3.1 程序接口概述程序接口概述 语音和音乐与我们的生活有着非常密切的关系,而单片机对语音的控制如录放音合成及识别也广泛应用于现
21、实生活中。语音处理可以分为A/D编码处理、存储解码处理以及D/A转换等,如图6.4所示。第6章 语音处理技术及应用 由于麦克风输入所生成的WAVE文件占用的存储空间较大,对于单片机来说想要存储大量的信息显然是不现实的,凌阳公司提出了解决的方法,即建立SACM-LIB库及相应的应用程序接口API(Application Programming Interface)函数。将A/D编码、解码、存储及D/A转换成相应的模块,每个模块都有其API,我们只需了解每个模块所要实现的功能及其参数的内容,然后调用该API函数即可实现其功能。如在程序中插入语音提示或连续播放一段语音或音乐,也可以根据自己的需要,选
22、择合适的算法,如表6.2所示。第6章 语音处理技术及应用 存储编码解码A/D转换麦克风传输D/A转换喇叭图6.4 语音处理模块组成 第6章 语音处理技术及应用 表表6.2 SACM-LIB库中模块及其算法库中模块及其算法 模块名称(Model-Index)语音压缩编码率 采样速率/kHz SACM_A2000 16 kb/s,20 kb/s,24 kb/s 16 SACM_S480/S720 4.8 kb/s,7.2 kb/s 16 SACM_S240 2.4 kb/s 24 SACM_MS01 音乐合成(16 kb/s,20 kb/s,24 kb/s)16 SACM_DVR(A2000)16
23、 kb/s 数据率,8 KB 的采样率,用于 ADC 通道录音功能 16 第6章 语音处理技术及应用 6.3.2 SACM_A2000 1.相关相关API函数函数SACM_A2000相关API函数及注释如下:void SACM_A2000_Initial(int Init_Index)/初始化 void SACM_A2000_ServiceLoop(void)/获取语音数据填入译码队列 void SACM_A2000_Play(int Speech_Index,int Channel,int Ramp_Set)/播放 void SACM_A2000_Stop(void)/停止播放 void S
24、ACM_A2000_Pause(void)/暂停播放 void SACM_A2000_Resume(void)/暂停后恢复void SACM_A2000_Volume(Volume_Index)/音量控制unsigned int SACM_A2000_Status(void)/获取模块状态void SACM_A2000_InitDecode(int Channel)/译码初始化第6章 语音处理技术及应用 void SACM_A2000_Decode(void)/译码void SACM_A2000_FillQueue(unsigned int encoded-data)/填充队列unsigned
25、 int SACM_A2000_TestQueue(void)/测试队列Call F_FIQ_Service_ SACM_A2000 /中断服务函数 第6章 语音处理技术及应用 2.功能介绍功能介绍下面对上述的API函数作具体介绍。(1)C:void SACM_A2000_Initial(int Init_Index)ASM:R1=Init_IndexCall F_ SACM_A2000_Initial功能:SACM_A2000 语音播放之前的初始化。参数:Init_Index=0 表示手动方式。Init_Index=1 表示自动方式。返回值:0 代表语音模块初始化失败。1 代表初始化成功。注
26、意:该函数用于对定时器中断和DAC等初始化。第6章 语音处理技术及应用(2)C:void SACM_A2000_ServiceLoop(void)ASM:Call F_ SACM_A2000 _ServiceLoop功能:从资源中获取SACM_A2000 语音数据,并将其填入译码队列中。参数:无。返回值:无。第6章 语音处理技术及应用(3)C:int SACM_A2000_Play(int Speech_Index,int Channel,int Ramp_Set)ASM:R1=Speech _IndexR2=ChannelR3=Ramp_SetCall SACM_A2000_Play功能:播
27、放资源中SACM_A2000 语音或乐曲。第6章 语音处理技术及应用 参数:Speech _Index表示语音索引号。Channel 1:通过DAC1 通道播放。2:通过DAC2 通道播放。3:通过DAC1和DAC2双通道播放。Ramp_Set 0:禁止音量增/减调节。1:仅允许音量增调节。2:仅允许音量减调节。3:允许音量增/减调节。返回值:无。第6章 语音处理技术及应用 注意:SACM_A2000 的数据率有16 kb/s、20 kb/s和24 kb/s三种,可在同一模块的几种算法中选择一种。Speech_Index 是定义在resource.inc 文件中资源表T_SACM_A2000_
28、SpeechTable的偏移地址。中断服务子程序F_FIQ_Service_ SACM_A2000必须安置在TMA_FIQ中断向量上。函数允许TimerA以所选的数据采样率计数,并产生溢出中断信号。第6章 语音处理技术及应用 例1 以SCAM_A2000自动方式播报一段语音,并自动结束。解:程序流程图如图6.5所示。主程序:#includeA2000.h#define Speech_1 0#define DAC1 1#define DAC2 2#define Ramp_UpDn_Off 0#define Ramp_Up_On 1#define Ramp_Dn_On 2#define Ramp_
29、UpDn_On 3 第6章 语音处理技术及应用 Main()SACM_A2000_Initial(1);SACM_A2000_Play(Speech_1,DAC1+DAC2,Ramp_UpDn_On);/放音while(SACM_A2000_Status()&0 x01)SACM_A2000_ServiceLoop();第6章 语音处理技术及应用 SACM_A2000放音初始化SACM_A2000_Initial(auto)SACM_A2000压缩播放SACM_A2000_Play(SPEECH_1,dac1,ramp_UpDn_on)获取语音数据并解码等待中断播报SACM_A2000_Ser
30、viceloop()图6.5 A2000自动方式主程序流程图 第6章 语音处理技术及应用 中断服务程序:_FIQ:PUSH R1,R4 TO SP/将寄存器压栈保护CALL F_FIQ_Service_SACM_A2000R1=0 x2000/清中断标志位P_INT_Clear=R1POP R1,R4 TO SP/寄存器出栈RETI注意:当播放语音文件数据中出现FF FF FFH 时停止播放。第6章 语音处理技术及应用(4)C:void SACM_A2000_Stop(void)ASM:Call F_ SACM_A2000_Stop功能:停止播放SACM_A2000 语音或乐曲。参数:无。返回
31、值:无。(5)C:void SACM_A2000_Pause(void)ASM:Call F_ SACM_A2000_Pause功能:暂停播放SACM_A2000 语音或乐曲。参数:无。返回值:无。第6章 语音处理技术及应用(6)C:void SACM_A2000_Resume(void)ASM:Call F_ SACM_A2000_Resume功能:播放暂停播放的SACM_A2000 语音或乐曲。参数:无。返回值:无。(7)C:void SACM_A2000_Volume(Volume_Index)ASM:R1=Volume_IndexCall F_ SACM_A2000_Volume功能:
32、在播放SACM_A2000 语音或乐曲时改变主音量参数:Volume_Index 为音量数,音量从最小到最大可在015 之间选择。返回值:无。第6章 语音处理技术及应用(8)C:unsigned int SACM_A2000_Status(void)ASM:Call F_ SACM_A2000_ Status返回值=R1功能:获取SACM_A2000 语音播放的状态。参数:无。返回值:当R1的bit0=0时,表示语音播放结束;bit0=1表示语音在播放中。第6章 语音处理技术及应用 (9)ASM:Call F_FIQ_Service_ SACM_A2000 功能:作SACM_A2000语音背景
33、程序的中断服务子程序,通过前台子程序自动方式的ACM_A2000_ServiceLoop及手动方式的SACM_A2000_Decode对语音数据进行解码,然后将其送入DAC通道播放。参数:无。返回值:无。注意:SACM_A2000语音中断服务程序只有汇编指令形式且应将此程序放置在TMA_FIQ中断源上。第6章 语音处理技术及应用(10)C:void SACM_A2000_InitDecode(int Channel)ASM:Call F_ SACM_A2000_Decode功能:开始对SACM_A2000 语音数据以非自动方式(编程控制)进行译码。参数:Channel=1、2、3分别表示使用D
34、AC1、DAC2通道以及DAC1和DAC2双通道。返回值:无。注意:只能通过非自动方式对语音数据解压缩。第6章 语音处理技术及应用(11)C:void SACM_A2000_Decode(void)ASM:Call F_ SACM_A2000_Decode功能:从语音队列里获取语音数据并进行译码,然后通过中断服务子程序将其送入DAC通道播放。参数:无。返回值:无。注意:只能通过非自动方式对语音数据进行译码。第6章 语音处理技术及应用(12)C:void SACM_A2000_FillQueue(unsigned int encoded-data)ASM:R1=语音编码数据Call F_ SAC
35、M_A2000_FillQueue功能:将从用户存储区里获取SACM_A2000语音编码数据填入语音队列中等候译码处理。参数:encoded-data 为语音编码数据。返回值:无。注意:只能通过非自动方式对语音数据进行译码。第6章 语音处理技术及应用(13)C:unsigned int SACM_A2000_TestQueue(void)ASM:Call F_ SACM_A2000_TestQueue 返回值=R1功能:获取语音队列的状态。参数:无。返回值:R1=0、1、2分别表示语音队列不空不满、语音队列满及语音队列空。注意:只能通过非自动方式测试语音队列状态。第6章 语音处理技术及应用 例
36、2 编程控制以非自动方式利用SACM_A2000 函数播报语音。解:主程序和中断服务程序流程图如图6.6和图6.7所示。第6章 语音处理技术及应用 获取语音资源填充语音队列修改地址语音队列满吗?设定方式开始是语音结束地址吗?N放音结束NY解码并播放Y结束图6.6 A2000非自动方式主程序流程图 第6章 语音处理技术及应用 是TimerA中断吗?保护现场调用M_2000函数清中断标志是TimerB中断吗?调FIQ _PWM中断服务程序恢复现场中断返回NNYY图6.7 中断服务子程序流程图 第6章 语音处理技术及应用 主程序:#includeA2000.h#define Manual 0#def
37、ine Auto 1#define Full 1#define Empty 2#define DAC1 1#define DAC2 2 Main()第6章 语音处理技术及应用 Addr=RES_A32_SA;/长整型资源地址SACM_A2000_Initial(Manual);/选择非自动方式SACM_A2000_InitDecode(DAC1+DAC2);/使用双通道While(SACM_A2000_TestQueue()!=Full)/若队列不满填入数据 Ret=GetResource(Addr);/从ROM 中取语音数据SACM_A2000_FillQueue(Ret);/将语音数据填入
38、队列Addr+;/指向下一个数据地址While(1)第6章 语音处理技术及应用 If(SACM_A2000_TestQueue()!=Full)/继续填数据到队列中Ret=GetResource(Addr);SACM_A2000_FillQueue(Ret);Addr+;if(Addrsacm2000.exe 16*.wav*.out*.16k或 (e:sacm2000.exe 20*.wav*.out*.20ke:sacm2000.exe 24*.wav*.out*.24k)第6章 语音处理技术及应用 2.S480S480的特点如下:(1)采用8 KB 16位单声道录制一个.wav文件。(2
39、)用s480压缩生成4.8 KB或7.2 KB压缩率的文件。(3)在MS-DOS环境下:e:sacm.exe*.wav*.48k*.outs48或 e:sacm.exe*.wav*.72k*.outs72第6章 语音处理技术及应用 6.4.2 Windows环境下压缩环境下压缩 图图6.11 Windows环境下压缩环境下压缩 第6章 语音处理技术及应用 6.5 键控放音程序键控放音程序 程序模块中的文件大致分为两类,一类是程序,另一类则是程序接口。程序接口是针对高一级的程序模块而言的,通过接口高一级程序模块可以调用本级程序模块中的子程序或函数,或者使用本级模块中定义的全局变量,这无疑会大大增
40、加软件的可维护性,程序既可以用C语言编写也可用汇编语言编写。随着对语音编程越来越熟悉,可以考虑加入一些模块化程序,如键盘,这样可以用按键控制语音播放、停止、暂停、恢复以及音量的大小等。第6章 语音处理技术及应用 Key.asm键扫描初始化F_Key_Scan_Initial键扫描子程序F_Key_Scan_Serviceloop键扫描抖动处理子程序F_Key_DebounceCnt_Down键值获取子程序F_SP_Getch图6.12 Key.asm 程序结构第6章 语音处理技术及应用 6.5.1 常用的键盘常用的键盘API函数函数1.API函数函数常用的键盘API函数如下:Call F_ K
41、ey_Scan_Initial/键初始化Call F_Key_Scan_ServiceLoop/键盘扫描Call F_Key_DebounceCnt_Down/键盘防抖动处理Call F_SP_GetCh()/获取键值 第6章 语音处理技术及应用 2.功能介绍功能介绍下面对常用的键盘API函数作具体介绍。(1)C:void Key_Scan_Initial voidASM:Call F_ Key_Scan_Initial功能:键盘扫描初始化。参数:无。返回值:无。(2)C:void Key_Scan_ServiceLoop voidASM:Call F_Key_Scan_ServiceLoop
42、功能:键盘扫描服务循环。参数:无。返回值:无。第6章 语音处理技术及应用(3)C:void Key_DebounceCnt_Down voidASM:Call F_Key_DebounceCnt_Down功能:键盘扫描过程中消抖动处理。参数:无。返回值:无。(4)C:unsigned int SP_GetCh voidASM:Call F_SP_GetCh()返回值=R1功能:从扫描缓冲区内获得键值,并将缓冲区清零。参数:无。返回值:无。第6章 语音处理技术及应用 6.5.2 系统资源模块系统资源模块SPCE061A单片机提供了一个系统资源模块,它是建立在上述诸多模块之上的一个模块,其中许多子
43、程序都调用了在它之下模块中的子程序,为了让上一级的程序调用本模块System.asm 文件中的子程序,设有一个接口文件System.inc,一般只需要三条调用语句。当然也可以添加一些模块,具体实现可参考如图6.13所示的模块框图。第6章 语音处理技术及应用 键扫描子程序F_Key_Scan_Inital调用系统初始化子程序system_Initial()系统资源模块system.asm系统主循环子程序System_Serviceloop()键扫描防抖动子程序F_Key_DebounceCnt_Down键扫描子程序F_Key_Scan_Serviceloop调用调用主程序main.c调用图6.1
44、3 System.asm 模块框图 第6章 语音处理技术及应用 6.5.3 应用实例应用实例例7 通过一个A2000 自动按键控制放音的例子来熟悉一下整个程序的执行过程。*主程序(main.c)*main()int Key=0;/初始化键值int SpeechIndex=0;/初始化语音目录索引号int VolumeIndex=7;/初始化音量Ret=System_Initial();Ret=SACM_A2000_Initial(Auto);SACM_A2000_Play(SpeechIndex,DAC1+DAC2,Ramp_UpDn_On);/播放第6章 语音处理技术及应用 while(1)
45、Key=SP_GetCh();switch(Key)case 0 x00:break;case 0 x01:SACM_A2000_Play(SpeechIndex,DAC1+DAC2,Ramp_UpDn_On);/播放break;case 0 x02:SACM_A2000_Stop();/停止放音break;第6章 语音处理技术及应用 case 0 x04:SACM_A2000_Pause();/暂停放音break;case 0 x08:SACM_A2000_Resume();/暂停后的恢复break;case 0 x10:VolumeIndex+;if(VolumeIndex MaxVolu
46、me)VolumeIndex=MaxVolume;SACM_A2000_Volume(VolumeIndex);/音量增加break;第6章 语音处理技术及应用 case 0 x20:if(VolumeIndex=0)VolumeIndex=0;elseVolumeIndex-;SACM_A2000_Volume(VolumeIndex);/音量减break;case 0 x40:SpeechIndex+;/播放下一首if(SpeechIndex=MaxSpeechNum)SpeechIndex=0;SACM_A2000_Play(SpeechIndex,DAC1+DAC2,Ramp_UpDn
47、_On);break;第6章 语音处理技术及应用 case 0 x80:if(SpeechIndex=0)/播放前一首SpeechIndex=MaxSpeechNum;SpeechIndex-;SACM_A2000_Play(SpeechIndex,DAC1+DAC2,Ramp_UpDn_On);break;default:break;System_ServiceLoop();/调用系统初始化SACM_A2000_ServiceLoop();/获取A2000数据并填入译码队列等待播放 第6章 语音处理技术及应用 *系统子程序System.asm*.PUBLIC _System_Initial.
48、PUBLIC F_System_Initial_System_Initial:.PROCF_System_Initial:CALL F_Key_Scan_Initial/键盘扫描/可以添加一些语音类型子程序或初始化内容RETF.ENDP.PUBLIC _System_ServiceLoop.PUBLIC F_System_ServiceLoop_System_ServiceLoop:.PROCF_System_ServiceLoop:CALL F_Key_DebounceCnt_Down/调用键扫描防抖动处理子程序 第6章 语音处理技术及应用 CALL F_Key_Scan_ServiceLo
49、op/调用键扫描子程序/可添加其它服务程序,完成相应功能RETF.ENDP/键盘子程序Key.asm.RAM.VAR R_DebounceReg.define C_DebounceCnt 0 x0002.VAR R_DebounceCnt.VAR R_KeyBuf.VAR R_KeyStrobe.CODE第6章 语音处理技术及应用/键扫描初始化F_Key_Scan_Initial:r1=0 x0000R_DebounceReg=r1/初始化R_KeyBuf=r1 R_KeyStrobe=r1 r1=C_DebounceCntR_DebounceCnt=r1/设定记数初值RETF 第6章 语音处
50、理技术及应用*键扫描*F_Key_Scan_ServiceLoop:r1=P_IOA_Data/由IOA口获取键值r1=r1 AND 0 xFF/保留键值r2=R_DebounceReg/将上次获取的键值送给r2R_DebounceReg=r1/将当前键值送给R_DebounceRegCMP r2,R_DebounceReg/比较两次采样的键值是否相同JE L_KS_StableTwoSample/是,则转r1=C_DebounceCnt/否则设定记数的时间R_DebounceCnt=r1RETFL_KS_StableTwoSample:r1=R_DebounceCnt/判断记数值是否为0JZ