Delphi 如何正确更改音频输入?
我正在尝试从delphi应用程序更改音频输入 我正在做这样的事情Delphi 如何正确更改音频输入?,delphi,Delphi,我正在尝试从delphi应用程序更改音频输入 我正在做这样的事情 const DRVM_MAPPER = $2000; DRVM_MAPPER_PREFERRED_GET = DRVM_MAPPER+21; DRVM_MAPPER_PREFERRED_SET = DRVM_MAPPER+22; function ChangePrimarySndInDevice(dev: cardinal): integer; begin result := waveInMessage(HWA
const
DRVM_MAPPER = $2000;
DRVM_MAPPER_PREFERRED_GET = DRVM_MAPPER+21;
DRVM_MAPPER_PREFERRED_SET = DRVM_MAPPER+22;
function ChangePrimarySndInDevice(dev: cardinal): integer;
begin
result := waveInMessage(HWAVEIN(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0);
end;
var
Adev : Integer;
begin
//
Adev := combobox1.ItemIndex;
if ChangePrimarySndInDevice(Adev) = MMSYSERR_NOERROR then
begin
showmessage('ok');
end;
但是设备没有设置我正在使用windows 8
这就是我获取设备名称的方式
procedure TMainForm.GetInDevices;
var
dev: Integer;
caps: TWaveInCaps;
begin
ComboBox1.Clear;
for dev := 0 to waveInGetNumDevs - 1 do
begin
waveInGetDevCaps(dev, @caps, sizeof(TWaveInCaps));
ComboBox1.Items.Add(caps.szPname);
end;
ComboBox1.ItemIndex := 0;
end;
在过去,我也需要这样做,但我没有从Delphi内部直接做到这一点。我使用nircmd设置默认的输入/输出 我使用了相同的方法来获取名称,但是如果名称中有括号,则去掉开头
function TrimParenthesis(devname:string):string;
var
parpos:integer;
begin
parpos:=pos('(',devname);
if parpos>0 then
result:=Trim(LeftStr(devname,parpos-1))
else
result:=devname;
end;
然后通过windows.createprocess()执行nircmd。nircmdc.exe应位于应用程序目录中。它被调用3次,以说明所有可能的角色
procedure SetSoundDevice(devname:string);
var
proc_id:DWORD;
begin
execute_program(ExtractFilePath(Application.ExeName)+'nircmdc.exe','setdefaultsounddevice "'+devname+'" 0',proc_id,true);
execute_program(ExtractFilePath(Application.ExeName)+'nircmdc.exe','setdefaultsounddevice "'+devname+'" 1',proc_id,true);
execute_program(ExtractFilePath(Application.ExeName)+'nircmdc.exe','setdefaultsounddevice "'+devname+'" 2',proc_id,true);
end;
ChangePrimarySndInDevice(Adev)
call的实际返回值是多少?@RenéHoffmann8
这是MMSYSERR\u NOTSUPPORTED
常量的值,对吗?看起来驱动程序不支持此功能。可能驱动程序列表写得不正确?因为我看不到驱动程序的全名,所以在组合框1