一个声卡同时播放几个声音文件的简单方法?

gg 2000-07-09 04:10:00
有需要在程序中同时播放几个声音,因为要在线程级编程,所以不能用控件(对吗?),使用了
MCI接口,启动多个线程分别播放,发现有些声卡可以同时播放,有些不行并提示设备被占用,
是因为一些老一些的声卡不支持多声音流吗?是否可以通过混音操作使其同时播放多个声音
流?如果可以,怎样操作?哪儿有例程或教程?除此之外有没有其它办法?
各位大侠请鼎立相助,不胜感谢!!
...全文
606 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dusj 2000-08-31
  • 打赏
  • 举报
回复
GONOW给我一份好吗?
gonow 2000-07-28
  • 打赏
  • 举报
回复
我有wavmix32.dll的例程,vc的,请和xianghua_liu@263.net联系,记得给我分吆!
town 2000-07-12
  • 打赏
  • 举报
回复
我只知道,老的声卡一次只能使用一个Wave通道。现在的声卡可以支持多个通道同时使用,如YA724,同时播放七八个Wave没有问题。
sanhan 2000-07-10
  • 打赏
  • 举报
回复
关于问题2:
你应该用WINAPI来声明。你在VB下用的是PASCAL调用规范。
kxy 2000-07-10
  • 打赏
  • 举报
回复
DirectSound的出现就是为了多个wav的同时播放,建议你用DirectSound
tengel 2000-07-10
  • 打赏
  • 举报
回复
可以使用程序把声音混合在一起,这需要使用低层音频API函数,如果是8位的声音把两个文件的数据----除了文件头
z=x+y-255;
z=z>255?255:z;
z=z<0?0:z;
写到缓冲区即可,如果还不明白,再问
hhzh426 2000-07-10
  • 打赏
  • 举报
回复
感兴趣!
feng 2000-07-10
  • 打赏
  • 举报
回复
關注
tbmac 2000-07-10
  • 打赏
  • 举报
回复
关注
gg 2000-07-10
  • 打赏
  • 举报
回复
首先,DirectSound不能用,因为在nt下使用,windows下有一个wavmix32.dll,是一个第三方的库,可以实现混音,但我只找到vb的例程,在往VC下移植的过程中,遇到下列问题,大家可以一议:
1)VB函数调用中的结构(type),转移到VC下的结构(struct),调用是
使用结构名还是结构的指针.
2)VC标准dll的调用是否需要指定__stdcall等来说明参数的顺序
3)有没有wavmix32.dll的使用说明或例程
ta 2000-07-09
  • 打赏
  • 举报
回复
关注
gg 2000-07-09
  • 打赏
  • 举报
回复
程序有可能在nt下运行,所以Direct sound方法不能用.
sanhan 2000-07-09
  • 打赏
  • 举报
回复
可以试试Direct Sound.
《计算机应用基础》问答题答案 四、简答题 1、计算机系统由哪几部分组成,各部分的基本结构是什么? 计算机系统是由硬件系统和软件系统两大部分组成的。 一、电脑的硬件系统一般有: 1、主机;2、显示器;3、键盘;4、鼠标;5、音箱;6打印机;7、摄像头、扫描仪、数 码像机等设备。 二、电脑的软件系统可分为: 1 操作系统软件;2、应用软件。 2、OFFICE应用程序主要常用软件是什么,每个组件的主要用途是什么? OFFICE应用程序主要常用的组件有:word、excel、powerpoint。 word主要是文字处理软件,对文字进行排版,里面也可以画简单的图。 Excel是电子数据表程序,进行数字和预算运算的软件程序。 powerpoint是用于设计制作专家报告、教师授课、产品演示、广告宣传的电子版幻灯 片,制作的演示文稿可以通过计算机屏幕或投影机播放。 3、什么是Windows的文件,文件的常用操作有哪些? 文件是操作系统用来存储和管理数据信息的基本单位。 常用操作有:新建、复制、移动、删除、重命名。 4、Excel函数有哪几个分类? Excel函数一共有11类,分别是数据库函数、日期与时间函数、工程函数、财务函数 、信息函数、逻辑函数、查询和引用函数、数学和三角函数、统计函数、文本函数以及 用户自定义函数。 5、什么是计算机病毒,应该如何防护? 计算机病毒是编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计 算机使用并且能够自我复制的一组计算机指令或者程序代码。具有破坏性,复制性和传 染性。 计算机病毒的防护:首先需要为系统安装杀毒软件或防火墙,再禁用病毒进入设置。 1、禁用Guest账号;2、关闭端口;3、关闭共享;4、设置internet防火墙;5、及时安 装各种补丁程序;6、internet安全设置;7、选择适用的防病毒软件;8、邮件安全措施 ;9、网络密码安全防范;10、做好数据文件备份。 五、操作题 1、如果个人计算机不能播放声音,描述应当如何操作恢复声音。 造成计算机不能播放声音的原因很多,可用排除法查找: (1)检查声卡、连接线,以及音箱等设备是否连接正常;运行杀毒软件进行杀毒; (2)右击"我的电脑"----"属性"---"硬件"---- "设备管理器",打开"声音、视频和游戏控制器"有无问题,即看前面有没有出现黄色的 "?"。如有,重新安装这个设备的驱动程序进行解决; (3)有声音但不见小喇叭时,打开控制面板----声音和视频设备---- 音量,在"将音量图标放入任务栏"前打上对号; (4)无声音又无小喇叭时,打开控制面板----添加与删除程序---- 添加删除Windows组件,在"附件和工具"前打对号,点击"下一步",然后,关机重启,系 统会提示安装新硬件,按照提示进行安装即可; (5)卸载声卡驱动程序,重新进行安装或升级声频驱动程序; (6)当安装声卡驱动程序时出现"找不着AC晶片"提示,有可能是电脑中毒,或者因 违规操作误删了声卡驱动程序,抑或是内部软件冲突。解决的办法是重装系统和驱动程 序。 (7)关机后等待一段时间后再重新开机,有时声音问题会自行解决。 2、有一个Excel电子"学生成绩表",如下图所示,描述下列操作如何实现。 (1) 给所有单科不及格的成绩值,做红色字体标识。 (2) 筛选出所有本学期不及格的学生记录。 答:(1)选中单元格范围,在格式-条件格式-单元格数值-小于-公式右边输入 60,下面的格式中选择字体为红色,然后确定,即可将所有不及格的显示为红色。 (2)运用Excel自动筛选功能,先选中学生成绩,然后点"数据"下的"自动筛选",成绩 栏的顶端会出现一个小三角,再展开这个小三角,选择"自定义"选项,输入"低于60分" 进行筛选,即为全不及格的。 3、如果要制作一张新演示文稿,并在上面插入一部影片(影片格式可能是ppt支持,也 可能不是ppt支持),请描述制作过程。 答:PPT中插入视频的三种方法: 一、直接插入播放视频。在ppt菜单栏中选"插入"选项,从打开的下拉菜单中执行"插 入影片文件"命令,然后按提示步骤进行。 二、插入控件播放视频。这种方法就是将视频文件作为控件插入到幻灯片中的,然后 通过修改控件属性,达到播放视频的目的。使用这种方法,有多种可供选择的操作按钮 ,播放进程可以完全自己控制,更加方便、灵活。该方法更适合PPT课件中图片、文字、 视频在同一页面的情况。制作步骤如下: 1、在PPT视图"选项中的下拉菜单中选中"控件工具箱",再从下级菜单中选中[其他控 件]按钮。 2、在随后打开的控件选项界面中,选择"Windows Media Player"选项。 3、将鼠标移动到PPT的编辑区域中,画出一个合适大小的矩形区域,随后该区域就会 自动变为Windo
变速齿轮0.45 变速齿轮是一个神奇的改变游戏速度的程序。他是世界上第一个,也是目前最好的改变Windows游戏速度的程序。他几乎能改变任何Windows游戏的速度。我还没有发现任何其他程序能改变,而变速齿轮不能改变的游戏。并且在效果上,例如变速后画面的平滑性(这同时会影响游戏的操作性)、能使游戏达到的最快或最慢速度、使用的方便性、运行的稳定性等都是最好的。 除了游戏,变速齿轮事实上也能改变任何时间相关的程序的速度,例如视频播放、Flash、网页等。总之他是一个用途广泛而且相当有趣的程序。 可以从我的主页(http://www.wangrong1002.com/)上下载本程序的最新版本。 新增功能与改进 1、因为不小心丢了源代码,只好又重写了变速齿轮。虽然界面看起来和原来一样,但实际是完全重写的。 2、9x版的变速齿轮中使用了和NT版中相同的技术,因此几乎能和NT版一样稳定。 3、用Ctrl+加速或减速键可以在每次0.1或0.5次方倍之间切换。 4、自动判断操作系统,只安装9x或NT版。 5、最小化时缩小到系统托盘。 6、NT版可以从“速度改变的进程”列表中删除进程。 7、减小了安装程序。 8、支持更多的热键。 支持的操作系统 这一版本的变速齿轮可以在Windows 98、Windows 98SE、Windows ME、Windows 2000、Windows XP、Windows Server 2003下运行。在Windows 98、Windows 98SE、Windows ME下使用9x版的变速齿轮,在Windows 2000、Windows XP、Windows Server 2003下使用NT版的变速齿轮。由于变速齿轮的9x和NT版在使用上有很大不同(实际上他们是两个不同的程序),所以我将分别地介绍他们。目前变速齿轮不能在Windows NT 3.x和Windows NT 4.x下运行。其实要让变速齿轮能在这两个操作系统下运行是很容易的,方法也很多,不过连M$自己都不支持他们了,所以我也偷个懒吧。我也没有在Windows 95下做过测试,同样也是因为M$不再支持他们了。 变速齿轮的使用 9x版变速齿轮的使用很简单,你要做的唯一事情是移动滑杆设定你想要的速度。设定的速度对系统中所有进程(也就是正在运行的程序)都有效。注意,有些游戏不能在运行中改变速度,这时只要先设定好想要的速度再运行游戏就可以了。 NT版的变速齿轮使用比9x版略微复杂。他只对那些你指定的进程变速,对其他进程则没有影响,这样就大大提高了变速齿轮的稳定性。有几种方法可以指定需要变速的进程: 1。在“速度未改变的进程”列表框中是变速齿轮没有对他变速的进程。在这个列表框中选择一个进程,点加入按钮,可以把他加入到“速度改变的进程”列表中。 2。点浏览按钮(标题是三个点的那个按钮),将打开文件对话框。用他选择一个可执行文件(*.exe)。所选择的文件名将自动填入下拉列表框,并且自动运行。 3。在下拉列表框中填入带完全路径的可执行文件名,按运行按钮运行他。下拉列表框中保存着以前运行过的可执行文件名。你也可以方便地从中选择一个。 4。被变速齿轮变速的进程启动的进程也将自动被变速。由于几乎所有的进程都是由NT的外壳进程(就是在变速齿轮中显示为“Program Manager”的那个进程。桌面和资源管理器也都属于这个进程)启动的,所以如果把“Program Manager”加入到“速度改变的进程”列表中,将是一个方便的使用变速齿轮的方法。 如果进程列表没有正确反映当前的进程状态,可以点刷新按钮刷新列表。对于一些不能在运行中改变速度,或者在运行中改变速度会发生异常的游戏,请先设定好想要的速度,然后用除了第一种方法之外的方法启动游戏。 变速齿轮可以使用热键方便地改变速度。在不能切换到变速齿轮的使用界面,例如游戏正在运行时,热键甚至是唯一改变速度的方法。 点热键按钮可以弹出设置热键对话框。固定速度热键用于把变速齿轮设定到一个固定的速度,加快减慢热键用于加快或者减慢速度。如果核选“加快减慢热键使用精细调节”核选框,每次加快减慢2的0.1次方倍,否则每次加快减慢2的0.5次方倍。另外,使用Ctrl+加快减慢热键也可以在每次2的0.1次方倍和2的0.5次方倍之间切换。“启用热键”核选框用于设置所有热键是否有效。 注意如果用鼠标拖动滑杆将只停在整数倍位置,但是使用左右键可以进行更精细的调节。也可以使用Page Up、Page Down、Home、End键移动滑杆。 常见问题解答 *变速齿轮真的能让我的电脑运行加快256倍吗? 当然不能,否则Intel和AMD岂不是得改行卖软件。事实上他不会改变电脑的运行速度。 *使用变速齿轮会烧坏CPU、显卡和硬盘吗? 不会。如果在用变速齿轮时CPU、显卡或硬盘坏了,即使不用变速齿轮它们一样会坏。 *我在用Windows媒体播放器(Windows Media Player)看电影时想用变速齿轮快进和慢放,但我发现他只是使画面变得跳动,实际速度并没有变化。 在电脑中有声卡时媒体播放器会根据播放声音的速度播放视频。因此需要停用所有声卡。9x下是进入控制面板\系统\设备管理器,右键点击声卡设备,点属性,选在此硬件配置文件中禁用。NT下是进入控制面版\系统\硬件\设备管理器,右键点击声卡设备,点停用。 *加速器真的很好,特别是玩《石器时代》的时候,但是,突然有一天,我发现我的连接上的时间也跟着一起加速,连接时间过的飞快,我可是一个穷玩家啊,禁受不起打击的,希望给我答案!!!是不是加速的时候,电话费和网费也一起加速啊? 放心吧!使用变速齿轮是不会影响到电话费和网费的记费的,你看到的只是使用变速齿轮后的假象,电信局有自己的计费时钟。 *变速齿轮只能改变Windows95及以上版本游戏的速度吗? 是的,他不能改变DOS和Windows3.1游戏的速度。 *我怎么改变不了电脑移植版真侍魂的游戏速度? 由于计时方法的不同,一些游戏不能在运行中改变速度,或者在运行中改变速度会发生异常。只要先设定好速度再运行游戏就可以了。 *我在NeoRage模拟器中把速度降低8倍后为什么按键速度快了就做不出相应的动作,声音也完全变成了噪音? NeoRage并不是连续检测键盘,假设他每秒检测30次,降低8倍后每秒仅检测4次,在这4次检测之间的键盘状态是被忽略的。所以把动作放慢一点吧。变成噪音是由于模拟器的特殊性。据我的测试,在其他游戏中声音都是正常的。 *我把速度降低16倍后为什么看到很多游戏画面是一帧一帧变化的? 二维游戏画面每秒最多30帧,降低16倍后每秒仅有两帧,所以你能清楚地看到画面一帧一帧地变化。三维游戏的帧速率也经常会有上限
变速齿轮是一个神奇的改变游戏速度的程序。他是世界上第一个,也是目前最好的改变Windows游戏速度的程序。他几乎能改变任何Windows游戏的速度。我还没有发现任何其他程序能改变,而变速齿轮不能改变的游戏。并且在效果上,例如变速后画面的平滑性(这同时会影响游戏的操作性)、能使游戏达到的最快或最慢速度、使用的方便性、运行的稳定性等都是最好的。 除了游戏,变速齿轮事实上也能改变任何时间相关的程序的速度,例如视频播放、Flash、网页等。总之他是一个用途广泛而且相当有趣的程序。 可以从我的主页(http://www.wangrong1002.com/)上下载本程序的最新版本。 新增功能与改进 1、因为不小心丢了源代码,只好又重写了变速齿轮。虽然界面看起来和原来一样,但实际是完全重写的。 2、9x版的变速齿轮中使用了和NT版中相同的技术,因此几乎能和NT版一样稳定。 3、用Ctrl+加速或减速键可以在每次0.1或0.5次方倍之间切换。 4、自动判断操作系统,只安装9x或NT版。 5、最小化时缩小到系统托盘。 6、NT版可以从“速度改变的进程”列表中删除进程。 7、减小了安装程序。 8、支持更多的热键。 支持的操作系统 这一版本的变速齿轮可以在Windows 98、Windows 98SE、Windows ME、Windows 2000、Windows XP、Windows Server 2003下运行。在Windows 98、Windows 98SE、Windows ME下使用9x版的变速齿轮,在Windows 2000、Windows XP、Windows Server 2003下使用NT版的变速齿轮。由于变速齿轮的9x和NT版在使用上有很大不同(实际上他们是两个不同的程序),所以我将分别地介绍他们。目前变速齿轮不能在Windows NT 3.x和Windows NT 4.x下运行。其实要让变速齿轮能在这两个操作系统下运行是很容易的,方法也很多,不过连M$自己都不支持他们了,所以我也偷个懒吧。我也没有在Windows 95下做过测试,同样也是因为M$不再支持他们了。 变速齿轮的使用 9x版变速齿轮的使用很简单,你要做的唯一事情是移动滑杆设定你想要的速度。设定的速度对系统中所有进程(也就是正在运行的程序)都有效。注意,有些游戏不能在运行中改变速度,这时只要先设定好想要的速度再运行游戏就可以了。 NT版的变速齿轮使用比9x版略微复杂。他只对那些你指定的进程变速,对其他进程则没有影响,这样就大大提高了变速齿轮的稳定性。有几种方法可以指定需要变速的进程: 1。在“速度未改变的进程”列表框中是变速齿轮没有对他变速的进程。在这个列表框中选择一个进程,点加入按钮,可以把他加入到“速度改变的进程”列表中。 2。点浏览按钮(标题是三个点的那个按钮),将打开文件对话框。用他选择一个可执行文件(*.exe)。所选择的文件名将自动填入下拉列表框,并且自动运行。 3。在下拉列表框中填入带完全路径的可执行文件名,按运行按钮运行他。下拉列表框中保存着以前运行过的可执行文件名。你也可以方便地从中选择一个。 4。被变速齿轮变速的进程启动的进程也将自动被变速。由于几乎所有的进程都是由NT的外壳进程(就是在变速齿轮中显示为“Program Manager”的那个进程。桌面和资源管理器也都属于这个进程)启动的,所以如果把“Program Manager”加入到“速度改变的进程”列表中,将是一个方便的使用变速齿轮的方法。 如果进程列表没有正确反映当前的进程状态,可以点刷新按钮刷新列表。对于一些不能在运行中改变速度,或者在运行中改变速度会发生异常的游戏,请先设定好想要的速度,然后用除了第一种方法之外的方法启动游戏。 变速齿轮可以使用热键方便地改变速度。在不能切换到变速齿轮的使用界面,例如游戏正在运行时,热键甚至是唯一改变速度的方法。 点热键按钮可以弹出设置热键对话框。固定速度热键用于把变速齿轮设定到一个固定的速度,加快减慢热键用于加快或者减慢速度。如果核选“加快减慢热键使用精细调节”核选框,每次加快减慢2的0.1次方倍,否则每次加快减慢2的0.5次方倍。另外,使用Ctrl+加快减慢热键也可以在每次2的0.1次方倍和2的0.5次方倍之间切换。“启用热键”核选框用于设置所有热键是否有效。 注意如果用鼠标拖动滑杆将只停在整数倍位置,但是使用左右键可以进行更精细的调节。也可以使用Page Up、Page Down、Home、End键移动滑杆。 常见问题解答 *变速齿轮真的能让我的电脑运行加快256倍吗? 当然不能,否则Intel和AMD岂不是得改行卖软件。事实上他不会改变电脑的运行速度。 *使用变速齿轮会烧坏CPU、显卡和硬盘吗? 不会。如果在用变速齿轮时CPU、显卡或硬盘坏了,即使不用变速齿轮它们一样会坏。 *我在用Windows媒体播放器(Windows Media Player)看电影时想用变速齿轮快进和慢放,但我发现他只是使画面变得跳动,实际速度并没有变化。 在电脑中有声卡时媒体播放器会根据播放声音的速度播放视频。因此需要停用所有声卡。9x下是进入控制面板\系统\设备管理器,右键点击声卡设备,点属性,选在此硬件配置文件中禁用。NT下是进入控制面版\系统\硬件\设备管理器,右键点击声卡设备,点停用。 *加速器真的很好,特别是玩《石器时代》的时候,但是,突然有一天,我发现我的连接上的时间也跟着一起加速,连接时间过的飞快,我可是一个穷玩家啊,禁受不起打击的,希望给我答案!!!是不是加速的时候,电话费和网费也一起加速啊? 放心吧!使用变速齿轮是不会影响到电话费和网费的记费的,你看到的只是使用变速齿轮后的假象,电信局有自己的计费时钟。 *变速齿轮只能改变Windows95及以上版本游戏的速度吗? 是的,他不能改变DOS和Windows3.1游戏的速度。 *我怎么改变不了电脑移植版真侍魂的游戏速度? 由于计时方法的不同,一些游戏不能在运行中改变速度,或者在运行中改变速度会发生异常。只要先设定好速度再运行游戏就可以了。 *我在NeoRage模拟器中把速度降低8倍后为什么按键速度快了就做不出相应的动作,声音也完全变成了噪音? NeoRage并不是连续检测键盘,假设他每秒检测30次,降低8倍后每秒仅检测4次,在这4次检测之间的键盘状态是被忽略的。所以把动作放慢一点吧。变成噪音是由于模拟器的特殊性。据我的测试,在其他游戏中声音都是正常的。 *我把速度降低16倍后为什么看到很多游戏画面是一帧一帧变化的? 二维游戏画面每秒最多30帧,降低16倍后每秒仅有两帧,所以你能清楚地看到画面一帧一帧地变化。三维游戏的帧速率也经常会有上限。
语音识别的MATLAB实现 声控小车结题报告 小组成员:关世勇 吴庆林 一、 项目要求: 声控小车是科大华为科技制作竞赛命题组的项目,其要求是编写一个语言识别程序并适当改装一个小型机动车,使之在一个预先不知道具体形状的跑道上完全由声控来完成行驶比赛。跑道上可以有坡面,坑, 障碍等多种不利条件,小车既要具有较快的速度,也要同时具有较强的灵活性,能够克服上述条件。 二、 项目分析: 由于小车只要求完成跑道上的声控行驶,所以我们可以使用简单的单音命令来操作,如“前”、“后”、“左”、“右”等。 由于路面有各种不利条件,而且规则要求小车尽可能不越过边线,这就决定了我们的小车不能以较高的速度进行长时间的快速行驶。所以我们必须控制小车的速度和行进距离。 由于外界存在噪声干扰,所以我们必须对噪声进行处理以减小其影响。 鉴于上诉各种要求,我们决定对购买的遥控小车进行简单改造,使用PC机已有的硬件条件编写软件来完成语音的输入,采集,处理和识别,以实现对小车的控制。 三、 解决思路与模块: 整个程序大致可划分为三个模块,其结构框图如下图所示: 整个程序我们在Visual C++ 环境下编写。 四、 各模块的实现: 1 声音的采集: 将声音信号送入计算机,我们利用了声卡录音的低层操作技术,即对winmm.lib进行API调用。具体编程时这一部分被写在一个类中(Soundin类)。 在构造函数中设定包括最大采样率(11025),数据缓存(作为程序一次性读入的数据,2048),声卡本身所带的一些影响采样数据等的各种参数; 调用API函数waveInGetNumDevs(返回UNIT,参数为空)检察并打开声音输入设备,即声卡;并进而使用waveInGetDevCaps得到声卡的容量(在waveInCaps中存有该数据,对其进行地址引用,从DWORD dwFormats得到最大采样率、声道数和采样位); 创建一个叫WaveInThreadEvent的事件对象,并赋予一个Handle,叫m_WaveInEvent,开始利用线程指针m_WaveInThread调用自定义的线程WaveInThreadProc; 对结构WAVEFORMATEX中WaveInOpen开始提供录音设备。注意设备句柄的得到是通过对HWAVEIN 型数据m_WaveIn的引用。 由于通过这种方式进行录音的文件格式是.wav,所以要先设置录音长度,以及对头文件进行一些设置:包括buffer的地址为InputBuffer的初始地址,大小为录音长度的两倍,类型。使用waveInPrepareHeader为录音设备准备buffer。然后使用waveInAddBuffer函数为录音设备送出一个输入buffer。最后使用waveInStart(m_WaveIn)打开设备。 程序中WaveInThreadProc需要提出另外说明,因为通过这个线程我们可以实现采样和数据提取。该线程首先定义一个指向CsoundIn类的指针pParam,并将其宏定义为PT_S。而线程参数即为空指针pParam。使用WaitForSingleObject将录音过程设置为一旦开始就不中止(除非中止线程)。在此线程中做如下两个工作:将数据送入buffer,并将数据传入某个参数(其调用一个函数,将buffer中的数据送入该函数的参数*pt),而这些数据正是我们要利用和处理的数字化的语音信息。 2 声音的预处理: 声音信息的预处理主要包括音头和音尾的判断,声音的预加重,分帧处理和窗化处理。 A 音头音尾的判断与提取: 这是该项目的一个难点。由于我们的声音信号不是连续给出的,而且现场还有噪声的存在,所以我们必须通过适当的方法来判断采集的数据是不是我们所要的声音控制信号。这又是该项目的一个重点。若声音指令信号提取的不恰当,那么我们采样所得的数据就和我们实际的语音信号就会有很大的出入,这样不但会延迟语音识别的时效性,而且会降低对这些声音信号的识别率。对声音信号的提取,主就是确定音头、音尾的位置。常用的方法有过零率和短时距能量等几种。我们这里采用的就是过零率这个方法。首先对噪声取样,从这些噪声样本中得到噪声的上下限,将实时信号与这个门限进行比较,得到过零率。 定义过零率Zcr如下: 其中: 利用过零率的大小来判断是否有声音信号进入,若 ( 为预设的过零率值),则表示有声音信号进入,就找到了音头。在找到音头的情况下,若 ,则表示声音结束,也就找到了音尾。在环境噪声较大且比声音指令小的多的情况下可以对这个门限加一修正。音头和音尾之间的部分就是我们用以作为识别用的声音指令信号了。由于一般情况下人们所发出的单音都有一定的时间长度而大的噪声则大多是突发的,持续时间较短,所以我们可以再对所得到的声音指令信号做一次筛选,若得到的声音信号的长度小于预设值,就可认为是噪声干扰,舍弃;若得到的声音信号的常到大于预设值,则将其作为有用信号存储。实验表明,利用过零率和预设长度相结合起来提取声音指令信号的方法很有效的。 B 语音信号的预加重: 我们所采用的预加重的方法是较为常用的网络: 传递函数为: 得到的信号为: 预加重的目的在于滤除低频干扰,尤其是50Hz或60Hz的工频干扰,将对于语音识别更为有用的高频部分的频谱进一步提升。在计算短时能量之前应用该滤波器,还可以起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。 C 分帧处理 在计算各个系数之前要先将语音信号作分帧处理。语音信号是瞬时变化的,但在10~20ms内是相对稳定的,而我们设定的采样频率为11025所以我们对预处理后的语音信号S1(n)以300点为一帧进行处理,帧移为100个采样点。 (N=300) D 窗化处理: 为了避免矩形窗化时对LPC系数在端点的误差,我们采用了汉明窗函数来进行窗化。即: 其中: 3 语音数据的特征提取: 语音信号的特征有多种度量标准,我们采用的是比较常用的倒谱特征。 语音信号是一种典型的时变信号,然而如果把观察时间缩短到几十毫秒,则可以得到一系列近似稳定的信号。人的发音器官可以用若干段前后连接的声管进行模拟,这就是所谓的声管模型。全极点线性预测模型(LPC)可以对声管模型进行很好的描述,每段声管对应一个LPC模型的极点。一般情况下,极点的个数在12-16个之间就可以足够清晰地描述语音信号的特征了。 语音信号经过预处理,它的每个样值均可由过去若干个样值的线性组合来逼近,同时可以采用使实际语音抽样与线性预测抽样之间的均方差最小的方式,来解出一组预测的系数 。这就是LPC所提取出来的信号的初始特征。 预测值时域表达式为: 其中, 为加权系数,即LPC系数。预测的误差为: 使 在均方误差最小的条件下,可求得唯一的 ,此过程即为LPC分析过程。 这里采用的是Levinson-Durbin法。由上面的式子有: 其中, 为待分析与引信号的自相关序列: 因此:Levinson-Durbin算法为: 1. 初始化: 2. 迭代计算:对于 3. 最后就算: 以上式中的 为反射系数。 ; 为最小预测误差,随着阶数的增加而减少; 为模型增益常量。 在语音识别系统中,很少直接使用LPC系数,而是由LPC系数推导出另一种参数:线性预测倒谱系数(LPCC)。倒谱实际上是一种同态信号处理方法,标准的倒谱系数计算流程需要进行FFT变换、对数操作和相位校正等步骤,预算比较复杂。在实际计算中,他不是由原始信号x(n)得到,而是由LPC系数 得到的。 LPC系数算出后,就可以直接进行倒谱系数 的计算,其迭代算法如下: 1.初始化: 2.迭代计算: 这里C(0)实际上就是直流分量,在识别中通常是不用的,也不去计算。 综合考虑识别误差和识别速度的影响,我们在计算LPC 时,LPC系数的阶数Q值取为8,而LPCC系数的阶数P值取为12。 4 DTW 算法: 语音识别程序的核心部分即采用合适的算法来识别不同的语音信号,在特定人语音识别算法中,对于孤立词语语音识别而言,最为简单方法是采用DTW(Dynamic Time Warping,动态时间弯折)算法,该算法基于动态规划)(DP)的思想,解决了发音长短不一的模本匹配问题,是语音识别中出现较早、较为经典的一种算法。我们这里采用的就是DTW算法。 我们用R表示已存的参考模板,T表示待识别的测试模板,R(1),R(2) ,…,R(m),T(1),T(2),…,T(n)分别表示参考模板和测试模板中的各语音帧,d[T(n),R(m)]表示这两帧特征矢量之间的距离(DTW算法中通常采用欧氏距离)。为了比较R和T之间的相似度,可以计算他们之间的距离D[T,R],距离越小则相似度越高。D[T,R]的计算通常采用的是动态规划的方法。 将R和T的各个帧号分别在直角坐标系的横轴和纵轴上标出,则如下图可得到一个网格,网格中各点表示R和T中的一帧的交汇点。DP算法可以归结为寻找一条通过此网格中若干格点的路径,使得沿路径的累积距离达到最小值。 为了使路径不至于过分倾斜,可以约束斜率在0.5-2范围内,如果路径已经通过了格点( ),那么下一个通过的格点( )只能是下列三种情况之一: 搜索最佳路径的方法如下: 搜索从( )开始,网格中任意一点只可能有一条路径通过。对于( ),其可达到该格点的前一格点之可能是 ( ),( ),( ),那么( )一定选择这3个距离中的最小者所对应的格点作为其前续格点。若用( )代表此格点,并将通过该格点的路径延伸而通过( ),这时此路径的累积距离为: 其中的 由下式决定: 这样可以从初始点出发依次搜索直到搜索到终点 便可得到最佳路径。 五、整个系统的软件流程图: 见右图。 六、硬件 用四个c1108型三极管来控制小车遥控手柄的前、后、左、右触点的通断。从计算机的并口引出四根信号线,与三极管相连,与前、后、左、右一一对应。若判断出指令信号后,则相应的信号线上输出高电平,该电路导通,发送无线信号。若无指令,则信号线上输出低电平,电路断路,不发送无线信号。电路示意图如下:(由于四条线路基本是一致的,这里只画出了其中的一根信号线与外电路的连接示意图) 七、实现功能与技术指标: 1. 软件上可以识别前、后、左、右、停等语音指令,并发出相应的控制信号。 2. 硬件上可以实时的收发无限信号,并控制小 车作相应的动作。 3. 语音识别正确率大于95%,从发出语音指令 到执行该指令的延时小于100ms。 八、与原设计方案的比较: 我们的整个方案基本是按照原设计方案来进行的,各项指标也基本达到了预定目标。 九、经费使用情况: 主要分为两部分: 第一, 由于我们都没有学过语音识别方面的知识,所以一开始我们就买了一些参考书和资料。 第二, 在软件部分初步成型后,在对小车进行改装时购买了一些电子元器件以及其他一些工具。 十、致谢: 感谢华为研究所为我们提供这样好的锻炼机会,我们从中学到了很多书本上学不到的知识。 感谢铁伟涛同学为我们提供方案支持。 感谢我的导师魏衡华老师和314实验室的所有负责人为我们提供PC机和其它硬件条件以及方便的实验环境。 感谢所有的评委老师在开题和中期评审中给我们提供很多宝贵的意见。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧