_SKU_DFR0273_Speech_Synthesis_Shield中英文语音合成模块 - jimaobian/DFRobotWikiCn GitHub Wiki
概述
在使用Arduino做机器人或互动媒体时,有没有想过让它们说点什么呢?现在中文英文语音合成模块帮你解决问题,Arduino 只需要uart即可和中文英文语音合成模块通讯,再外接一个喇叭。该模块就可以将你希望说的中英文说出来。
技术规格
- 模块电源:+3.3V与+5V
- 标准Arduino接口
- 带功放排针接口
- 标准音频耳机接口
- 模块尺寸:53x56mm
模块开关按钮功能
- 侧拨开关:Prog端为使语音合成模块与Arduino断开,Run端为下载完程序后使语音合成模块与Arduino连接。
- 两个直拨开关:波特率设置开关,请参看板子背面的波特率设置表。
- RST按钮:语音合成芯片复位按钮,不能复位Arduino。
英语语音合成
芯片状态回传说明
实现功能函数介绍
实现该模块功能由两个函数组成:语音合成函数和执行函数。
初始化函数
初始化函数是用来初始化存储语音内容的数组的函数。
- Void SpeechSynthesis.buf_init(byte ay[]);
- 参数说明:
- byte ay[]存储语音合成的内容。
- 注意:ay[0]和ay[1]存储的是语音合成内容长度+2(即ay已经存储数据的多少)
- 实例:
- byte sr[200];
- SpeechSynthesis.buf_init(sr);
- 说明:sr存储语音合成的内容。
语音合成函数
语音合成函数是用来合成需要合成的语音内容和指点如何读该语音内容的函数。
- void SpeechSynthesisClass.English(char sr[],byte cmd,char a[])
- 参数说明:
- char sr[]存储语音内容
- byte cmd语音合成命令
- char a[]语音内容或参数
- 实例:
- char ssr[500]="hello";
- SpeechSynthesis.English(ssr,4,"5");
- 说明:ssr[]存储语音内容的数组;4是命令:由下面参数说明可以知道(音量调节,有0~10共11个等级);5是命令参数这里选择的是5级。
- SpeechSynthesis.English(ssr,6,"cooki");
- 说明:ssr[]存储语音内容的数组;6是命令英文合成;"cooki"是希望合成的英文内容。
注意:
cmd取值及其意义(语音合成命令) :
- /*参数取值*/参数意义和例子
- /*1*/静音:最大的静音长度为268 秒,以毫秒为单位。
- /*2*/语速:提供11 级的语速调节, 最小为0,最大为10,值越大越快,芯片默认的语速为5。
- /*3*/语调调节:提供11 级的语调调节, 最小为0,最大为10,芯片默认的语调大小为5。值越大越声音越大。
- /*4*/音量调节:提供11 级的音量调节,最小0 为静音,最大为10,芯片默认的音量大小为5。#和*的地方被处理成短暂的停顿。
- /*5*/恢复默认值:恢复到默认的语速、音量、语调进行合成。
- /*6*/英文合成。
执行函数
执行函数是用来指定工作模式、发音人和读音格式的函数。
- void SpeechSynthesisClass::Espeaking(byte cmda ,byte cmdb,byte cmdc,char c[])
- 参数说明:
- byte cmda 执行函数命令(工作模式)
- byte cmdb执行函数命令2 (选择发音人)
- byte cmdc 执行函数命令2 (读音格式)
- char c[] 已经合成的语音内容
- 实例:
- SpeechSynthesis.ESpesaking(0,19,7,ssr);
- 说明:第一个参数:0是命令(合成命令);第二个参数:19是命令(选择发音人);第三个参数:7是命令(读音格式);ssr待读的内容。
注意:
Cmda取值及其意义(工作模式):
- /*参数取值*/参数意义和例子
- /*0*/合成命令
- /*1*/停止合成命令
- /*2*/暂停合成命令
- /*3*/恢复合成命令
- /*4*/状态查询命令
- /*5*/进入省电模式命令
Cmdb取值及其意义 (选择发音人):
- /*参数取值*/参数意义和例子
- /*0*/我是许久。 男声合成:“我是许久”
- /*1*/我是许多。 男声合成:“我是许多”
- /*2*/我是晓萍。 女声合成:“我是晓萍”
- /*3*/我是唐老鸭。 唐老鸭模拟声合成:“我是唐老鸭”
- /*4*/我是许小宝。 女童声合成:“我是许小宝”
- /*5*/我是晓梦。 女声合成合成:“我是晓梦” //仅V1.1版本shield支持
- /*6*/英语男声合成:“I am John”(只读英语)
- /*7*/英语女声合成:“I am Terry”(只读英语)//仅V1.1版本shield支持
- /*8*/英语女声合成:“I am Catherine”(只读英语)//仅V1.1版本shield支持
- /*9*/俺是晓倩。 东北女声合成:“俺是晓倩”(只读汉语)//仅V1.1版本shield支持
- /*10*/我是晓蓉。 四川女声合成:“我是晓蓉”(只读汉语)//仅V1.1版本shield支持
- /*11*/我系晓美。 粤语女声合成:“我系晓美”//仅V1.1版本shield支持
- /*12*/我是晓琳。 台湾女声合成:“我是晓琳”//仅V1.1版本shield支持
- /*13*/我是小强。 湖南男声合成:“我是小强”(只读汉语)//仅V1.1版本shield支持
- /*14*/我是小坤。 河南男声合成:“我是小坤”(只读汉语)//仅V1.1版本shield支持
- /*15*/我系大龙。 粤语男声合成:“我系大龙” //仅V1.1版本shield支持
- /*16*/我是晓燕。 女声合成:“我是晓燕”
- /*17*/我是小峰。 男声合成:“我是小峰”//仅V1.1版本shield支持
- /*18*/我是楠楠。 女童声合成:“我是楠楠”//仅V1.1版本shield支持
- /*19*/我是晓婧。 女声合成:“我是晓婧”//仅V1.1版本shield支持
Cmdc取值及其意义 (读音格式):
- /*参数取值*/参数意义和例子
- /*4*/123km 合成为:“one hundred and twenty three kilometres”
- /*5*/“you” 合成为:“you”
- /*6*/“you” 合成为:“y-o-u”
- /*7*/8016700 合成为:eight zero one, six seven zero zero
英文示例代码
#include <SpeechSynthesis.h>//加入语音合成库
void setup()
{
Serial.begin(9600);//初始化串口
}
byte ssr[500];//定义一个缓存
void loop()
{
SpeechSynthesis.buf_init(ssr);//清空或者初始化缓存
SpeechSynthesis.English(ssr,6,"cooki");//编辑合成内容函数
SpeechSynthesis.English(ssr,4,"5");//音量调节为5级
SpeechSynthesis.English(ssr,6,"cooki Clock, reset and supply management");//编辑合成内容函数
SpeechSynthesis.English(ssr,2,"10");//合成语速设置为10级
SpeechSynthesis.English(ssr,6,"cooki Clock, reset and supply management");//编辑合成内容函数
SpeechSynthesis.English(ssr,2,"5");//合成语速设置为5级
SpeechSynthesis.English(ssr,5," ");///恢复到默认的语速、音量、语调进行合成
SpeechSynthesis.English(ssr,6,"cooki Clock, reset and supply management");//编辑合成内容函数
SpeechSynthesis.Espeaking(0,19,4,ssr);//开始将编辑好的内容转为语音内容
while(Serial.read()!=0x41)//等待语音合成完成
{}
while(Serial.read()!=0x4F)//等待语音播放完成
{}
SpeechSynthesis.buf_init(ssr);//清空或者初始化缓存
SpeechSynthesis.English(ssr,6,"hello cooki 123");//编辑合成内容函数
SpeechSynthesis.Espeaking(0,19,4,ssr);//开始将编辑好的内容转为语音内容
while(Serial.read()!=0x41)//等待语音合成完成
{}
while(Serial.read()!=0x4F)//等待语音播放完成
{}
SpeechSynthesis.buf_init(ssr);//清空或者初始化缓存
SpeechSynthesis.English(ssr,6,"hello cooki 123");//编辑合成内容函数
SpeechSynthesis.Espeaking(0,19,7,ssr);//开始将编辑好的内容转为语音内容
while(1);
}
中文英文语音合成
芯片状态回传说明
实现功能函数介绍
实现该模块功能由三个函数组成:初始化函数、语音合成函数和执行函数。
初始化函数
初始化函数是用来初始化存储语音内容的数组的函数。
- Void SpeechSynthesis.buf_init(byte ay[]);
- 参数说明:
- byte ay[]存储语音合成的内容。
- 注意:ay[0]和ay[1]存储的是语音合成内容长度+2(即ay已经存储数据的多少)
- 实例:
- byte sr[200];
- SpeechSynthesis.buf_init(sr);
- 说明:sr存储语音合成的内容。
语音合成函数
语音合成函数是用来合成需要合成的语音内容和指点如何读该语音内容的函数。
- Void SpeechSynthesis.Chinese_english(byte ax[],byte bm[],int n,char c[],byte cmda,byte cmd);
- 参数说明:
- byte ay[]存储语音合成的内容。
- byte bm[]汉字语音内容
- int n汉字语音内容长度
- byte cmd语音合成函数的命令
- char c[]英语内容或者命令参数值
- 实例:
- byte d[]={0xB3,0xC9,0xB6,0xBC,0xBC,0xAB,0xC8,0xA4};/*成都极趣*/
- SpeechSynthesis.Chinese_english(sr,d,sizeof(d),6,0);
- 说明:sr[]存储语音合成的内容;d需要合成的汉字内容;sizeof(d)汉字内容长度;6是命令(中文合成);0参数在中文合成时无意义只是占位置。
- SpeechSynthesis.Chinese_english(sr,0,0,7,"hello d f robot");
- 说明:sr[]存储语音合成的内容;0无需要合成的汉字内容;0汉字内容长度;7是命令(英文合成);"hello d f robot"需要合成的英文内容;
- SpeechSynthesis.Chinese_english(sr,0,0,1,"26");
- 说明:sr[]存储语音合成的内容;0无需要合成的汉字内容;0汉字内容长度;1是命令(静音:最大的静音长度为268 秒,以毫秒为单位。);26参数值静音时间26毫秒;
注意: Cmda取值及其意义(语音合成函数的命令) : /*参数取值*/参数意义
- /*1*/静音:最大的静音长度为268 秒,以毫秒为单位。
- /*2*/语速:提供11 级的语速调节, 最小为0,最大为10,值越大越快,芯片默认的语速为5。
- /*3*/语调调节:提供11 级的语调调节,最小为0,最大为10, 芯片默认的语调大小为5。值越大越声音越大。
- /*4*/音量调节:提供11 级的音量调节,最小0 为静音,最大为10, 芯片默认的音量大小为5。#和*的地方被处理成短暂的停顿
- /*5*/恢复默认值:恢复到默认的语速、音量、语调进行合成。
- /*6*/中文合成
- /*7*/英文合成
执行函数
执行函数是用来指定工作模式、发音人和读音格式的函数。
- Void SpeechSynthesis.Spesaking(byte cmda ,byte cmdb,byte cmdc,byte c[]);
- 参数说明:
- byte cmda 执行函数命令1(工作模式)
- byte cmdb执行函数命令2 (选择发音人)
- byte cmdc执行函数命令3 (读音格式)
- byte c[]已经合成的语音内容
- 实例:
- SpeechSynthesis.Spesaking(0,0,7,sr);
- 说明:0命令(合成命令);0命令(选择发音人);7命令(读音格式);sr需要读的内容
- 注意:
Cmda取值及其意义 (工作模式):
- /*参数取值*/参数意义
- /*0*/ 合成命令
- /*1*/ 停止合成命令
- /*2*/ 暂停合成命令
- /*3*/ 恢复合成命令
- /*4*/ 状态查询命令
- /*5*/ 进入省电模式命令
Cmdb取值及其意义 (选择发音人):
- /*参数取值*/参数意义
- /*0*/我是许久。 男声合成:“我是许久”
- /*1*/我是许多。 男声合成:“我是许多”
- /*2*/我是晓萍。 女声合成:“我是晓萍”
- /*3*/我是唐老鸭。 唐老鸭模拟声合成:“我是唐老鸭”
- /*4*/我是许小宝。 女童声合成:“我是许小宝”
- /*5*/我是晓梦。 女声合成合成:“我是晓梦” //仅V1.1版本shield支持
- /*6*/英语男声合成:“I am John”(只读英语)
- /*7*/英语女声合成:“I am Terry”(只读英语)//仅V1.1版本shield支持
- /*8*/英语女声合成:“I am Catherine”(只读英语)//仅V1.1版本shield支持
- /*9*/俺是晓倩。 东北女声合成:“俺是晓倩”(只读汉语)//仅V1.1版本shield支持
- /*10*/我是晓蓉。 四川女声合成:“我是晓蓉”(只读汉语)//仅V1.1版本shield支持
- /*11*/我系晓美。 粤语女声合成:“我系晓美”//仅V1.1版本shield支持
- /*12*/我是晓琳。 台湾女声合成:“我是晓琳”//仅V1.1版本shield支持
- /*13*/我是小强。 湖南男声合成:“我是小强”(只读汉语)//仅V1.1版本shield支持
- /*14*/我是小坤。 河南男声合成:“我是小坤”(只读汉语)//仅V1.1版本shield支持
- /*15*/我系大龙。 粤语男声合成:“我系大龙” //仅V1.1版本shield支持
- /*16*/我是晓燕。 女声合成:“我是晓燕”
- /*17*/我是小峰。 男声合成:“我是小峰”//仅V1.1版本shield支持
- /*18*/我是楠楠。 女童声合成:“我是楠楠”//仅V1.1版本shield支持
- /*19*/我是晓婧。 女声合成:“我是晓婧”//仅V1.1版本shield支持
Cmdc取值及其意义(读音格式) :
- /*参数取值*/参数意义
- /*0*/科大讯飞 合成为:“科-大-讯-飞”
- /*1*/科大讯飞 合成为:“科大讯飞”
- /*2*/123km 合成为:“一百二十三公里”
- /*3*/123km 合成为:“一百二十三公里”
- /*4*/123km 合成为:“one hundred and twenty three kilometres”
- /*5*/你的英语是“you” 合成为:“你的英语是you”
- /*6*/你的英语是“you” 合成为:“你的英语是y-o-u”
- /*7*/你的英语是“you” 合成为:“你的英语是you”
- /*8*/科大讯fei1 芯片不识别拼音格式。合成为:“科大讯F E I”
- /*9*/科大讯fei1 芯片识别拼音格式。合成为:“科大讯飞”
- /*10*/姜溱河桥 合成为:“jiang1 qin2 he2 qiao2”
- /*11*/姜溱河桥 合成为:“jiang1 zhen1 he2 qiao2”
- /*12*/234343545 芯片自动判断。读作:二三四三四三五四五
- /*13*/[n1]234343545 芯片强制按照号码的方式合成数字串。读作:二三四三四三五四五
- /*14*/234343545 芯片强制按照数值的方式合成数字串。读作:两亿三千四百三十四万三千五百四十五
- /*15*/查丽 芯片按照默认的方式合成。读作: chá lì
- /*16*/查丽 芯片强制的将文本的第一个汉字按照姓氏的读音合成。读作:zhā lì
- /*17*/提示音铃声[x0]sound101 对应的声音是[x1]sound101
- /*18*/均起作用。读作: 预先制定的提示音铃声//sound101 为(提示音sound101 的铃声)
- /*19*/010-58301005-8016//芯片按照“幺”的读法合成号码文本中的“1”。读作:零//幺零 五八三零 幺零零五 转 八零幺六
- /*20*/010-58301005-8016
- /芯片按照“一”的读法合成号码文本中的“1”。读作:零一零 五八三零 一零零五 转 八零一六
- /*21*/安徽#科大*讯飞 芯片读成“安徽井号科大星号讯飞”
- /*22*/安徽#科大*讯飞 芯片读成“安徽 科大 讯飞”,#和*的地方被处理成短暂的停顿
中英文示例代码
#include <SpeechSynthesis.h>//加入语音合成库
void setup()
{
Serial.begin(9600);//初始化串口
}
byte sr[200];//定义一个缓存
byte d[]={0xB3,0xC9,0xB6,0xBC,0xBC,0xAB,0xC8,0xA4};//中文内容(GB2312)
void loop()
{
SpeechSynthesis.buf_init(sr);//清空或者初始化缓存
SpeechSynthesis.Chinese_english(sr,0,0,4,"10");//设置为最大音量
SpeechSynthesis.Chinese_english(sr,d,sizeof(d),6,0);//编辑合成内容函数
SpeechSynthesis.Chinese_english(sr,0,0,7,"hello d f robot");//编辑合成内容函数
SpeechSynthesis.Chinese_english(sr,0,0,1,"26");//停顿26毫秒
SpeechSynthesis.Chinese_english(sr,0,0,7," hello d f robot");//编辑合成内容函数
SpeechSynthesis.Chinese_english(sr,d,sizeof(d),6,0);//编辑合成内容函数
SpeechSynthesis.Speaking(0,0,7,sr);//开始将编辑好的内容转为语音内容
while(Serial.read()!=0x41)//等待语音合成完成
{}
while(Serial.read()!=0x4F)//等待语音播放完成
{}
SpeechSynthesis.buf_init(sr);//清空或者初始化缓存
SpeechSynthesis.Chinese_english(sr,0,0,7,"hello d f robot");//编辑合成内容函数
SpeechSynthesis.Chinese_english(sr,d,sizeof(d),6,0);//编辑合成内容函数
SpeechSynthesis.Speaking(0,0,7,sr);//开始将编辑好的内容转为语音内容
while(1);
}