0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用PWM完成语音播放?

GReq_mcu168 来源:ARM中文社区 作者:Xiaoya 2021-04-25 16:59 次阅读

事实上大部分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后播放,实现录音回放。

为了方便阅读,附件中包含了此文的PDF文档,Source Code也在附件中,可以直接下载到Nucleo运行。

原文标题:使用PWM实现语音播放

文章出处:【微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17150

    浏览量

    351232
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5188

    浏览量

    213980
收藏 人收藏

    评论

    相关推荐

    WTN6040FP-14S语音芯片在电梯控制板中的应用开发方案-实现楼层指引背景音乐播放功能

    环境,提高运行效率,本文将介绍一种基于WTN6040FP-14S语音芯片的电梯控制板开发方案。该方案通过集成语音芯片,实现背景音乐播放和楼层指引功能,为乘客提供更加愉悦、便捷的乘坐体验。
    的头像 发表于 11-12 14:16 182次阅读

    能在DSP的存储器上存MP3或其他格式的音频文件,由DSP读后控制TLV320AIC23转换成语音

    我想用TLV320AIC23和DSP做一个音频系统。我想问一下能在DSP的存储器上存MP3或其他格式的音频文件,由DSP读后控制TLV320AIC23转换成语音?有没有好的方案推荐谢谢!
    发表于 11-01 06:45

    N9305 MP3语音芯片:外挂FLASH自定义语音播放解决方案

    。这款N9305MP3语音芯片不仅以其强大的兼容性引领市场潮流,更在自定义语音播放方面展现出了前所未有的灵活性。用户可以通过简单的操作,将个性化的音频文件,如企业
    的头像 发表于 10-11 08:01 304次阅读
    N9305 MP3<b class='flag-5'>语音</b>芯片:外挂FLASH自定义<b class='flag-5'>语音</b><b class='flag-5'>播放</b>解决方案

    物联网中语音播报方案_WTN6X系列Flash语音芯片驱动分享

    的+/-1%内部震荡,不需要加外部震荡,具备超低功耗待机。 二 功能简述 (1) 工作电压:2.4V~5.2V; (2) 待机模式下,静态电流小于 5uA(语音播放完成后,DATA /CLK 信号线
    的头像 发表于 09-26 11:06 459次阅读
    物联网中<b class='flag-5'>语音</b>播报方案_WTN6X系列Flash<b class='flag-5'>语音</b>芯片驱动分享

    输入文字转化语音

    一、介绍 基于鸿蒙Next模拟一个输入用户文字,转化成语音播报效果二、场景需求 辅助功能:为视障人士提供帮助:将文字内容转化为语音,使视觉障碍用户能够获取信息。 教育与学习:语言学习:帮助学习者通过
    发表于 08-28 10:54

    NVG040W语音播放芯片智能引导,让治疗仪/热疗机使用更便捷

    ,让治疗仪和热疗机的使用更加便捷。‌NVG040W语音芯片是一种OTP语音芯片,‌具有SOP8封装和8脚设计,‌通过PWM放音方式实现高保真、‌高识别率的语音
    的头像 发表于 08-14 08:07 224次阅读
    NVG040W<b class='flag-5'>语音</b><b class='flag-5'>播放</b>芯片智能引导,让治疗仪/热疗机使用更便捷

    让家电拥有说话能力,一般会使用哪种类型的语音芯片?

    家电的语音功能依赖于语音播放和识别芯片。播放芯片用于语音提示,如故障报警;识别芯片则实现语音控制
    的头像 发表于 07-24 09:22 305次阅读

    可重复烧写的语音芯片具备哪些特点?

    可重复烧写语音芯片具有高可靠性、低功耗、灵活性、安全性、成本效益,支持USB下载更换语音,组合播放PWM和DAC输出,休眠模式和抗干扰,适合工业及需修改
    的头像 发表于 07-16 09:36 239次阅读

    语音控制模块_雷龙发展

      1,串口   uart串口控制模式,即异步传送收发器,通过其完成语音控制。 []()   图中,GND表示单片机系统电源的参考地,TXD是串行发送引脚,RXD是串行接收引脚。发送uart将来
    发表于 06-14 17:18

    家用洗地机语音播放芯片:实现更智能化的清洁操作!

    随着科技的不断进步和人们生活品质的提高,对于家电产品的要求也日益增高。家用洗地机作为家庭清洁的重要工具,其智能化、人性化的设计成为市场竞争的关键。而语音播放芯片的出现,正是为了满足这一市场需求,提升
    的头像 发表于 05-23 09:22 383次阅读

    stm32f0怎么不使用语音IC做合成语音

    我这边板子就一个功放电路,要求不使用语音IC做语音,我听别人说去了解MP3这一方面,但我只找到MCU软解码,但我怎么不了解,不清楚怎么做成自己的语音,要的是语音,不是歌曲
    发表于 04-25 06:00

    【Longan Pi 3H 开发板试用连载体验】给ChatGPT装上眼睛,并且还可以语音对话:5,音频采集

    是先在pc上运行唤醒词识别,识别到后开始录音,录音结束后进行语音识别。 当pc端完成语音识别后,建立在Longan Pi上的FastAPI服务器将识别到的文本发送至Longan Pi,由Longan Pi
    发表于 04-16 11:12

    鸿蒙HarmonyOS开发实战:【分布式音乐播放

    本示例使用fileIo获取指定音频文件,并通过AudioPlayer完成了音乐的播放完成了基本的音乐播放、暂停、上一曲、下一曲功能;并使用DeviceManager完成了分布式设备列表
    的头像 发表于 04-10 17:51 875次阅读
    鸿蒙HarmonyOS开发实战:【分布式音乐<b class='flag-5'>播放</b>】

    能不能把单片机上的蜂鸣器换成语音播放模块

    我的毕设选题是基于单片机的智能语音门禁系统设计与实现,所以我在网上买了个智能门锁的板子,但是它没有语音播放,我就想着能不能把蜂鸣器换成语音播放
    发表于 03-26 10:26

    WT588F02B-8S是一款16位DSP语音芯片、内部振荡32Mhz,16位的PWM解码。

    PWM语音芯片
    WT-深圳唯创知音电子有限公司
    发布于 :2024年03月05日 17:04:09