你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

“TTS”or语音播放,不麻烦,用它就可以

[复制链接]
yangjiaxu 提问时间:2022-11-27 23:26 / 未解决
大家好,豆包来了,好久没回社区了,甚是想念,最近玩了一些语音播放,用语音播放模块代替TTS,感觉还不错,今天来分享给大家。
语音播放,顾名思义,就是将录制好的音频,进行播放,可以单曲循环,也可以指定音频片段进行播放,这种一般适用于音频数量不多,而且是固定内容的场合,这种就可以将想要的内容录制好,然后存在存储器之中,到时候按需要的进行播放即可。其优势是语音播放模块一般成本较低,但不足也有,就是存储音频数量有限,同时播放操作较为麻烦。
“TTS”,中文含义即时文字转语音,就是将文字发送给TTS模块,它就会将文字转换成语音并播放出来,这样的优势就是,内容自定义,想播放什么通过发送文字即可,一般适用于内容不固定的场合使用。其优势是灵活,但是缺点也有,就是成本较高,一个TTS语音模块大概就三五十元,有些会嵌入在通信模块中作为一个附属功能,比如一般的4G模块都会带有TTS功能,但费用比不带TTS功能的话也会贵上几块到十几块钱。
那么问题来了,既然TTS这么贵,而且在不用通信模块的前提下,如果单独购置个TTS模块是太不划算了,我们有什么办法将成本降下来呢?其实可以使用语音播放模块代替TTS的,接下来,豆包就使用了该方式实现了TTS功能,效果还不错~,接下来给大家聊聊怎么玩耍吧。
本次是在网上随便找的一款支持串口控制的音频播放模块,具体型号为JR6001,它的优势在于,可以接入在电脑上作为一个U盘,音频内容随时可以修改,而且支持U盘,TF卡和flash的存储介质。同时具有随机播放、组合播放、指定音频等等操作。该模块的资料还是比较全面的,还有一个调试工具,通过调试工具可以知道其具有的功能还是比较强大的。
01.jpg
图1 调试软件工具
硬件参数如图2所示。
                                                02.jpg
                                                   图2 JR6001硬件参数
介绍完硬件,其实就可以将硬件搭建起来了,本次使用的是STM32F103最小系统板,配合JR6001语音播放模块,使用JR6001的组合播放功能,实现对DHT11采集到的温度进行语音播报。具体操作如下。首先需要录制0-10的十一段音频,在录制“温度”的音频,按照规则存在JR6001flash之中。接下来要通过硬件连接,采用串口的方式与单片机相接,同时记得要接JR6001的判忙引脚,否则正在播放的音频会被打断。最后就是编写程序了,程序代码部分如下:
  1. t = Key_Scan(1);
  2.                                 DHT11_Read_Data(&Temperature, &Humi);
  3.                                
  4.                                 if((t == KEY0_PRIE) && (Voice_Busy == 0))
  5.                                 {
  6.                                                 UART1_SendByte(0x41);
  7.                                                 UART1_SendByte(0X37);
  8.                                                 UART1_SendByte(0x3A);
  9.                                                 UART1_SendByte(0x30);
  10.                                                 UART1_SendByte(0x30);
  11.                                                 UART1_SendByte(0x30);
  12.                                                 UART1_SendByte(0x30);
  13.                                                 UART1_SendByte(0x31);
  14.                                                 UART1_SendByte(0x0d);
  15.                                                 UART1_SendByte(0x0a);
  16.                                 }
  17.                                 else if((t == KEY1_PRIE) && (Voice_Busy == 0))
  18.                                 {
  19.                                                 UART1_SendByte(0x41);
  20.                                                 UART1_SendByte(0X37);
  21.                                                 UART1_SendByte(0x3A);
  22.                                                 UART1_SendByte(0x30);
  23.                                                 UART1_SendByte(0x30);
  24.                                                 UART1_SendByte(0x30);
  25.                                                 UART1_SendByte(0x30);
  26.                                                 UART1_SendByte(0x32);
  27.                                                 UART1_SendByte(0x0d);
  28.                                                 UART1_SendByte(0x0a);
  29.                                 }
  30.                                 else if((Voice_Flag > 10) && (Voice_Busy == 0))
  31.                                 {
  32.                                                 Voice_Flag = 0;
  33.                                        
  34.                                                 TEMP[0] = (Temperature / 10) + 0x30;
  35.                                                 TEMP[1] = (Temperature % 10) + 0x30;
  36.                                                
  37.                                                 UART1_SendByte(0x42);
  38.                                                 UART1_SendByte(0X37);
  39.                                                 UART1_SendByte(0x3A);
  40.                                        
  41.                                                 UART1_SendByte(0x31);
  42.                                                 UART1_SendByte(0x31);
  43.                                        
  44.                                                 UART1_SendByte(0x30);
  45.                                                 UART1_SendByte(TEMP[0]);
  46.                                        
  47.                                                 UART1_SendByte(0x31);
  48.                                                 UART1_SendByte(0x30);
  49.                                        
  50.                                                 UART1_SendByte(0x30);
  51.                                                 UART1_SendByte(TEMP[1]);

  52.                                                 UART1_SendByte(0x0d);
  53.                                                 UART1_SendByte(0x0a);
  54.                                 }                               
  55.                                 LED1 = LED1_ON;
  56.                                 BEEP = BEEP_ON;
  57.                                 delay_ms(500);
  58.                                 LED1 = LED1_OFF;
  59.                                 BEEP = BEEP_OFF;
  60.                                 delay_ms(500);
复制代码
最后,看看视频效果吧,https://www.bilibili.com/video/BV1RW4y1H7Jg/感觉效果还是不错的,这种其实基本就和TTS效果相当了,而且还可以随便修改音色音调,其实要是专业一些,估计会比TTS效果要好,最后,要感谢ST社区这个平台,可以分享,同时感谢管理员的支持与帮助,愿ST社区越来越好,一起加油!

收藏 评论4 发布时间:2022-11-27 23:26

举报

4个回答
STMCU-管管 回答时间:2022-11-28 10:37:46
甚是想念啊,好久不见
billy226 回答时间:2022-11-28 11:14:12
这个是比较方便
yangjiaxu 回答时间:2022-11-29 10:47:39
STMCU-管管 发表于 2022-11-28 10:37
甚是想念啊,好久不见

必须的,日后常来
yangjiaxu 回答时间:2022-11-29 10:48:29

成本降下来了,就是首次操作会比较麻烦,其实大框弄好之后,往后就是修改语音内容了,非常容易而且移植性较好,效果也不错
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版