智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2420|回复: 3
打印 上一主题 下一主题

语音问题求各位大神帮助呀~~~~~~~(>_<)~~~~

[复制链接]

2

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
威望
143
贡献
46
兑换币
0
注册时间
2012-6-20
在线时间
10 小时
毕业学校
东北大学
跳转到指定楼层
1#
发表于 2012-8-19 11:53:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己想做一个语音的智能车……代码现在写到菜单式语音识别系统了……用 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:}

38

主题

1651

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
8770
威望
4444
贡献
2638
兑换币
1818
注册时间
2010-12-29
在线时间
844 小时
2#
发表于 2012-8-19 15:01:40 | 只看该作者
问错地方了吧。
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
威望
143
贡献
46
兑换币
0
注册时间
2012-6-20
在线时间
10 小时
毕业学校
东北大学
3#
 楼主| 发表于 2012-8-19 19:19:12 | 只看该作者
yukunlinykl 发表于 2012-8-19 15:01
问错地方了吧。

e...那应该问在哪= =!
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

高级会员

Rank: 4

积分
827
威望
423
贡献
242
兑换币
115
注册时间
2012-8-13
在线时间
81 小时
4#
发表于 2012-9-25 14:20:13 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-23 15:30 , Processed in 0.052883 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表