事实上大部分MCU都可以实现语音播放
下面是一段音频数据的波形
局部放大图:
以一定的速度采样(ADC)这些波形进行存储,就是音频数据了,所以播放就是按原来采样的速率再用DAC输出对应的数据即可。
这里的音频有两个主要的参数,采样速率和采样位数。
采样速率:指1s中采样多少个数据点,比如1s种采集16000个点,那么采样率就是16KHz。采样速率越高,越能抓到频率较高的声音,比如CD的采样率就是44.1KHz,确保人耳能听到的声音都会被抓到。
采样位数:指音频幅度最大值与最小值分为了多少阶,比如满幅度是3.3V,如果是8Bit位数,那么每一阶就是3.3V/256 = 12.89mv,采样位数越高,声音细节越好。所以采样速率和位数越高,声音还原越逼真,但存储的数据量也越大,一首三四分钟的歌曲,如果不采用编码按原始波形数据存储,数据量有好几十兆大小,这涉及到音频编码的问题,这里不展开讲了,有兴趣的同学可以找相关资料。
接下来看怎么播放,最简单的当然是把采样(ADC)的数据按原样输出(DAC)了。但我们有些芯片本身不带有DAC,所以只能用PWM代替DAC,PWM即脉冲宽度调制。这里只需要把DAC的幅度值转换成PWM的占空比即可,例如16KHz 8Bit的声音转换成16Khz 256阶占空比的PWM。但有一个问题,如果用16KHz的PWM播放语音,声音是可以播放,但有一个16Khz的谐波存在,这个声音会被人耳听到,所以需要更高频率的PWM,数据还是按照16Khz更新。
我这里使用32KHz的PWM,用16KHz 8Bit PCM格式的音频数据,8Bit的数据对应一个Byte,16KHz采样,1秒种占用存储空间就是16K Byte,F429有2M Byte的Flash存储空间,理论上可以存储2048K/16K = 128秒的音频。
下面是用NucleoF429实现音频播放的具体过程:
一、配置PWM
1、用STM32CubeMx建立工程,配置两个定时器TIM1和TIM2,TIM用于PWM产生,TIM2用于16KHz数据更新。
TIM1选择PWM互补输出(单通道也可以),将PE8和PE9复用为PWMN和PWMP。
TIM1在APB2总线上,TIM2在APB1总线上
所以TIM1和TIM2的时钟频率分别为180M和90M,系统时钟用HSE输入的8MHz。
将TIM1设置为32KHz,即31.25us。8Bit占空比,一个LSB为31.25us / 256 = 0.1220703125us = 8.192MHz,TIM1 180M / 8.192M = 21.97265625,这里取整数22。所以实际的PWM频率为1/(180 / 22) *256 = 31.289us = 31.96KHz
TIM2 为90MHz,45分频后为2MHz即0.5us,周期125即62.5us = 16KHz。
NVIC开启TIM2中断。生成工程名和目录后生成Keil工程。
二、播放语音
1、先编译后,编写TIM中断服务程序。
完成后,开启TIM2中断和PWM,(PWM是互补输出,需要单独开启各个通道)
用逻辑分析仪测量输出波形。
如图所示,TIM1 PWM为31.96KHz,TIM2为62.5us即16KHz,结果正确。
接下来处理音频:
这里使用的音频是PCM格式,是未进行压缩编码的原始数据,可以直接给PWM输出。
音频处理的软件有许多,只要能把格式转为PCM即可,下面是我用Cool Edit这款软件做的音频格式转换。
选择菜单 文件--》批量转换
选择新的采样率和采样位数。
选择PCM格式。设置输出目录后运行批处理完成转换。
完成后的音频文件用WinHeX这个软件打开。
图中红框中的44个Byte为PCM格式的文件头信息,后面的的数据为音频数据,数据全选后利用WinHex的可选格式复制
将数据以C数组的形式导出,在工程目录下新建.h文件,将复制的文件粘帖到.H文件并在工程中Include进来,定义起始和结束地址,数组的大小即为文件结束地址,数组用const修饰,可以将数据存储到Flash中。
在TIM2中,以16KHz的速度更新PWM数据即可实现音频播放。
编译工程,下载到NucleoF429板子上,在PE8或PE9上接一个喇叭即可听到声音。
以上用的音频采样是16K 8Bit,要想提高音质,提高采样和Bit数即可,音量可以用外接三极管或功放放大,音频数据也可以用ADC采集后存储到SPI Flash后播放,实现录音回放。
编辑:lyn
-
PWM
+关注
关注
114文章
4958浏览量
210859 -
语音播报
+关注
关注
1文章
23浏览量
14370
原文标题:使用PWM实现语音播放
文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
PWM控制电机转速的原理与实现
能不能把单片机上的蜂鸣器换成语音播放模块
WTN6系列语音芯片:PWM与DAC音频输出在PCB设计中的优势
![WTN6系列<b class='flag-5'>语音</b>芯片:<b class='flag-5'>PWM</b>与DAC音频输出在PCB设计中的优势](https://file1.elecfans.com/web2/M00/8B/83/wKgaomSagEWAVS_tAAPQiIMOKhw250.png)
WT588F02B-8S语音芯片:灵活应用的语音播放利器,实现多重优势
![WT588F02B-8S<b class='flag-5'>语音</b>芯片:灵活应用的<b class='flag-5'>语音</b><b class='flag-5'>播放</b>利器,<b class='flag-5'>实现</b>多重优势](https://file1.elecfans.com/web2/M00/B5/36/wKgaomV6ZEaAVro2AAEL0hg9gwA829.png)
WT2605C语音芯片:实现蓝牙音频播放与BLE透传,引领智能设备应用新潮流
![WT2605C<b class='flag-5'>语音</b>芯片:<b class='flag-5'>实现</b>蓝牙音频<b class='flag-5'>播放</b>与BLE透传,引领智能设备应用新潮流](https://file1.elecfans.com/web2/M00/8B/83/wKgaomSagEWAVS_tAAPQiIMOKhw250.png)
唯创知音有哪些语音芯片支持白噪音播放功能?以及应用领域介绍
![唯创知音有哪些<b class='flag-5'>语音</b>芯片支持白噪音<b class='flag-5'>播放</b>功能?以及应用领域介绍](https://file1.elecfans.com/web2/M00/B2/65/wKgaomVtJymAbQumAACi_tE3hzE073.png)
MP3播放器详细设计方案
![MP3<b class='flag-5'>播放</b>器<b class='flag-5'>详细</b>设计方案](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
评论