标签归档:IT

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

我的实验里有一小部分,要控制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

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

切换声道 @ delphi

原来在delphi里切换左右声道这么简单,中文google搜来搜去都是同一篇不中用的帖子,国内的网站就是爱抄袭和转载,很难找到有用的信息。
 
uses MMSystem;
 
var
  Wave : String;
begin
  try
    Wave := ‘$’ + IntToHex(0, 4) + IntTOHex(5 * 5000, 4);          //左声道
    MMSystem.waveOutSetVolume(0, StrTOInt(Wave));           
    MediaPlayer1.Play;
  except
  end;
end;
 
右声道的话,
Wave := ‘$’ + IntToHex(5 * 5000, 4) + IntToHex(0, 4);
 
下面要去秋叶原淘个便宜的USB声卡,然后看看怎么切换声卡。

SCJP相关

http://www.jchq.net/certkey/0102certkey.htm

Tutorial of SCJP

http://www.chinajavaworld.net/forum/forums.cgi?forum=4

SCJP认证的一个论坛,上面有无数好东西

Becoming Java Compiler!

Get it within 1 month!