【问题标题】:Get default output audio device with NAudio使用 NAudio 获取默认输出音频设备
【发布时间】:2014-11-22 13:08:54
【问题描述】:

我想使用 NAudio 获取默认输出音频设备(即我的扬声器),以获取 this question 中的主音量。

我正在尝试使用MMDeviceEnumerator.GetDevice(),但它需要的 id 是一个字符串,而不是设备号。这是我目前写的代码:

        var enumerator = new MMDeviceEnumerator();

        for (int i = 0; i < WaveOut.DeviceCount; i++)
        {
            var cap = WaveOut.GetCapabilities(i);
            Console.WriteLine("{0}: {1}", i, cap.ProductName);

            var device = enumerator.GetDevice(???);
        }

        Console.WriteLine();

        Console.ReadLine();

我尝试将功能中的各种 Guid 以及字符串格式的设备 ID 传递给 GetDevice(),但它们都不起作用。

如何获取默认设备?

【问题讨论】:

    标签: c# audio naudio


    【解决方案1】:

    您在这里混合了两个完全不同的音频 API。 MMDeviceEnumerator 是 WASAPI(WindowsVista 中引入的新音频 API)的一部分,WaveOut.DeviceCount 使用旧的 Windows 音频 API。

    要使用 WASAPI 获取默认音频设备,您可以使用如下代码:

    var enumerator = new MMDeviceEnumerator();
    enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
    

    根据用途(角色)的不同,默认音频输出设备实际上有三种不同类型:

        /// <summary>
        /// Games, system notification sounds, and voice commands.
        /// </summary>
        Console,
    
        /// <summary>
        /// Music, movies, narration, and live music recording
        /// </summary>
        Multimedia,
    
        /// <summary>
        /// Voice communications (talking to another person).
        /// </summary>
        Communications,
    

    【讨论】:

    • 正是我想要的。你也可以只使用 NAudio 的 CoreAudioAPI 来加载更少的代码。
    • @Dominique Alexandre 我该怎么做?在 2018 年这个 MMDeviceEnumerator();我认为不能使用。 VS 不允许。
    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2012-03-29
    • 2019-09-26
    • 2011-10-18
    相关资源
    最近更新 更多