C# 设置默认waveIn设备的记录级别

C# 设置默认waveIn设备的记录级别,c#,audio,C#,Audio,我正在尝试使用mixerGetLineInfo和mixerGetLineControls功能访问使用waveIn打开的默认录音设备的音量控制。我已经编写了C#interop代码,可以成功地枚举系统中的所有源、目标和控件,但到目前为止,我还无法确定哪个控件与默认waveIn设备关联。有人有这样做的示例代码吗?您可以使用: int mixerId = -1; int inputID = MmeMixerApi.WAVE_MAPPER; // = -1 int result = MmeMixerApi

我正在尝试使用
mixerGetLineInfo
mixerGetLineControls
功能访问使用waveIn打开的默认录音设备的音量控制。我已经编写了C#interop代码,可以成功地枚举系统中的所有源、目标和控件,但到目前为止,我还无法确定哪个控件与默认waveIn设备关联。有人有这样做的示例代码吗?

您可以使用:

int mixerId = -1;
int inputID = MmeMixerApi.WAVE_MAPPER; // = -1
int result = MmeMixerApi.mixerGetID(inputId, ref mixerId, MIXER_OBJECTFLAG.WAVEIN);

默认的输入和输出设备可以通过ID为-1的wave mapper访问。mixerGetID将返回与该输入关联的混合器ID。然后可以使用混合器ID在控件上迭代。您仍然需要找到正确的源线(例如麦克风、线路输入等)。为此,您可能需要查找具有特定dwComponentType的源行,如MIXERLINE_COMPONENTTYPE.SRC_麦克风或MIXERLINE_COMPONENTTYPE.SRC_线

MmeMixerApi是从哪里获得的?MmeMixerApi只是一个封装p/Invoke MME mixer调用的静态类。我使用了一个类似的类,名为MmeWaveApi。两者都是在网络上找到的混合代码,以及我自己的添加和删除。我在使用-1did的输入调用mixerGetID时出现了NoDriver错误。我不希望出现这种情况,但我必须承认我没有使用WAV_MAPPER尝试过这种方法。您可以使用waveInGetDevCaps迭代所有输入设备,并比较WAVEINCAPS.szPname字段。可以在调用mixerGetID时使用与ID=WAVE_MAPPER的设备名称匹配的设备ID。