2014-09-27 63 views
2

我想使用NAudio獲取默認輸出音頻設備(即我的揚聲器),以獲取主音量,如this question中所示。使用NAudio獲取默認輸出音頻設備

我試圖使用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()但他們沒有工作。

如何獲取默認設備?

回答

5

您在這裏混合了兩個完全不同的音頻API。 MMDeviceEnumerator是WASAPI的一部分,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, 
+0

正是我在找的東西。您也可以使用NAudio的CoreAudioAPI來加載較少的代碼。 – 2015-05-28 01:13:13

相關問題