3

我正在尝试在 C# 中使用 WASAPI,但我什至无法在 Visual Studio 中找到要引用的 dll。我应该在 COM 程序集中引用一个 dll 还是从 Microsoft 网站下载一个并引用它?是否有任何文档如何在 C# 中使用 WASAPI?

我想用它来设置麦克风提升级别。为此,我一直在使用 NAudio,但在 Windows 8.1 中它无法正常运行,请参阅this。它通过 winmm 调用设置提升级别。我以为我可以直接使用 WASAPI。

编辑

我试过 CSCore,它有一个用于设置麦克风增强的 WASAPI 调用的包装器。它成功设置了该值,但是在设置该值后,程序每次都因访问冲突异常而崩溃。这是 CSCore 的代码:

MMDeviceEnumerator deviceEnumerator = new MMDeviceEnumerator();
MMDeviceCollection deviceCollection = deviceEnumerator.EnumerateAudioEndPoints(EDataFlow.eCapture, DEVICE_STATE.DEVICE_STATE_ACTIVE);
MMDevice microphone = null;

for (int i = 0; i < deviceCollection.Count; i++)
{
    MMDevice device = deviceCollection[i];

    if (device.FriendlyName.Contains("Plantronics"))
    {
        microphone = device;
    }
}

if (microphone != null && microphone.AudioSessionManager2.Sessions.Count < 1)
{
    return;
}

AudioSessionControl2 activeSession = null;

for (int i = 0; i < microphone.AudioSessionManager2.Sessions.Count; i++)
{
    if (microphone.AudioSessionManager2.Sessions[i].State == AudioSessionState.AudioSessionStateActive)
    {
        activeSession = microphone.AudioSessionManager2.Sessions[i];
    }
}

if (activeSession == null)
{
    return;
}

activeSession.SimpleAudioVolume.MasterVolume += 0.1f;

我还发现了 AudioSwitcher 库,它似乎也有一个包装器,但是无法更改麦克风音量。它总是-1。这是 AudioSwitcher 的代码:

CoreAudioController audioController = new CoreAudioController();
var devices = audioController.GetCaptureDevices(DeviceState.Active);

foreach (CoreAudioDevice device in devices)
{
    if (device.FullName.Contains("Plantronics"))
    {
         device.Volume = 49;
    }
}
4

0 回答 0