折腾了声道声卡两天,最后用了一个傻方法

我的实验里有一小部分,要控制3个音箱的其中一个随机出一个声音,让实验参加者判断声音是从哪个音箱里发出来的,用按键回答。需要记录参加者回答的速度和正误。

用一台电脑控制3个音源,一开始考虑用多声道的外置声卡。但是有多个输出口的外置声卡好贵,研究费的年度预算3月初结束了,4月份新的预算还没开始,现在没法用老板的研究费买器材……咨询了一下打工的leader,他说你可以再弄一块普通声卡,和电脑里原来有的双声道加起来,不就是4声道了么。这个方法经济简单!于是我自掏腰包去秋叶原买了块最便宜的有牌子的USB声卡。

 

需要解决的问题有:

1,切换左右声道。

2,切换两块声卡。

 

第一个问题很简单,用mmSystemAPI函数WaveOutSetVolume设定左右声道音量就行。但是用耳机听的时候,静音的声道还是隐约有声音,也不知道是耳机问题还是设音量只能做到这样。没找到别的方法,粗糙就粗糙点吧。

第二个问题就麻烦了,mmSystem的函数翻遍了,也没成功切换得了默认声卡。据说DirectX可以,遍寻不见,还被第三方控件(directX没有delphi版)的安装或编译错误搞得头大如斗。系统里是可以更改默认输出声卡的,就是说可以用delphi改注册表。但是改了以后播放声音的软件不重启也没用。

 

烦了,最后我用了一个巨傻B的方法。

1)  cooledit做了两个单声道的wav文件。

2)  写了两个只有一行代码的程序,一个启动了就播放左声道的wav文件,另一个播放右声道。

3)  主程序里每次切换声卡就是更改一下注册表的playback的键值,然后调用那两个播放程序的某一个,然后接着关掉……-_-b

 每次调用别的程序,延时明显,延就延吧……如果有人知道简单的切换声卡的方法,请告诉我……

折腾了声道声卡两天,最后用了一个傻方法》上有2条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注