原创 基于单片机PWM的语音系统的研究与设计

2008-10-26 20:47 8878 5 37 分类: MCU/ 嵌入式

PC机编码压缩软件rar


在AVR Mega32上的中位解码话音播放程序源码rar


在AVR mega32上的二位解码语音播放程序源码rar


   在上位机的编码压缩软件中,程序编写太差了,而且DEBUG版本效果更好,文中有比较多的图片不能显示,若有有兴趣都可以留下邮箱.





摘要<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


   本文提出了一种在带有PWM模块的单片机上实现语音播放的方案。语音数据经过ADPCM编码压缩算法压缩后下载到单片机中。数据的压缩通过PC机上的压缩软件实现,压缩软件将WAV文件中的PCM数据提取出来,而后对其进行编码、压缩,同时生成可供单片机的C编译器直接调用的C语言代码文件。


    通过提取PC机中的WAV文件中的波形数据,使得声源的获取更简单方便,同时利用PC机录音的效果比一般的录音电路的效果要好,同时可减少录音时所需的前置滤波器的设计成本。利用单片机内集成的PWM还原语音,可以极大地减少成本。而使用ADPCM数据编码压缩则节省了大量存储空间。


关键词:PWM,语音,编码压缩,ADPCM,WAV



Abstract


The paper introduces a way to play speech through the microcontroller who owns PWM module.The speech data download in the microcontroller after they are compressed using the ADPCM algorithm.The software which is used to compress the speech data first get the PCM data from the WAV files ,then compress them,at last,we can get the C code which can be used in the C compiler such as “code vision”.


It is very convenience to get the the wave data from the WAV files which are in the personal computer.And it can get better speech quality than the method that getting the data through the common microphone circuit.Using the PWM integrated in the microcontroller can get a great deal of cost saving.And using the ADPCM code algorithm is a good way to store more speech data in the microcontroller.


Key wordsPWM,speech,coding,compress,ADPCM algorithm,WAV


1 引言


        目前,语音合成集成电路越来越广泛地应用于各个领域。语音合成方式主要有波形编码方式和参数合成方式两种。其中波形编码方式是以单词和词组为单位将语音信息存储在存储器里,通过解码电路对这些单词和词组进行重新编排后经D/A转换输出。这种语音合成方式算法简单,易于实现,合成语音质量好,因而得到普遍采用。使用波形编码方式进行语音合成时,需要将数字的语音信息码通过D/A转换器恢复成模拟的电压信号或电流信号。


电路设计时,通常采用的方法是使用电阻网络来实现D/A转换,但是,在集成电路设计时,电阻的精度不易控制,并且实际开关的非线性影响会给D/A转换的输出带来非线性误差。数字脉冲宽度调制器(PWM)可以直接将数字语音信号转化成占空比不同的矩形脉冲序列。如果脉冲宽度调制器的输出频率足够高,利用低通滤波器可以直接恢复出语音信号。


 


 


2 脉冲宽度调制的原理


2.1 脉冲宽度调制



<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


1 脉冲宽度调制原理


(a)脉冲宽度调制原理框图 (b)脉冲宽度调制波形图


脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。


简而言之,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,矩形波的占空比被用来对一个具体模拟信号的电平进行编码。只要带宽足够,任何模拟值都可以使用PWM进行编码。


脉冲宽度调制波通常由一列占空比不同的矩形脉冲构成,其占空比与信号的瞬时采样值成比例。图1所示为脉冲宽度调制系统的原理框图和波形图。该系统由一个比较器和一个周期为Ts的锯齿波发生器组成。语音信号如果大于锯齿波信号,比较器输出正常数A,否则输出0。而解调方法只要在输出级接一低通滤波器就可还原出模拟信号。


 


2.2 AVR单片机中的PWM介绍


AVR系列单片机中几乎所有的型号都有PWM输出,以下以ATmega32为例介绍:


ATmega32内部集成了2个具有PWM输出功能的8们位定时/计数器和1个具有PWM输出功能的定时/计数器。下面分别对其进行介绍。


T/Cn 是一个通用的单通道8(T/C116)的定时器/计数器模块。它有4种工作模式,普通模式、CTC模式、快速PWM模式和相位修正PWM模式。


普通模式为最简单的工作模式。在此模式下计数器不停地累加。计到 8比特的最大值后 (TOP = 0xFF),由于数值溢出计数器简单地返回到最小值 0x00 重新开始。在 TCNTn 为零的同一个定时器时钟里T/Cn溢出标志 TOV0 置位。如果允许全局中断及TCn溢出中断,则可以产生中断。


CTC模式下OCRn寄存器用于调节计数器的分辨率。当计数器的数值 TCNT0等于OCRn时计数器清零。OCRn定义了计数器的TOP值,亦即计数器的分辨率。这个模式使得用户可以很容易地控制比较匹配输出的频率,也简化了外部事件计数的操作。


快速PWM 模式可用来产生高频的PWM 波形。快速PWM模式与其他PWM模式的不同之处是其单斜坡工作方式。计数器从BOTTOM计到MAX,然后立即回到BOTTOM重新开始。此高频操作特性使得快速 PWM 模式十分适合DAC 应用。


相位修正PWM模式为用户提供了一个获得高精度相位修正 PWM 波形的方法。此模式基于双斜坡操作。计时器重复地从BOTTOM计到MAX,然后又从MAX倒退回到BOTTOM。相位修正模式适合于电机控制。


T/Cn具有一个10位的预分频器。T/C时钟源是由时钟选择逻辑决定的,而时钟选择逻辑是由位于T/C控制寄存器TCCRn的时钟选择位CSn2:0控制的。


 


 


3 语音波形的数字编码


语音编码方法要分为3类:波形编码、参数编码和混合编码。波形编码是根据语音信号的波形导出相应的数字编码形式,其目的是尽量保持波形不变,使得能够再现原始语音;滤形编码具有抗噪性能强、语音质量好等优点。参数编码又称声码器技术,它通过对语音信号进行分析,提取参数来对参数进行编码。参数编码主要是从听觉感知的角度注重语音的重现,即让解码语音听起来与输入语音相同,但不保证其波形相同。参数编码是上述两种法法的结合,同时从两方面构造语音编码。


基于波形编码的语音质量好,编码简单的优点,系统采用的是波形编码技术。


3.1 脉冲编码调制(PCM)


PCM是语音波形数字编码的一种最简单和最早的方法。其步骤是:首先用一个反混量失真滤波器将模拟语音信号的频谱限制到适当的宽度;然后以等于或高于奈奎斯特取样率的频率对限带语音信号进行等间隔取样,并对取样值进行量化,最后用一组二进制码脉冲序列表示各量化后的取样值,于是使用数字编码脉冲表示了原来的语音信号波形。WAV文件中存储的便是语音波形的PCM编码数据。


3.2 差分脉冲编码调制(DPCM)


差分编码调制是一种比较优秀的压缩编码方法,该算法是使用前一个样本来预测当前样本,然后算出当前样本与预测值的差值,并对差值进行量化。在8 kb/s的采样速率下,它可以把数码率压缩至4kb/s,在缓冲器空间一定的情况下,从而使语音存储量增加一倍,并且信噪比损失小,其数学表达式为:


A(n)=A(n-1)+e(n)                                  (1)


其中:


     



   




-7          ( S(n)-A(n-1) < -7 );




S(n)-A(n-1) ( -7 S(n)-A(n-1) 7 );   




7            (  S(n)-A(n1) > 7 );       


 




e(n)=

<?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" />   (2)


S(n)为当前采样值;A(n)为增量累加值;A(n-1)为预测值.一般以上一时刻A/D采样值作为现在时刻的预测值,e(n)为差分值,由于差分值的大小在-77之间,所以可以用四位二进制数表示并存入缓冲器,其中最高位是符号位,其余三位是数据位,最大值为0111(7),最小值为1111(-7)


3.3 增量调制(DM)


增量调制可以看成是差分脉冲编码器的一个特例。具体说,当差分脉冲编码调制系统的量化器的字长选为1位时,便得到增量调制系统和差分脉冲编码调制一样,在增量调制中被量化的不是输入语音信号而是预测误差信号。不同的是现在只有两个量化电平,分别用Δ和-Δ表示。即所有正预测误差值都量化为Δ,而所有负预测误差值都量化为-Δ。


3.4 自适应差分脉冲编码算法(ADPCM)


语音信号是一种具有短时稳性的非平稳随机过程,相邻样点间有着很强的相关性。利用语音信号的这一特点,采用自适应量化和自适应预测技术对语音信号进行编码,可以在较低的数据率情况下,获得较高质量的重构语音。自适应差分脉冲编码算法是使用前一个样本(或前几个样本)来预测当前样本,然后算出当前样本与预测值的差值,并对差值进行量化。对于每个输入样本值,所对应的编码值直接就是量化阶的确定数目。解码时就是用这个编码值乘以量化阶(可能会再加上半个量化阶以得到更好的精度)即得到重建的音频样本。编码和解码能随时修正量化阶以响应输入样本大小的变化。它的简便之处在于对预测值并不进行自适应,而是对量化阶进行自适应。


ADPCMAdaptive DifferentialPulse Code Modulation,自适应差分脉冲编码调制)综合了APCM的自适应特性和DPCM系统的差分特性,是一种性能较好的波形编码。它的核心思想是:利用自适应改变量化阶的大小,即使用小的量化阶去编码小的差值,使用大的量化阶去编码大的差值;使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。ADPCM记录的量化值不是每个采样点的幅值,而是该点的幅值与前一个采样点幅值之差。


ADPCM是利用样本与样本之间的高度相关性和量化阶自适应来压缩数据的一种波形编码技术。


4 WAV文件中声音采样数据的提取


4.1 WAV文件介绍


标准的WAV格式的声音文件含有声音的采样数据和文件头。文件头描述了后面声音数据的一些信息,如通道数、采样频率、采样位数以及数据的长度等。通道数,是指声音的采样路数,如单声道、立体声等。采样频率,是指每秒钟对声音的采样次数,采样频率越高,还原出来的声音越接近原始声音,如表1所列。根据采样定理,要想精确还原出某种频率的波形,其最小采样率应至少为该波形频率的2倍。


1 采样频率与音质关系




音质


频率范围/Hz


采样频率/kHz


电话音质


200Hz~3400Hz


8


短波段收音机音质


50Hz~7kHz


11025


FM收音机音质


20Hz~15kHz


2205


CD音质


10Hz~20kHz


441


 


提取声音数据时,要注意采样频率、采样位数、存储容量与存储时间的关系,如表2所列。通常,8kHz的采样频率和8位的采样位数可获得清晰的语音以及较好的音乐声,并且占有较少的存储空间。


采样位数,指的是每次采样的采样精度。采样位数越高,还原出来的声音的量化噪声越小,波形也越接近原波形。


2 采样频率/位数、存储容量与存储时间的关系




采样频率/kHz


6


6


8


8


11.025


11.025


22.050


22.050


44.100


44.100


采样位数/


8


16


8


16


8


16


8


16


8


16


存储


容量


KB


32


5.46


2.73


4.10


2.05


2.97


1.49


1.49


0.74


0.74


0.37


64


10.92


5.46


8.19


4.10


5.94


2.97


2.97


1.49


1.49


0.74


128


21.84


10.92


16.38


8.19


11.89


5.94


5.94


2.97


2.97


1.49


256


43.69


21.84


32.77


1638


23.78


1189


11.89


5.94


5.94


2.97


512


87.38


43.69


65.54


32.77


47.55


23.78


23.78


11.89


11.89


5.94


注:存储时间单位:s


 




3 2-bit ADPCM压缩后存储时间


 


4 2-bit ADPCM压缩后存储时间


采样频率/kHz


6


8


 


采样频率/kHz


6


8


存储


容量


KB


32


21.84


16.38


 


存储


容量


KB


32


10.92


8.19


64


43.69


32.77


 


64


21.84


16.38


128


87.38


65.54


  


128


43.69


32.77


256


174.72


131.07


  


256


87.38


65.54


512


349.44


262.144


___________    


512


174.72


131.07


       


4.2 WAV文件的文件格式


WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。WAVE文件是由若干个Chunk组成的。按照在文件中的出现位置包括:RIFF WAVE Chunk, Format Chunk, Fact Chunk(可选), Data Chunk。其中除了Fact Chunk外,其他三个Chunk是必须的。每个Chunk有各自的ID,位于Chunk最开始位置,作为标示,而且均为4个字节。


<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4.2.1 RIFF WAVE Chunk


RIFF WAVE Chunk块中表明文件的格式及其大小。其的结构可用如下结构体表示:


struct RIFF_HEADER


{


    char szRiffID[4];        /*  'R',  'I',  'F',  'F'   */


    DWORD dwRiffSize;


    char szRiffFormat[4];    /*  'W',  'A',  'V',  'E'  */


};


4.2.2 Format Chunk


Foramt Chunk中包含了WAV波形的通道数、采样率、采样位数等的格式信息,其结构可用如下结构体表示:


struct WAVE_FORMAT


{


    char  szFmtID[4];        /*  ' f ',  ' m ',  ' t ',  '  '  */


    DWORD  dwFmtSize;


    WAVE_FORMAT wavFormat;


    WORD wFormatTag;


    WORD wChannels;


    DWORD dwSamplesPerSec;


    DWORD dwAvgBytesPerSec;


    WORD wBlockAlign;


    WORD wBitsPerSample;


};


4.2.3 Fact Chunk


Fact Chunk是可选字段,一般当wav文件由某些软件转化而成,则包含该Chunk。该块结构可用如下结构体表示:


struct FACT_BLOCK


{


    char  szFactID[4];   /*  ' f ',  ' a ',  ' c ',  ' t '  */


    DWORD  dwFactSize;


};


4.2.4 Data Chunk


Data Chunk是真正保存wav数据的地方,以'data'作为该Chunk的标示。然后是数据的大小。紧接着就是wav数据。根据Format Chunk中的声道数以及采样bit数,wav数据的bit位置可以分成以下几种形式:


3 wav数据bit位置安排方式




单声道


8位量化


取样1


取样2


取样3


取样4


声道0


声道0


声道0


声道0


双声道


8位量化


取样1


取样2


声道0


声道1


声道0


声道1


单声道


16位量化


取样1


取样2


声道0(低字节)


声道0(高字节)


声道0(低字节)


声道0(高字节)


双声道


16位量化


取样1


声道0(低字节)


声道0(高字节)


声道1(低字节)


声道1(高字节)


 


Data Chunk 结构可用如下结构体表示:


struct DATA_BLOCK


{


char szDataID[4];   /*  ' d ',  ' a ',  ' t ',  ' a '  */


DWORD dwDataSize;


}


 


 


 


5 系统硬件设计


5.1 系统框图


PC机上通过提取出WAV文件中的PCM数据,并通过ADPCM语音压缩软件对这些数据进行编码、压缩,产生可供单片机C编译器直接调用的C语言代码。再通过ISP下载器或者USART将代码下载到单片机内部FLASH存储器中。


单片机对FLASH存储器中的ADPCM编码数据进行解码,在采样时钟频率下,送到内部集成的脉冲宽度调制器调制PWM波形。在PWM输出端,通过低通波器将声音波形还原。


 



2 系统组成框图


5.2 系统电路图


系统硬件电路设计简单,这也是本系统的优点之一,极大程序地节约了设计成本。


PWM 输出后须通过低通滤波器滤波,才能还原成人耳能识别的声音。低通滤波器的类型和参数取决于声音的采样频率和价格预算。最简单的要数RC滤波器。这种滤波器的优点是仅需要两个元件,另一种是有源滤波器,滤波效果好,但相对复杂。在某些场合中,即使用参数不非常明确的元件也能获得很好的声音输出,这时RC滤波器将是最好的选择。如有必要可再加一功率放大电路。




4 功率放大电路


 


 


 


     3 系统电路图                         5 滤波器的简易连接


6 系统软件设计


6.1 PC机中压缩软件的设计


PC机上的ADPCM语音编码、压缩软件是在Visual C++ 6.0环境下编写的。其界面图6所示:


 


 


   6 ADPCM编码压缩软件界面             


 


该软件可以产生几种的文件:


◆ 以wav_为前缀的*.h文件:WAV波形文件中提取出的PCM编码数据。


◆ 以adpcm_为前缀的*.h文件:可供单片机直接调用的ADPCM编码数据。


◆ 以pcm_为前缀的*.h文件:ADPCM编码后再解码的PCM数据。


◆ 以wav_为前缀的*.m文件:WAV波形文件中提取出的PCM编码数据,用于在matlab中观察波形。


◆ 以pcm_为前缀的*.m文件:ADPCM编码后再解码的PCM数据,用于在matlab中观察波形。


*.out文件:用于试听ADPCM编码再解码后的WAV格式文件。


该软件支持两种压缩比的编码方式:


● 84  在这种压缩比下,再现的语音音质与原始语音音质相比失真非常小,适合于对语音音质要求较高的场合。


82  这种压缩比较大,失真较大,音质较差,但是存储占用少,适合于存储器紧张时使用。


 


6.1.1 WAV波形数据提取


语音波形数据是从PC机中WAV文件中提取出来的,PC机中的WAV文件的音质比一般的录音电路所得的声音要好。其流程如图所示。





7 WAV波形数据提取


 



8 4ADPCM编码流程图                 9 2ADPCM编码流程图


6.1.2 ADPCM编码


系统设计了4位和2位的ADPCM编码,当使用4-bit编码时,其产生的音质较好,几乎接近原声。当要对语音音质较高时,可以采用4-bit编码。而2-bit编码的的语音质量稍差,由于其压缩比较前者大,达到41。适合于在存储器较少的单片机中或者存储器紧张时应用。


在编码中有2张非常重要的表,分别为stepTableindexTablestepTable存储的为自适应的步长表,indexTablestep调节索引修正表。


当采用4-bit编码时,这两张表定义如下:


signedchar stepTable[22]=


{2,3,4,6,8,10,13,16,19,23,27,32,37,43,50,58,67,77,88,100,113,127};


signed char indexTable[8] = {-1, -1, -1, -1, 2, 4, 6, 8};


当采用2-bit编码时,这两张表为:


signedchar stepTable[22]=


{2,3,4,6,8,10,13,16,19,23,27,32,37,43,50,58,67,77,88,100,113,127}


signed char indexTable[4] = {-1, -1, 2, 4};


ADPCM编码流程图如图8和图9所示。


6.1.3 ADPCM解码


解码实际是编码的一个逆过程,要注意的是,要使用与编码使用的同一张表。


    


10 4ADPCM解码流程图图          11 2ADPCM解码流程图


6.2 单片机语音播放程序设计


6.2.1 语音数据解码有关变量的定义


1.要想使用压缩过的语音数据,须在程序中加入由压缩软件产生的ADPCM编码数据文件。例如:


#includeadpcm_0.h


2.定义数据段地址的指针数组。这张表是一个指针数组,其中存放的是各段语音资源的首地址。当程序中使用了多段语音数据时,这个表使得调用语音资源更为方便。其定义如下:


flash unsigned char *pTab[]={adpcm_0, adpcm_1, adpcm_2};


表中的adpcm_0,adpcm_1...adpcm_*.h文件中定义的数组的首地址(在C语言中即为数组名)。


3.定义语音资源大小的数组。这张表中存放对应段的数据大小。


unsigned int SizeTab[]=size_adpcm_0, size_adpcm_1, size_adpcm_2};


表中的size_adpcm_0,size_adpcm_1...adpcm_*.h中已以宏定义的方式定义了,它们是语音资源的大小,由压缩软件直接产生。



6.2.2 语音播放初始化


 



12 语音播放初始化


语音播放初始化主要是于语音播放中要用到的两个定时器进行初始化。一个定时器用来产生8KHz的采样频率,使用8位定时/计数器2,工作在TCT模式下,预分频系数为8,定时125us,并使能其比较匹配中断;另一个用来产生PWM波形,使用8位定时/计数器0,工作在快速PWM模式下,不分频,OCR0根据采样值的大小而改变。值得注意的是OCR0的初值要为0x7F127),这个值作为声音的0参考值。


6.2.2 播放一段语音


在播放每段语音前都要载入所要播放的语音的地址,载入该段语音的预测值的初值,打开中断播放语音。然后等待播放结束。播放结束后要关中断,OCR0同样要赋值为0x7F,否则的话会产生比较大的噪声(相当于一个阶跃响应)。


               


    13 播放语音子程序                  14 定时器2比较匹配中断服务程序


6.2.3 定时器2比较匹配中断服务子程序


该中断服务子程序每125us进入一次中断,进入中断后,调用解码子程序,然后准备下一个数据,同时判断该段语音有没有播放完毕,发果播放完毕则置位标志位。


6.2.4 ADPCM解码


在单片机的的ADPCM解码与压缩软件中的解码过程大致相同,只是在单片机中一般不会同时使用4-bit2-bit的解码方式。因此为了在兼容两种方式同时还节省代码空间,解码的两张表是用宏定义的方式定义。其代码如下:


#define ADPCM_2_BIT      //选择2-bit解码


#ifndef ADPCM_2_BIT


signed char stepTable[22]=


{


2,3,4,6,8,10,13,16,19,23,27,32,37,43,50,58,67,77,88,100,113,127


};//step


signed char indexTable[8] = {-1, -1, -1, -1, 2, 4, 6, 8};


#else     


signed char stepTable[22]=


{


2,3,4,6,8,10,13,16,19,23,27,32,37,43,50,58,67,77,88,100,113,127


};//step


signed char indexTable[2] = {-1, 4};


#endif   


 


 


 


 


 


 


 


7 结束语


随着语音合成集成电路的使用越来越广泛。对语音合成集成电路的设计要求也越来越高,很多的电子消费品要求语音合成集成电路电路简单,成本低廉,单片机内自带的PWM可以很好地解决这个问题。传统语音合成电路需外部辅以较多的电子元件,而PWM方式进行D/A转换输出电压信号,可以直接驱动喇叭。并且,数字脉冲宽度调制器避免了复杂的模拟电路的设计,降低了设计和生产的难度。所以,PWM方式作为语音合成的输出具有极大的推广应用前景。


使用ADPCM可以大大节约存储器的使用容量。使用4bit编码压缩时,解压后的数据误差较小,还原出来的声音与原声音质几乎相同。而使用2bit编码时,虽有一定的失真,但其音质也不错。




参考文献


[1] 姚天任.数字语音处理[M].武汉:华中理工大学出版社,1999


[2] 赵力.语音信号处理[M].北京:机械工业出版社,2003


[3] 韩纪庆.语音信号处理[M].北京:清华大学出版社,2004


[4] 许织新.数据压缩[M].国防工业出版社,1990


[5] []T.W.Parsons.语音处理[M].国防工业出版社,1990


[6] 杨行峻,迟惠生等.语音信号数字处理[M].电子工业出版社,1995


[7] 刘波.MATLAB信号处理[M].北京:电子工业出版社,2006


[8] Rishi Sinha. Voice Compression using ADPCM algorithm[D]


[9] 吴大正.信号与线性系统分析[M].北京,高等教育出版社,2005


[10] 沈文,詹卫前.AVR单片机C语言开发入门指导[M].北京:清华大学出版社, 2004


[11] 居来提.语音压缩编码[J].新疆教育学院学报,2002,18(2):96-100


[12] 张军,古乐野.一种不定帧长的语音压缩编码算法.计算机应用[J],2004, 24(12):93-94


[13] 黄巧玲.一种新的语音数据压缩算[J].计算机时代,2006,5:1-2


[14] 胡明昕等.基于单片机数据压缩算法的研究与实现[J].仪表技术,2007.6


[15] 秦健.一种基于PWM的电压输出DAC电路设计[EB/OL]. http://www.ic37.com/docu- ment ,2007-8-9


[16] JEITA CP-3451. Exchangeable image file formafor digital still cameras: 


Exif Version 2.2[S],2002


[17] Rodger Richey.Adaptive Differential Pulse Code Modulation using PICmicro(TM) Microcontrollers[M/CD]. Microchip Technology Inc,1997

PARTNER CONTENT

文章评论32条评论)

登录后参与讨论

用户377235 2015-7-9 21:48

你好! 我有一个项目刚好要用到语音播报的功能! 希望你能发给我一份,先谢谢了! 邮箱:710950776@qq.com 另外那个压缩软件用不了! 点击压缩不会生成文件

用户377235 2015-7-9 15:33

您好,博主,我在做一个项目需要wav语音播报,不知能否发一份资料给我万分感谢,我邮箱是: 710950776@qq.com

用户377235 2015-6-17 01:01

正需要,能给我一份吗,谢谢了!cheng_dong_xu@126.com

用户377235 2014-11-17 15:59

您好!对此很感兴趣,也想尝试做一下~希望有完整的文章~我的邮箱是wh1890@126.com 谢谢!

用户377235 2013-6-25 15:50

您好,博主,我搞一个AVR wav播放器真的希望能借鉴到你的资料,我邮箱是: 842504599@qq.com

用户377235 2012-7-9 18:25

给我发一份好吗?我QQ邮箱:370744010@qq.com

用户377235 2012-2-17 15:51

462437851@qq.com 恳请博主发我啊谢谢了

用户377235 2012-2-13 20:28

太需要了,十分感谢owndawn@gmail.com

用户377235 2012-2-4 16:34

能给我发一份吗 13468953423@139.com

用户377235 2012-2-2 09:19

能发我一份吗?151834730@qq.com 多谢

相关推荐阅读
用户55081 2008-10-26 20:08
基于单片机PWM的语音系统的研究与设计
PC机编码压缩软件在AVR Mega32上的中位解码话音播放程序源码在AVR mega32上的二位解码语音播放程序源码   在上位机的编码压缩软件中,程序编写太差了,而且DEBUG版本效果更好,文中有...
我要评论
32
5
关闭 站长推荐上一条 /3 下一条