2009-01-01 14 views
6

Yeni yılınız kutlu olsun! Sorum, bir mikrofon ve bir hoparlörün Windows platformunda aynı ses kartından olup olmadığını kontrol etmektir. Farklı kartlardan geliyorlarsa, zamanlamayı ele alma mantığı farklı olacaktır. Hem DSound hem de WMME API'sini kullanıyorum. Şimdiden teşekkürler.Mikrofon ve hoparlörün aynı ses kartından olup olmadığını nasıl kontrol edebilirim?

Saygılarımızla, Yun

+0

Sorunuzun biraz daha açar mısınız? Bu aygıtların tutamaçlarının sahibi misiniz yoksa bunlar, kaynaklara sahip olmadığınız başka bir bileşenle mi aktarılıyor? Hoparlör ve mikrofon ile ne düşünüyorsunuz? Sadece ses kartı analog çıkışı ve girişi veya analog/dijital önemi var mı? – Manuel

cevap

1

WMI ses kartları hakkında bazı bilgiler vermek yok. Henüz öğrenemediğim şey, onun yeterince verilip verilmediğidir. Benim laptop o Running

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery(_ 
    "SELECT * FROM Win32_SoundDevice",,48) 
For Each objItem in colItems 
    Wscript.Echo "-----------------------------------" 
    Wscript.Echo "Win32_SoundDevice instance" 
    Wscript.Echo "-----------------------------------" 
    Wscript.Echo "Availability: " & objItem.Availability 
    Wscript.Echo "Caption: " & objItem.Caption 
    Wscript.Echo "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode 
    Wscript.Echo "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig 
    Wscript.Echo "CreationClassName: " & objItem.CreationClassName 
    Wscript.Echo "Description: " & objItem.Description 
    Wscript.Echo "DeviceID: " & objItem.DeviceID 
    Wscript.Echo "DMABufferSize: " & objItem.DMABufferSize 
    Wscript.Echo "ErrorCleared: " & objItem.ErrorCleared 
    Wscript.Echo "ErrorDescription: " & objItem.ErrorDescription 
    Wscript.Echo "InstallDate: " & objItem.InstallDate 
    Wscript.Echo "LastErrorCode: " & objItem.LastErrorCode 
    Wscript.Echo "Manufacturer: " & objItem.Manufacturer 
    Wscript.Echo "MPU401Address: " & objItem.MPU401Address 
    Wscript.Echo "Name: " & objItem.Name 
    Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID 
    If isNull(objItem.PowerManagementCapabilities) Then 
    Wscript.Echo "PowerManagementCapabilities: " 
    Else 
    Wscript.Echo "PowerManagementCapabilities: " & Join(objItem.PowerManagementCapabilities, ",") 
    End If 
    Wscript.Echo "PowerManagementSupported: " & objItem.PowerManagementSupported 
    Wscript.Echo "ProductName: " & objItem.ProductName 
    Wscript.Echo "Status: " & objItem.Status 
    Wscript.Echo "StatusInfo: " & objItem.StatusInfo 
    Wscript.Echo "SystemCreationClassName: " & objItem.SystemCreationClassName 
    Wscript.Echo "SystemName: " & objItem.SystemName 
Next 

----------------------------------- 
Win32_SoundDevice instance 
----------------------------------- 
Availability: 
Caption: ATI Function Driver for High Definition Audio - ATI AA01 
ConfigManagerErrorCode: 0 
ConfigManagerUserConfig: False 
CreationClassName: Win32_SoundDevice 
Description: ATI Function Driver for High Definition Audio - ATI AA01 
DeviceID: HDAUDIO\FUNC_01&VEN_1002&DEV_AA01&SUBSYS_00AA0100&REV_1000\5&BB7E0F3&0&0001 
DMABufferSize: 
ErrorCleared: 
ErrorDescription: 
InstallDate: 
LastErrorCode: 
Manufacturer: ATI 
MPU401Address: 
Name: ATI Function Driver for High Definition Audio - ATI AA01 
PNPDeviceID: HDAUDIO\FUNC_01&VEN_1002&DEV_AA01&SUBSYS_00AA0100&REV_1000\5&BB7E0F3&0&0001 
PowerManagementCapabilities: 
PowerManagementSupported: False 
ProductName: ATI Function Driver for High Definition Audio - ATI AA01 
Status: OK 
StatusInfo: 3 
SystemCreationClassName: Win32_ComputerSystem 
SystemName: BABEL 
----------------------------------- 
Win32_SoundDevice instance 
----------------------------------- 
Availability: 
Caption: Conexant High Definition SmartAudio 221 
ConfigManagerErrorCode: 0 
ConfigManagerUserConfig: False 
CreationClassName: Win32_SoundDevice 
Description: Conexant High Definition SmartAudio 221 
DeviceID: HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF5B&REV_1000\4&2DBDAC14&0&0001 
DMABufferSize: 
ErrorCleared: 
ErrorDescription: 
InstallDate: 
LastErrorCode: 
Manufacturer: Conexant 
MPU401Address: 
Name: Conexant High Definition SmartAudio 221 
PNPDeviceID: HDAUDIO\FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1179FF5B&REV_1000\4&2DBDAC14&0&0001 
PowerManagementCapabilities: 
PowerManagementSupported: False 
ProductName: Conexant High Definition SmartAudio 221 
Status: OK 
StatusInfo: 3 
SystemCreationClassName: Win32_ComputerSystem 
SystemName: BABEL 

şey olur ki varsa bilmiyorum veriyor: "WMI Code Creator" Aşağıdaki komut dosyası kullanma herşey o Win32_SoundDevice nesne mağazaları listeler. Bu zor bir soru.

0

WMI'yi asla kullanmayın (burada yapacak bir şey yok) MM apis'i kullanın.

1

Girdi ve çıktı aygıtlarının kimliğine sahip olduğunuzu varsayarak, ilgili mikser kimliklerini almak için aşağıdaki gibi bir şey kullanabilirsiniz. Her ikisi de aynı ise, ikisi de aynı miksere ve muhtemelen aynı fiziksel donanımın bir parçasına eklenir. Yalnızca giriş cihazının adını varsa

/// <summary> 
    /// Get the ID of the mixer associated with the given input device ID 
    /// Returns -1 if no such mixer can be found 
    /// </summary> 
    static public int GetMixerIdInput(int inputId) 
    { 
     int mixerId = -1; 
     int result = MmeMixerApi.mixerGetID(inputId, ref mixerId, MIXER_OBJECTFLAG.WAVEIN); 
     if (((MMError)result != MMError.MMSYSERR_NOERROR) && 
      ((MMError)result != MMError.MMSYSERR_NODRIVER)) 
     { 
      throw new MmeException((MMError)result); 
     } 
     return mixerId; 
    } 

    /// <summary> 
    /// Get the ID of the mixer associated with the given output device ID 
    /// Returns -1 if no such mixer can be found 
    /// </summary> 
    static public int GetMixerIdOutput(int outputId) 
    { 
     int mixerId = -1; 
     int result = MmeMixerApi.mixerGetID(outputId, ref mixerId, MIXER_OBJECTFLAG.WAVEOUT); 
     if (((MMError)result != MMError.MMSYSERR_NOERROR) && 
      ((MMError)result != MMError.MMSYSERR_NODRIVER)) 
     { 
      throw new MmeException((MMError)result); 
     } 
     return mixerId; 
    } 

, gibi bir şey kullanabilirsiniz cihaz kimliğini bulmak için aşağıdaki:

/// <summary> 
    /// Find the ID of the input device given a name 
    /// </summary> 
    static public int GetWaveInputId(string name) 
    { 
     int id = MmeWaveApi.WAVE_MAPPER; 
     int devCount = MmeWaveApi.waveInGetNumDevs(); 
     WAVEINCAPS caps = new WAVEINCAPS(); 
     for (int dev = 0; (dev < devCount) && (id == MmeWaveApi.WAVE_MAPPER); dev++) 
     { 
      int result = MmeWaveApi.waveInGetDevCaps(dev, ref caps, Marshal.SizeOf(caps)); 
      if ((MMError)result == MMError.MMSYSERR_NOERROR) 
      { 
       if (string.Compare(name, 0, caps.szPname, 0, Math.Min(name.Length, caps.szPname.Length)) == 0) 
       { 
        id = dev; 
       } 
      } 
     } 
     return id; 
    } 
İlgili konular