Как проверить, ли микрофон и динамик с той же звуковой карты?

То же самое может быть достигнуто с помощью - unselectedLabelColor: & amp; indicatorColor: из TabBar виджет.

Пример кода:

@override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 6,
      child: Scaffold(
          appBar: AppBar(
            centerTitle: true,
            leading: Icon(Icons.person_outline),
            title: Text('DASHBOARD',style: TextStyle(fontSize: 16.0),),
            bottom: PreferredSize(
                child: TabBar(
                    isScrollable: true,
                    unselectedLabelColor: Colors.white.withOpacity(0.3),
                    indicatorColor: Colors.white,
                    tabs: [
                      Tab(
                        child: Text('Tab 1'),
                      ),
                      Tab(
                        child: Text('Investment'),
                      ),
                      Tab(
                        child: Text('Your Earning'),
                      ),
                      Tab(
                        child: Text('Current Balance'),
                      ),
                      Tab(
                        child: Text('Tab 5'),
                      ),
                      Tab(
                        child: Text('Tab 6'),
                      )
                    ]),
                preferredSize: Size.fromHeight(30.0)),
            actions: [
              Padding(
                padding: const EdgeInsets.only(right: 16.0),
                child: Icon(Icons.add_alert),
              ),
            ],
          ),
          body: TabBarView(
            children: [
              Container(
                child: Center(
                  child: Text('Tab 1'),
                ),
              ),
              Container(
                child: Center(
                  child: Text('Tab 2'),
                ),
              ),
              Container(
                child: Center(
                  child: Text('Tab 3'),
                ),
              ),
              Container(
                child: Center(
                  child: Text('Tab 4'),
                ),
              ),
              Container(
                child: Center(
                  child: Text('Tab 5'),
                ),
              ),
              Container(
                child: Center(
                  child: Text('Tab 6'),
                ),
              ),
            ],
          )),
    );
  }

Выход:

enter image description here

6
задан Cœur 1 December 2018 в 14:31
поделиться

3 ответа

WMI действительно дает некоторую информацию о звуковых картах. Что я не смог узнать, все же то, ли его предоставление достаточно. Используя "Создателя Кода WMI" следующий сценарий перечисляет все что объектно-ориентированные памяти Win32_SoundDevice:

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

Я не знаю, существует ли что-нибудь там, которое помогает. Это - сложный вопрос.

1
ответ дан 17 December 2019 в 20:36
поделиться

Принятие Вас имеет идентификатор входных и выходных устройств, Вы могли использовать что-то как следующее для получения соответствующих идентификаторов микшера. Если оба - то же, оба привязаны к тому же микшеру и наиболее вероятной части того же физического оборудования.

    /// <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;
    }

Если у Вас только есть название устройства ввода данных, можно использовать что-то как следующее для нахождения идентификатора устройства:

    /// <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;
    }
1
ответ дан 17 December 2019 в 20:36
поделиться

Никогда не используйте WMI (ничто, чтобы сделать здесь) Использование пчела MM.

0
ответ дан 17 December 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: