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

我正在尝试从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(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éHoffmann
8
这是
MMSYSERR\u NOTSUPPORTED
常量的值,对吗?看起来驱动程序不支持此功能。可能驱动程序列表写得不正确?因为我看不到驱动程序的全名,所以在
组合框1