智能车制作
标题:
语音问题求各位大神帮助呀~~~~~~~(>_<)~~~~
[打印本页]
作者:
静亦涟漪
时间:
2012-8-19 11:53
标题:
语音问题求各位大神帮助呀~~~~~~~(>_<)~~~~
自己想做一个语音的智能车……代码现在写到菜单式语音识别系统了……用 ASR M08-A 模块 但是模块同一时刻只支持50条关键词角度变化满足不了需求。
因为,ASR M08-A是支持动态编辑关键词列表的,所以可以利用这个功能做成菜单式的语音识别系统。
举例:做一个语音点歌系统
1. 首先,第一个菜单为歌手的名字,如陈奕迅、郭富城、卓依婷……
2. 当用户说出“陈奕迅”时,系统马上发送添加关键词指令将陈奕迅的所有歌曲
名一条条的添加进去。
3. 当用户说出歌名“我的背包”,然后播放音乐“我的背包.MP3”
但是代码写的不对……~~~~(>_<)~~~~ 求指导……
我写的 gequ1和gequ2是发送添加关键词指令
play_list1和play_list2是播放歌曲指令
#include <at89x51.h>
unsigned char a; //a用来存放串口接收到的数据
unsigned char gequ1[2][12]=
{0x30,0x31,0x2C,0x79,0x69,0x2C,0x30,0x30,0x32,0x2C,0x24,0xA0,
0x30,0x32,0x2C,0x73,0x61,0x6E,0x2C,0x30,0x30,0x33,0x2C,0x24};
unsigned char gequ2[2][12]=
{0x31,0x31,0x2C,0x79,0x69,0x2C,0x30,0x31,0x32,0x2C,0x24,0xA0,
0x31,0x32,0x2C,0x73,0x61,0x6E,0x2C,0x30,0x31,0x33,0x2C,0x24};
unsigned char play_list1[2][10]=
{0x70,0x6C,0x61,0x79,0x2C,0x30,0x30,0x32,0x2C,0x24,
0x70,0x6C,0x61,0x79,0x2C,0x30,0x30,0x33,0x2C,0x24};
unsigned char play_list2[2][10]=
{0x70,0x6C,0x61,0x79,0x2C,0x30,0x31,0x32,0x2C,0x24,
0x70,0x6C,0x61,0x79,0x2C,0x30,0x31,0x33,0x2C,0x24,};
int i,k,j;
unsigned char play[10];
void init()
{
TMOD=0x20;//定时器1使用初值自动重装方式,方式2
TH1=0xfd;
TL1=0xfd;//9600波特率初值
TR1=1;//允许定时器计数
SM0=0;//方式1设置
SM1=1;
REN=1; //允许串口接收
EA=1; //开总中断
ES=1; //开串口中断
}
main()
{ init();
while(1)
{ if(a==1)
{
for(i=0;i<2;i++)
{
for(k=0;k<12;k++)
SBUF=gequ1[i][k];
while(!TI);
TI=0;
}
REN=0;
EA=0;
ES=0;
TMOD=0x02;//定时器0使用初值自动重装方式,方式2
TH0=0xfd;
TL0=0xfd;//9600波特率初值
TR0=1;//允许定时器计数
SM0=0;//方式1设置
SM1=1;
REN=1; //允许串口接收
EA=1; //开总中断
ES=1; //开串口中断
while(1)
{ play[10]=play_list1[a-2]; //第二次中断接收到的a
for(j=0;j<10;j++)
{
SBUF=play[j];
while(!TI);
TI=0;
}
}
}
if(a==11)
{
for(i=0;i<2;i++)
{
for(k=0;k<12;k++)
SBUF=gequ2[i][k];
while(!TI);
TI=0;
}
REN=0;
EA=0;
ES=0;
TMOD=0x02;//定时器0使用初值自动重装方式,方式2
TH0=0xfd;
TL0=0xfd;//9600波特率初值
TR0=1;//允许定时器计数
SM0=0;//方式1设置
SM1=1;
REN=1; //允许串口接收
EA=1; //开总中断
ES=1; //开串口中断
while(1)
{ play[10]=play_list2[a-12]; //第二次中断接收到的a
for(j=0;j<10;j++)
{
SBUF=play[j];
while(!TI);
TI=0;
}
}
}
else;
}
}
void serial() interrupt 4 //串口中断函数
{
if(RI==1)//如果是接收中断,进行下面工作
{
a=SBUF;//串口接收到到的数据存放到a中
RI=0;//接收中断标志位标志
}
if(TI==1)//如果是发送中断,直接清零发送中断标志,不做任何工作
{
TI=0; //发送中断标志位清零
}
}
我还是单片机小白阶段
{:soso_e154:}
//具体内容参考
//===========================本程序功能===========================//
//上电后单片机自动发送“Play,001,$”指令播放SD卡中0001.AD4音频文件//
//客户可参考此程序编写单片机添加关键词程序等。
//================================================================//
#include <at89x51.h>
unsigned char PLAY[]={0x70,0x6C,0x61,0x79,0x2C,0x30,0x30,0x31,0x2C,0x24};
//“PLAY_0001_AD4[]”这个数组为"
lay,001,$"指令转换为ASCII码后的指令码数组
main()
{
unsigned char i;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;//9600波特率
TR1=1;
SM0=0;
SM1=1;
REN=1;
ES=0;
for(i=0;i<10;i++)//i为PLAY_0001_AD4数组的元素个数
{
SBUF=PLAY[i];
while(!TI);
TI=0;
}
while(1);
}
{:soso_e183:}{:soso_e183:}{:soso_e183:}{:soso_e183:}{:soso_e183:}{:soso_e183:}
作者:
yukunlinykl
时间:
2012-8-19 15:01
问错地方了吧。
作者:
静亦涟漪
时间:
2012-8-19 19:19
yukunlinykl 发表于 2012-8-19 15:01
问错地方了吧。
e...那应该问在哪= =!
作者:
山水
时间:
2012-9-25 14:20
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2