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

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

3天内不再提示

关于PWM实现语音播放的详细过程

GReq_mcu168 来源:ARM中文社区 作者:Xiaoya 2021-04-25 17:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

事实上大部分MCU都可以实现语音播放

下面是一段音频数据的波形

局部放大图:

0751e2e6-a4ba-11eb-aece-12bb97331649.png

以一定的速度采样(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数据更新。

075e031e-a4ba-11eb-aece-12bb97331649.png

TIM1选择PWM互补输出(单通道也可以),将PE8和PE9复用为PWMN和PWMP。

TIM1在APB2总线上,TIM2在APB1总线上

077024ae-a4ba-11eb-aece-12bb97331649.png

所以TIM1和TIM2的时钟频率分别为180M和90M,系统时钟用HSE输入的8MHz。

079da032-a4ba-11eb-aece-12bb97331649.png

将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

07ab63ca-a4ba-11eb-aece-12bb97331649.png

TIM2 为90MHz,45分频后为2MHz即0.5us,周期125即62.5us = 16KHz。

07b6ede4-a4ba-11eb-aece-12bb97331649.png

NVIC开启TIM2中断。生成工程名和目录后生成Keil工程。

二、播放语音

1、先编译后,编写TIM中断服务程序。

07e540f4-a4ba-11eb-aece-12bb97331649.png

完成后,开启TIM2中断和PWM,(PWM是互补输出,需要单独开启各个通道)

07eda870-a4ba-11eb-aece-12bb97331649.png

用逻辑分析仪测量输出波形。

07f7c562-a4ba-11eb-aece-12bb97331649.png

如图所示,TIM1 PWM为31.96KHz,TIM2为62.5us即16KHz,结果正确。

接下来处理音频:

这里使用的音频是PCM格式,是未进行压缩编码的原始数据,可以直接给PWM输出。

音频处理的软件有许多,只要能把格式转为PCM即可,下面是我用Cool Edit这款软件做的音频格式转换。

选择菜单 文件--》批量转换

08141cda-a4ba-11eb-aece-12bb97331649.png

选择新的采样率和采样位数。

08202f02-a4ba-11eb-aece-12bb97331649.png

选择PCM格式。设置输出目录后运行批处理完成转换。

08299272-a4ba-11eb-aece-12bb97331649.png

完成后的音频文件用WinHeX这个软件打开。

08331a22-a4ba-11eb-aece-12bb97331649.png

图中红框中的44个Byte为PCM格式的文件头信息,后面的的数据为音频数据,数据全选后利用WinHex的可选格式复制

0862504e-a4ba-11eb-aece-12bb97331649.png

将数据以C数组的形式导出,在工程目录下新建.h文件,将复制的文件粘帖到.H文件并在工程中Include进来,定义起始和结束地址,数组的大小即为文件结束地址,数组用const修饰,可以将数据存储到Flash中。

086db466-a4ba-11eb-aece-12bb97331649.png

在TIM2中,以16KHz的速度更新PWM数据即可实现音频播放。

0876158e-a4ba-11eb-aece-12bb97331649.png

编译工程,下载到NucleoF429板子上,在PE8或PE9上接一个喇叭即可听到声音。

以上用的音频采样是16K 8Bit,要想提高音质,提高采样和Bit数即可,音量可以用外接三极管或功放放大,音频数据也可以用ADC采集后存储到SPI Flash后播放,实现录音回放。

编辑:lyn

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

    关注

    116

    文章

    5847

    浏览量

    223817
  • 语音播报
    +关注

    关注

    1

    文章

    39

    浏览量

    15045

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

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    速通音频处理:掌握TTS播放、文件播放与录音核心,实现完整功能

    这三大模块的核心逻辑,助你高效打通从核心功能到完整功能的实现路径。 一、概述   本文档详细介绍了基于 Air8000 开发板或者 Air8000 核心板的音频功能开发,涵盖音频播放、文字转
    的头像 发表于 11-21 19:27 86次阅读
    速通音频处理:掌握TTS<b class='flag-5'>播放</b>、文件<b class='flag-5'>播放</b>与录音核心,<b class='flag-5'>实现</b>完整功能

    语音识别芯片有哪些(语音识别芯片AT680系列)

    在人工智能技术飞速发展的今天,语音识别芯片作为人机交互的重要桥梁,正逐渐成为各类智能设备不可或缺的核心部件。与传统的语音芯片不同,语音识别芯片不仅能存储和播放声音,更能真正
    的头像 发表于 11-14 17:11 1026次阅读

    什么是语音芯片串口AT指令?实现智能语音交互的核心技术详解

    什么是AT指令AT指令是一套基于串行通信接口的标准化指令集,专门用于声音播放芯片与其他设备之间的数据传输和控制操作。这种通信协议通过简单的文本命令格式,实现了对语音
    的头像 发表于 11-10 12:53 195次阅读
    什么是<b class='flag-5'>语音</b>芯片串口AT指令?<b class='flag-5'>实现</b>智能<b class='flag-5'>语音</b>交互的核心技术详解

    赋能智能语音交互:广州唯创电子WTV系列语音芯片IC引领播放与报警设备新变革

    在万物互联与智能化浪潮的推动下,语音交互已成为人机沟通最自然、最直接的桥梁。语音播放器与报警器作为这一技术的关键载体,正广泛应用于公共安全、智能家居、工业控制及交通管理等领域。然而,传统的语音
    的头像 发表于 09-01 09:30 399次阅读
    赋能智能<b class='flag-5'>语音</b>交互:广州唯创电子WTV系列<b class='flag-5'>语音</b>芯片IC引领<b class='flag-5'>播放</b>与报警设备新变革

    推进一款实用型的OTP语音芯片

    在用户操作过程播放预存的品牌宣传语,助力商家推广,增强品牌影响力。 YCV系列语音芯片在智能快递柜中的应用优势包括: 1、高性能与低功耗,适应严苛工作环境。芯片功耗极低,待机电流仅为微安级,有效降低设备整体
    发表于 08-26 11:32

    快速开发汽车充电桩的屏幕驱动与语音提示方案

    芯片来实现,现在新的快速开发解决方案来了! 一、屏幕驱动+语音播放集成方案 语音与屏幕的联动:WT2606B可以驱动屏幕显示 “请插入充电枪” 时,主控 MCU 向 WT2606B 发
    的头像 发表于 07-16 17:11 1713次阅读
    快速开发汽车充电桩的屏幕驱动与<b class='flag-5'>语音</b>提示方案

    【沁恒CH585开发板免费试用体验】+串行通讯与语音模块播放控制

    ; i<8; i++) { checksum += cmd3[i]; } cmd3[8] = (uint8_t)~checksum; } 此外,为了适应语音播放模块的要求,需在主程序将
    发表于 07-05 11:37

    英语单词学习页面+单词朗读实现 -- 【2】单词朗读实现 ##HarmonyOS SDK AI##

    的原理是通过文字转语音的形式实现的,之前也写过文章分享过在API9下如何进行文字转语音,那是通过第三方的API实现的,需要申请token,请求接口,然后再通过media去
    发表于 06-29 23:26

    芯知识|广州唯创电子WT2003H语音芯片连码播放功能解析与应用指南

    一、连码播放功能的核心价值连码播放(组合播放)是语音芯片将多段独立语音片段无缝拼接为连续语句的技术。广州唯创电子WT2003H系列通过高性能
    的头像 发表于 06-27 09:19 573次阅读
    芯知识|广州唯创电子WT2003H<b class='flag-5'>语音</b>芯片连码<b class='flag-5'>播放</b>功能解析与应用指南

    芯知识|广州唯创电子语音芯片循环/连码播放异响分析与解决指南

    在使用广州唯创电子语音芯片进行音频循环播放或连码播放时,部分用户反馈在音频片段衔接处会出现明显的“嗒”、“咔”类异响。这不仅影响听觉体验,在功放输出环境下更会被显著放大。本文将深入分析其成因,并提
    的头像 发表于 06-23 08:43 348次阅读
    芯知识|广州唯创电子<b class='flag-5'>语音</b>芯片循环/连码<b class='flag-5'>播放</b>异响分析与解决指南

    新品|Unit AudioPlayer,支持 MP3/WAV 播放的音频播放单元

    UnitAudioPlayer是一款自带MP3解码功能的音频播放单元,内置高性能音频解码芯片N9301,自带microSD卡座。该产品采用UART通信接口,用户可通过配置指令实现音频播放功能,音频
    的头像 发表于 06-20 15:59 708次阅读
    新品|Unit AudioPlayer,支持 MP3/WAV <b class='flag-5'>播放</b>的音频<b class='flag-5'>播放</b>单元

    芯知识|广州唯创电子语音芯片组合播放功能解析:高效串联音频,赋能智能交互

    播报信息。针对此类需求,广州唯创电子在其语音芯片中创新设计了组合播放功能(又称“连码播放”),通过灵活的音频地址管理技术,实现多段语音的无缝
    的头像 发表于 05-23 09:03 405次阅读
    芯知识|广州唯创电子<b class='flag-5'>语音</b>芯片组合<b class='flag-5'>播放</b>功能解析:高效串联音频,赋能智能交互

    倒装芯片键合技术的特点和实现过程

    本文介绍了倒装芯片键合技术的特点和实现过程以及详细工艺等。
    的头像 发表于 04-22 09:38 2178次阅读
    倒装芯片键合技术的特点和<b class='flag-5'>实现</b><b class='flag-5'>过程</b>

    芯知识|WT588F(E)系列语音芯片常见问题解析与优化指南

    一、问题现象:语音播放异常的典型表现在使用WT588F(E)系列语音芯片的开发过程中,工程师常会遇到以下两类典型异常现象:播放不全:
    的头像 发表于 03-17 09:17 811次阅读
    芯知识|WT588F(E)系列<b class='flag-5'>语音</b>芯片常见问题解析与优化指南

    如何在播放视频过程中插入音频

    ZDP14x0是一款基于开源GUI引擎的图像显示专用驱动芯片,可以通过串口或者SPI与其他芯片通信,且能播放视频。本文将介绍如何在播放视频过程中插入音频。
    的头像 发表于 12-26 11:13 1950次阅读
    如何在<b class='flag-5'>播放</b>视频<b class='flag-5'>过程</b>中插入音频