【问题标题】:How to set the default audio input for Delphi?如何为 Delphi 设置默认音频输入?
【发布时间】:2014-02-21 13:16:58
【问题描述】:

我想知道如何通过 Delphi 设置我的默认音频捕获设备(麦克风)。

我正在尝试使用 mmsystem api 的功能,遵循我的代码

procedure TForm1.Button1Click(Sender: TObject);
var
 DevOutCaps: TWaveOutCaps;
 DevInCaps: TWaveInCaps;
 n, i: Integer;
 s: String;
begin
n := waveInGetNumDevs;
for i := 0 to n-1 do
  begin
    waveInGetDevCaps(i, @DevInCaps, SizeOf(DevInCaps));
    s := PChar(@DevInCaps.szPname);
    ListBox1.Items.Add(s);
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
 Ndev : Integer;
 Adev : Integer;
begin
Ndev := AudioInDeviceNameToDeviceID(ListBox1.Items.Strings[ListBox1.ItemIndex]);
Adev := GetWaveInDevice;
ShowMessage( IntToStr(Adev) );
ShowMessage(ListBox1.Items.Strings[ListBox1.ItemIndex]);
ShowMessage( IntToStr(Ndev) );
if waveInMessage(HWAVEIN(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, Adev, Ndev) = MMSYSERR_NOTSUPPORTED then
   begin
   MessageDlg('NOT SUPPORTED', mtInformation, [mbOK], 0);
   end;

最好没有第三方组件。 谢谢

【问题讨论】:

    标签: delphi default microphone


    【解决方案1】:

    WinMM API 似乎是要走的路,使用 DRVM_MAPPER_PREFERRED_SET 消息显然,虽然在 Win32 下没有记录,但它是受支持的:-

    WinMM API

    【讨论】:

    • 我以为互联网是这样的:dev: = 1; waveInMessage (HWAVEIN (WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0);,但是不起作用,什么意思?
    • 您没有正确阅读文档。第一个参数是原设备,第二个是新设备。此外,将任意值应用于参数(如 1)并不是成功的秘诀。您需要枚举系统中的设备数量并确保您传递的值实际上是有效的。最后,始终检查任何 API 调用的结果并进行相应处理。在发布问题时始终提供结果。 “不起作用”对任何人都没有用。
    • 我很抱歉“不工作”只是一个误解,正在返回以下函数“MMSYSERR_NOTSUPPORTED”。我正在使用 Windows 7
    • 我这里没有 Windows 7 机器可以试一试,你有没有成功让 WinMM 功能正常工作?首先尝试一些非常简单的事情。正如我在原始答案中提到的那样,它们应该得到支持但没有记录。另外,您是否更正了我之前指出的参数顺序?当您不发布任何代码示例时,很难知道出了什么问题。
    • 是的,我做了很多事情来启动这个 API,我用我正在尝试做的代码编辑了帖子
    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    相关资源
    最近更新 更多