我的实验里有一小部分,要控制3个音箱的其中一个随机发出一个声音,让实验参加者判断声音是从哪个音箱里发出来的,用按键回答。需要记录参加者回答的速度和正误。
用一台电脑控制3个音源,一开始考虑用多声道的外置声卡。但是有多个输出口的外置声卡好贵,研究费的年度预算3月初结束了,4月份新的预算还没开始,现在没法用老板的研究费买器材……咨询了一下打工的leader,他说你可以再弄一块普通声卡,和电脑里原来有的双声道加起来,不就是4声道了么。这个方法经济简单!于是我自掏腰包去秋叶原买了块最便宜的有牌子的USB声卡。
需要解决的问题有:
1,切换左右声道。
2,切换两块声卡。
第一个问题很简单,用mmSystem的API函数WaveOutSetVolume设定左右声道音量就行。但是用耳机听的时候,静音的声道还是隐约有声音,也不知道是耳机问题还是设音量只能做到这样。没找到别的方法,粗糙就粗糙点吧。
第二个问题就麻烦了,mmSystem的函数翻遍了,也没成功切换得了默认声卡。据说DirectX可以,遍寻不见,还被第三方控件(directX没有delphi版)的安装或编译错误搞得头大如斗。系统里是可以更改默认输出声卡的,就是说可以用delphi改注册表。但是改了以后播放声音的软件不重启也没用。
烦了,最后我用了一个巨傻B的方法。
1) 用cooledit做了两个单声道的wav文件。
2) 写了两个只有一行代码的程序,一个启动了就播放左声道的wav文件,另一个播放右声道。
3) 主程序里每次切换声卡就是更改一下注册表的playback的键值,然后调用那两个播放程序的某一个,然后接着关掉……-_-b
每次调用别的程序,延时明显,延就延吧……如果有人知道简单的切换声卡的方法,请告诉我……