语音芯片介绍

模块特征(简要介绍)

1、支持MP3 WAV硬件解码
2、支持FAT文件系统
3、两线串口模式、一线串口模式
4、支持普通音乐播放器具有的功能如上一曲、下一曲、播放、暂停、停止、选曲等常用功能
5、支持智能组合播放,特定的文件夹里的歌曲组合,发送曲目名即可
6、30级音量调节
7、官方带有配套上位机,可以生成实现所需功能的传输指令

更新语音内容说明

JQ8400 语音模块选用的是 SOC 方案,集成了一个 16 位的 MCU,以及一个专门针对音频解码的 ADSP,采用硬解码的方式,更加保证了系统的稳定性和音质。小巧尺寸更加满足嵌入其它产品的需求。
SPI-flash(更换语音内容)
此芯片最大的优势在于能够灵活的更换 SPI-flash 内的语音内容,省去了传统语音芯片需要安装上位机更换语音的麻烦,SPI FLASH 直接模拟成 U 盘,跟拷贝 U 盘一样,非常方便。使得产品研发和生产变得便捷简单。一线串口控制模式、RX232 串口控制可选,为研发提供更多的选择性。USB 数据线连接模块,插上电脑,电脑会自动识别,像插入U盘一样,可以直接更换语音内容,语音文件命名方式有一定限制,程序也需要按这个格式编写

模块引脚说明


JQ8400-FL的芯片引脚,还有带有TF的和有其它可控制的IO口的芯片

芯片引脚说明

二两线串口通信(一线串口通信见附件官方文档)

串口传输函数

void UART1_SendCode(u8 *DATA,u8 len)
{USART_ClearFlag(USART1,USART_FLAG_TC);    //发送之前清空发送标志while(len--){USART_SendData(USART1, *DATA++);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束}
}

两线串口指定路径播放以下为它的驱动函数,支持中文和英文数字等组,建议文件夹名和文件名不要过长。建立两个文件夹,文件夹名为测试1,测试1内有文件夹2,文件夹2里有文件00002的音频。

/************************************************************************
功能描述:播放任意路径下的的音频文件
入口参数:JQ8X00_Symbol:系统盘符,*DATA:需要播放的音频文件路径
返 回 值: none
其他说明:播放说明例 如 :/广告/小米手机.mp3,可以按如下格式/广告* /小米*???,“广告*”代表前两个字为“广告的文件夹”,*为通配符注意格式,下一个目录符号前要加*,如/测试1* /测试2* /00002*???JQ_8x00_RandomPathPlay(JQ8X00_FLASH,"广告* /小米")播放FLASH根目录下文件名为00001.mp3的音频,则传JQ_8x00_RandomPathPlay(JQ8X00_FLASH,"/00001");
**************************************************************************/
void JQ8x00_RandomPathPlay(JQ8X00_Symbol symbol,char *DATA)
{uint8_t Buffer[52] ={0xaa,0x08};uint8_t i,j;Buffer[2] = 1 + strlen(DATA) + 4;       Buffer[3] = symbol;        i = 4;while(*DATA){Buffer[i++] =  *DATA;DATA++;}Buffer[i++] = '*';Buffer[i++] = '?';Buffer[i++] = '?';Buffer[i++] = '?';for(j=0;j<i;j++){Buffer[i] = Buffer[i] + Buffer[j];     }i++;JQ8x00_UART(Buffer,i);
}
//下面为播放函数
char Path_Buffer[] = {"/测试1*/测试2*/00002"};         //播放路径: 根目录->测试1->测试2 下文件名为00002的音频文件
JQ8x00_RandomPathPlay(JQ8X00_FLASH,Path_Buffer);      //播放 根目录->测试1->测试2 下文件名为00002的音频文件

两线串口组合播放以下为它的驱动函数,组合播放是按文件名来组合,文件要求存储在“ZH”文件夹下,可以把要组合的文件名
称更改为两个字节的名称,一般建议用数字表示。如: 01.mp3,02.mp3,也可以用两个字母或一个汉字命名 。

/************************************************************************
功能描述:组合播报函数
入口参数:    *DAT:字符串指针,Len字符串长度
返 回 值: none
其他说明: 将需要播报的文件名放入数组中作为形参即可
**************************************************************************/
void  JQ8x00_ZuHeBoFang(uint8_t *DATA,uint8_t Len)
{u16 CRC_data=0,i = 3;uint8_t Buffer[ZH_MAX] ={0xaa,0x1b};Buffer[2] = Len*2;            //计算长度CRC_data = CRC_data + 0xaa + 0x1b + Buffer[2];while(Len--){Buffer[i] = *DATA/10+0x30;           //取出十位CRC_data = CRC_data + Buffer[i];i++;Buffer[i] = *DATA%10+0x30;          //取出个位CRC_data = CRC_data + Buffer[i];i++;DATA++;}Buffer[i] = CRC_data;i++;JQ8x00_UART(Buffer,i);
}
//下面为播放函数uint8_t ZH_Buffer[3] = {1,2,3};    JQ8x00_ZuHeBoFang(ZH_Buffer,3);             //将ZH文件夹下名字为01 02 03的3个音频文件依次播放

芯片通信采用全双工串口通信;
波特率为 9600,数据位:8 ,停止位 1 位,检验位 N
通信格式
起始码-指令类型-数据长度(n)-数据 1-数据 n-和检验(SM)
指令码 :固定为 AA
指令类型 : 用来区分指令类型
数据长度 :指令中的数据的字节数
数据 :指令中的相关数据,当数据长度为 1 时,表示只有 CMD,没有数据位
和检验 :为之前所有字节之和的低 8 位,即起始码到数据相加后取低 8 位 鯦数据格式 :发送的数据或命令,高 8 位数据在前,低 8 位在后
协议约定
播放状态定义 :系统上电处于停止状态
00(停止) 01(播放) 02(暂停)
盘符定义: 切换盘符后处于停止状态
USB:00 SD:01 FLASH:02 NO_DEVICE:FF
音量:音量总共为 31 级,0-30 级,上电默认为 20 级
播放模式定义:上电默认为单曲停止

/************************************************************************
功能描述:起始码-指令类型-数据长度-校验和
入口参数:    MODE:模式
返 回 值: none
其他说明: 无数数据传入
**************************************************************************/
void  JQ8x00_Command(UartCommand Command)
{uint8_t Buffer[4] ={0xaa};Buffer[1] = Command;            //指令类型         Buffer[2] = 0x00;           //数据长度Buffer[3] = Buffer[0] +  Buffer[1] +  Buffer[2];            //校验和JQ8x00_UART(Buffer,4);
}/************************************************************************
功能描述:起始码-指令类型-数据长度-数据-校验和
入口参数:    *DAT:字符串指针,Len字符串长度
返 回 值: none
其他说明:
**************************************************************************/
void  JQ8x00_Command_Data(UartCommandData Command,uint8_t DATA)
{uint8_t Buffer[6] ={0xaa};uint8_t DataLen = 0;Buffer[1] = Command;       //指令类型if((Command != AppointTrack) && (Command != SetCycleCount) && (Command != SelectTrackNoPlay) && (Command != AppointTimeBack) && (Command != AppointTimeFast))        //只含一个数据指令    {Buffer[2] = 1;         //数据长度Buffer[3] = DATA;       //数据Buffer[4] = Buffer[0] +  Buffer[1] +  Buffer[2] + Buffer[3];  //校验和DataLen = 5;}else                                                         //含两个数据指令 {Buffer[2] = 2;         //数据长度Buffer[3] = DATA/256;       //数据Buffer[4] = DATA%256;       //数据Buffer[5] = Buffer[0] +  Buffer[1] +  Buffer[2] + Buffer[3] + Buffer[4];  DataLen = 6;}

串口传输控制指令包含无数据的和多个数据的

typedef enum {CheckPlayState                  = 0x01,                   /*查询播报状态*/Play                            = 0x02,                  /*播放*/pause                           = 0x03,                  /*暂停*/Stop                            = 0x04,                  /*停止*/LastSong                        = 0x05,                  /*上一曲*/NextSong                        = 0x06,                 /*下一曲*/   CheckOnelineDisksign          = 0x09,                    /*查询当前在线盘符*/CheckCurrentDisksign            = 0X0A,                    /*查询当前播放盘符*/CheckTotalTrack                 = 0x0C,                 /*查询总曲目*/CurrentTrack                    = 0x0D,                  /*当前曲目*/LastFloder                      = 0x0E,                  /*上一个文件夹目录*/NextFloder                      = 0x0F,                  /*下一个文件夹目录*/          EndPlay                           = 0x10,                /*结束播放*/CheckFloderFirstTrack           = 0x11,                 /*查询文件目录首曲目*/CheckFloderAllTrack             = 0x12,                 /*查询文件目录总曲目*/AddVolume                       = 0x14,                 /*音量加*/DecVolume                       = 0x15,                 /*音量减*/EndZHPlay                       = 0X1C,                 /*结束组合播报*/ CheckSongShortName              = 0x1E,                    /*查询歌曲短文件名*/EndLoop                         = 0x21,                 /*结束复读*/GetTotalSongTime                = 0x24,                 /*获取当前曲目总时间*/OpenPlayTime                    = 0x25,                 /*播放时间开发送*/                ClosePlayTime                   = 0x26,                 /*关闭播放时间发送*/
}UartCommand;     //无数据的指令,起始码-指令类型-数据长度-校验和typedef enum {AppointTrack                    = 0x07,                  /*指定曲目播放*/SetCycleCount                   = 0x19,                  /*设置循环次数*/SetEQ                           = 0X1A,                  /*EQ设置*/SelectTrackNoPlay               = 0x19,                  /*选曲不播放*/GoToDisksign                    = 0X0B,                 /*切换指定盘符*/SetVolume                       = 0x13,                 /*音量设置*/SetLoopMode                     = 0x18,                 /*设置循环模式*/SetChannel                      = 0x1D,                 /*设置通道*/ AppointTimeBack                 = 0x22,                 /*指定时间快退*/AppointTimeFast                 = 0x23,                 /*指定时间快退*/
}UartCommandData;       //包含多个数据的指令,起始码-指令类型-数据长度-数据1-...-校验和

盘符和循环模式选择指令

typedef enum {JQ8X00_USB                      = 0X00,                 /*UPANND*/JQ8X00_SD                       = 0x01,                 /*SD*/JQ8X00_FLASH                    = 0x02,                 /*FLASH*/
}JQ8X00_Symbol;       //系统盘符
//循环模式选择在包含多个数据指令里面
//    SetLoopMode                     = 0x18,                 /*设置循环模式*/
typedef enum {OverallCycle                = 0X00,         /*全盘循环 按顺序播放全盘曲目,播放完后循环播放*/SingleCycle                 = 0x01,         /*单曲循环 一直循环播放当前曲目*/SingleStop                  = 0x02,         /*单曲停止 播放完当前曲目一次停止*/OverallRandom               = 0X03,         /*全盘随机 随机播放盘符内曲目*/CatalogCycle                = 0X04,          /*目录循环 按顺序播放当前文件夹内曲目,播放完后循环播放,目录不包含子目录*/CatalogRandom               = 0x05,          /*目录随机 在当前目录内随机播放,目录不包含子目录*/CatalogTurnPlay             = 0x06,         /*目录顺序播放 按顺序播放当前文件夹内曲目,播放完后停止,目录不包含子目录*/OverallTurnPlay             = 0x07,         /*全盘顺序播放 按顺序播放全盘曲目,播放完后停止*/
}LoopModeSelect;      //循环模式选择

通过按键控制播放不同歌曲,使用的是原子的STM32ZET6的串口1,见附件文档

附件:JQ8400
注:参考官方所给文档进行编写的

语音芯片JQ8400的使用心得相关推荐

  1. 阿里AI labs发布两大天猫精灵新品,将与平头哥共同定制智能语音芯片

    作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 2019 年,去年刮起的一阵智能音箱热浪似乎稍微冷却下来,新产品不再像雨后春笋一样层出不穷,挺过市场洗礼的产品更是凤毛麟角,这些产 ...

  2. 单片机断电后不保存程序_为什么单片机语音芯片既有flash又有EEPROM

    为什么单片机语音芯片既有flash又有EEPROM 单片机语音芯片运行时的数据存在于RAM (随机存储器)中,停电后无法保留RAM的数据时,如何在停电后不丢失数据呢?这需要使用EEPROM和FLASH ...

  3. 阿里云开放国内首个云端数据库测试平台,云已成为数据库新标准;华为5G随行WiFi发布;科大讯飞推出 AI 专用语音芯片系列……...

    戳蓝字"CSDN云计算"关注我们哦! 嗨,大家好,重磅君带来的[云重磅]特别栏目,如期而至,每周五第一时间为大家带来重磅新闻.把握技术风向标,了解行业应用与实践,就交给我重磅君吧! ...

  4. 全新 AI 语音芯片、双麦 AIoT 模组,科大讯飞硬核技术助力智能家电创新

    据艾瑞咨询的数据显示,2017 年中国智能家居市场规模为 3342.3 亿元,其中智能家电规模为2828.0亿元,占比87%.预计到 2020 年智能家电的市场规模将达到 5155.0 亿元. 智能家 ...

  5. 科大讯飞语音识别芯片_科大讯飞造家电专用语音芯片 市场机会在哪里?

    撰文/蓝科技 家电行业算不上朝阳产业,也绝不是夕阳产业,但围绕家电行业上下游打造的产业链,却带来了很多机会. 尤其是AI驱动.5G到来之际,AIoT正成为新的风口向市场快速渗透.以家电行业为例,理论上 ...

  6. 成都这家AI语音芯片公司又融了数千万,能“偷袭”科大讯飞不?

    新蓉商关注: 3月23日, 成都启英泰伦科技有限公司 (以下简称"启英泰伦") 官方消息称 公司完成新一轮数千万元融资, 新蓉商记者获悉, 这家公司注册资本已经先后6次增资, 目前 ...

  7. 谈谈市场上常用语音芯片方案选型,录音芯片方案选型

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <嵌入式Linux开发实战> 转自:http:/ ...

  8. sop8语音芯片选型,九齐硕呈等等比较,看完此篇就足够了

    目录 一.简介 二.KT148A语音芯片介绍 1. 32 位 DSP 语音芯片.5MHZ的内部振荡,PLL到120MHZ: 2. 工作电压 2.0~5.5V: 注意低于3.3V的供电,硬件上有细节的区 ...

  9. 语音芯片播报方案选型补充说明

    一.简介 现在市场上语音芯片的种类烦多.从语音识别芯片到语音播放芯片,可选的型号和种类都很多,要选一个合适的还是比较困难.现在的语音播放芯片,一般分为纯语音播放(指OTP芯片),带Flash播放语音芯 ...

最新文章

  1. python gdbm_GDBM不适用于Python 3.6和anaconda
  2. Linux下用iptables做端口映射
  3. Angular面试从喜剧到悲剧的十个问题
  4. 开方计算与浮点数的问题
  5. PHP error_reporting() 错误控制函数功能详解
  6. 廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配
  7. 阿里播放器Aliplayer封装
  8. PPC2003SE开发日记-资源之工具安装(JONSON原创)
  9. 大作手操作体系:突破后回调不下箱体可加仓,但是也有失误的时候!
  10. Ansible(十四)-- ansible 中的变量(三) set_fact 模块 注册变量实现跨play调用变量
  11. JavaScript事件函数
  12. Shader实现透明反射效果应用地板
  13. 2015校园O2O商业模式解析——从社交切入
  14. 用Interl 5100AGN 无线网卡破解无线网络WEP密码
  15. 简述数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型
  16. Dcloud云函数服务空间
  17. Conflux伍鸣:用DAG结构提升中本聪共识的吞吐率
  18. 课程设计:基于Python的爬虫租房数据分析
  19. 唐诗宋词学习·106~110节
  20. js基础1 输入输出方式 数据类型

热门文章

  1. matlab 解缠原理,相位解缠算法matlab
  2. 使用 logrotate 配置 supervisor 进行日志管理按天备份
  3. android studio 下拉菜单,怎么在android studio中使用Spinner实现一个下拉菜单
  4. Microsoft.Office.Interop.Word 创建word
  5. 用js代码在body里面添加内容
  6. JavaWeb实现注册登录功能并将用户数据写进数据库(商城系统第一部分)
  7. VSCode 格式化 cpp 文件时配置左大括号不换行
  8. 风影ASP.NET基础教学 9 数据访问
  9. 三国杀代码12武将C++
  10. 《郑军的回忆》文章记录了我3年的痛苦过去