基于单片机的数码录音与播放系统-毕业设计内容摘要:

写模块,该模块可以应用于 W29C040 同系列的相关的芯片中。  W29C040 的介绍 W29C040DIP 封装芯片有 32 脚,电压为 5V,内部 512KI*8 位的快速闪存,它的结构为 256kb 为一页,单页擦写时间为 5ms,整片擦除时间 为 50ms。 如表 所示: 表 W29C040管脚表 管脚名称 功能描述 A0A18 地址的输入口 DQ0DQ7 数据的输入输出口 CE 片选脚 OE 读脚 WE 写脚 VDD 5V VSS 地 11  W29C040 读写时序图  读时序图 W29C040 读的时序如图 所示: 图 读时序图  在数据保护模式下的页写时序图 数据模式下的页写时序如图 图 写时序图 12  写结果判断时序图 结果判断如图 图 结果判断图  W29C040 写、擦除流程图 凌阳 SPCE061A 单片机若要使用闪存,必须先在闪存编程前,对其进行擦除。 当给出的地址在某个模块地址范围内,当给出的地址向命令用户接口写入模块擦除命令时,相应的模块就被擦除。  片擦除流程图和去掉写保护流程图 去掉写保护流程如图 和擦除流程如图 13 图 写保护流程图 图 擦除 流程图  页写流程图和写结束判断流程图 页写流程如图 和写结束判断流程如图 图 页写流程图 图 写结束判断流程图 单片机与外部储存器连接电路 14 SPCE061A 单片机与 W29C040 外部储存器 的连接图如 图 所 示: 图 外扩连接图 4 单片机 的录放音软件设计 凌阳音频的介绍 音频概述 我们日常所说的人类正常听到声音的频率范围在 20Hz20kHz,即是我们说的音频范围。 在这个声音的范围内,可以分为音乐信号、声音波形信号和语音信号三种。 其中自然界中的声音是波形信号,是声音数字化的基础。 通常语音也可以用波形声音表示,而波形声音表示不出得声音信号,因为语音是一种抽象的信号,是语音的载体,是社交的一种工具。 而至于音乐更是高级的声音信息,它虽然不能符号化说有声 音信息但是使声音符号化。 数字音频的采样和量化 因为音频信号是连续的信号,是模拟的信号,而计算机所采用的示数字算法,所以需将模拟的音频信号进行数字化处理。 数字化模拟信号有很多种方式,如今,最常用的一种方法是采用 A/D 算法进处理信号的波形,可以通过波形编码、参量编码等方式实现。 数字化音频模拟信号分为两个方面,分别是采样和量化,也包括音频设备质量、声道的数目等。 音频格式 音频文件通常分为声音文件和 MIDI 文件两类。 15  声音文件:通过声音录入设备进行录制原始的声音信号,直接记录了真实的二进制 数据文件比较大。 声音文件的格式包含的形式很多,有 WAVE 文件、 AIFF文件、 AUDIO 文件、 MPEG 文件、 REALAUDIO 文件等,现在使用最多是 WAVE文件和 MPEG 文件,其他文件也经常使用。  MIDI 文件: MIDI 是跃起数字接口的英文缩写,它是一种音乐演奏指令序列,相当于乐谱,可以利用声音输出设备或与计算机相连的电子乐器进行演奏,由于不包含声音数据,文件较小。 相对于保存真实数据的声音文件, MIDI 显得更加紧凑。 语音压缩编码基础 语音压缩编码中的数据量的表达式是指: 数据量 =[(采样频率 量化位数) /8] 声道数目。 压缩编码的目的是通过对数据的压缩,达到高效率储存和数据转换的目的。 即是在保证一定音质的情况下,以最小的数据量来表达和传送声音数据。 实际上音频数据量比较大,直接进行传输和储存是比较不现实的,我们要对信号趋势的预测和冗余信息处理进行数据压缩,这样可以减少对资源传输的时间的和对储存更多的语音数据。 采用压缩编码的技术可以既保证对音频的原始声音的保持同时也保证了对数据传输和储存容量的要求。 比如没有经过压缩编码的一张 CD 录制一分钟的歌曲需要占用 Mb,如果对原始数据进行压缩编码,先对其采样后进行编码,就可以把它压缩到 ,储存容量减小了一半,采用不同的编码技术可以压缩到更小。 常见的几种音频压缩编码如下:  波形编码 所谓波形编码是把时间域信号直接变换为数字代码,使现在生产的波形保持原来波形的图像。 波形编码的原理是在时间轴上对模拟语音信号按一定的速率抽样,然后按幅度样本量化、编码。 译码则是将数字序列经过译码和滤波恢复成模拟信号,是编码的逆过程。 特点就是语音质量高、数码率高,适合高保真音乐和语音场合。 如脉冲编码调制PCM、差值脉冲编码调制 DPCM、自适应传输编码 ATC 等。  参量编码 参量编码是 叫声源编码,是将信源信号在频率域或者其他正交变换域提取特征参数,并将其变成数字代码进行储存和传输的过程。 它是在同原始语音数据有很大变化的情况下,对语音信号进行提取特征参数和编码重建语音信号,译码是其逆过程。 参量编码的比特率可以压缩到 2~ ,甚至更低,但是语音质量只能达到中等,特点就是压缩比大,计算量大、传输时间短、储存容量大,音质一般。 如线性预测编码 LPC 等。 16  混合编码 混合编码是将波形编码技术和参量编码技术结合使用的技术。 计算机的发展为语音编码技术的研究提供了强有力的工具,超大规模的集成电路也 为语音编码技提供了技术支持。 混合编码是将波形编码和参量编码结合起来,结合了参量编码和波形编码的优点,即波形编码的语音质量高、数码率高的特点和参量编码的储存空间和传输时间短的特点,当然也克服了它们的缺点。 如多脉冲激励线性预测编码 MPLPC、码本激励线性预测编码 CELP 等。 总之,音频压缩编码技术发展趋势:  降低数据率,提高压缩比,用于廉价的低保真场合。 如电话、机器提示音等。  实现高保真复杂的压缩技术,用于对高保真需求较多的场合。 如 CD、音乐等。 而凌阳单片机的录放音的编码 /解码是靠调用库函数来完成的,我们只需 完成数据的存入和读出即可。 凌阳音频编码算法 压缩编码的标准 不同的频率影响着不同的编码技术标准的音频质量。 凌阳音频压缩算法处理的语音信号频率范围为 200Hz~ ~。 压缩编码标准 如表格 所示: 表 压缩编码标准 信号类型 频率范围 /Hz 采样频率 /kHz 量化精度 /位 电话话音 200~ 3400 8 8 宽带音频 50~ 7000 16 16 调频广播 20~ 14k 16 高质量音频 20~ 20k 16 压缩分类 压缩一般分为有损压缩和无损压缩两类。 无损压缩一般是指磁盘文件,压缩比比较低( 2:1~ 4:1);有损压缩是指语音、视频文件,因为要求信息量大,压缩比比较高( 100:1)。 凌阳音频压缩算法根据不同的压缩比可以分为以下几种(以压缩 8KB 16 位的 WAVE 文件为例): SACM_A2020 压缩比为 8:1,8:, 8:; SACM_S480 的压缩比为 80:3, 80:;SACM_S240 的压缩比为 80:。 音质排序为: A2020S480S240。 常用的音频形式和压缩算法 17  波形编码 波形编码采用带编码技术的压缩算法 SACM_A2020。 特点为语音质量高,编码率高,适用于高保真语音和音乐。  参量编码 参量编码采用压缩算法 SACM_S240。 特点为压缩比高,计算量大,音质一般,价格便宜。  混合编码 混合编码采用压缩算法 SACM_S480。 特点是弥补了波形编码和参量编码的缺点,当然也保留了它们的优点。 除此之外,还具有 FM 音乐合成式即 SACM_MS01。 凌阳单片机 SPCE061A 是 16 位的单片机,具有 DSP 功能,有很强的数据处理和最高时钟频率可以达到 49MHz,具有运算速度高等一些列又是,这无疑为语音的录制、播放、合成和识别带来了不可逾越的优势。 在凌阳单片机当压缩算法中, SACM_A20SACM_S480、 SACM_S240 适合用于录音,可以应用于语音提示;而 DVR 算法则可以用来录音、放音,本次设计就是选择 DVR 算法来编程设计的。 程序接口介绍 语音在社会生活当中占据非常重要的地位,它可以为我们生活带来乐趣。 单片机对语音的控制如录放音的技术广泛的应用到我们的生活当中,语音处理分为 A/D 编码处理、存储解码处理和 D/A 转换等,如图 图 语音处理 由于 MIC 麦克风生成的 WAVE 文件占用的储存空间量比较大,对于单片机来说存储这样大容量的文件是不现实的,为了避免单片机的不足之处,凌阳公司提出了一个解决方案,那就是建立了 SACMLIB 库及相应的应用程序接口 API 函数。 将 A/D 编码、解码、储存和 D/A 转换成相应的模块,每个模块都有 API,我们只需知道每个 API 应用程序接口的功能和其参数内容,然后调用该 API 函数即可实现其功能。 SACMLIB 目前A/D转换 编码 解码 D/A 转换 存储 18 主要有两个库函数 和。 相关 API 介绍 SACMDVR 具有语音的录音和播放的功能,采用的算法是 SACM_A2020,录音时采用 8K 采样率和 16K 数据率来获取语音资源,经过 A2020 压缩后储存在扩展的外部储存器 W29C040 的空间当中,录完后在从其中取出来用于放音。 下面介绍 SACMDVR的 API 函数。 int SACM_DVR_Initial(int Init_Index)//初始化 void SACM_DVR_ServiceLoop(void)//获取资料,填入译码队 列 void SACM_DVR_Encode(void)//录音 SACM_DVR_StopEncode(void)//停止编码 SACM_DVR_InitEncode(RceMonitorOn) //初始化编码器 void SACM_DVR_Stop(void) //停止录音 void SACM_DVR_Play(void) //开始播放 unsigned int SACM_DVR_Status(void) //获取 SACM_DVR 模块的状况 void SACM_DVR_InitDecoder(void) //开始译码 void SACM_DVR_Decode(void)//获取语音资料并译码,中断播放 SACM_DVR_StopDecode(void)//停止解码 unsigned int SACM_DVR_TestQueue(void) //获取语音队列状态 int SACM_DVR_FetchQueue()//获取录音编码程序 void SACM_DVR_FillQueue(unsigned int encodeddata) //填充资料到语音队列,等待播放 int GetResource(long Address)//从资源里获取一个字型语音资料 中断服务函数: Call F_FIQ_Service_ SACM_DVR//playing Call F_IRQ1_Service_ SACM_DVR//recode 具体的函数解释如下:  【 API 格式】 C: int SACM_DVR_Initial(int Init_Index) ASM: R1=[ Init_Index] Call F_SACM_DVR_Initial 【功能说明】 SACM_DVR 语音播放前的初始化:设置中断源、播放方式和定时器 【参数】 Init_Index=0 表示手动方式; Init_Index=1 表示自动方式。 19 【返回值】无 【备注】对于 SACM_DVR 这个模块,需要利用 I/O 口来连接外部的储存器,用来存放录音资料。 录放音的格式采用 SACM_A2020。  【 API 格式】 C: void SACM_DVR_ServiceLoop(void) ASM: Cal。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。