123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #include "SoundCards.h"
- /* 初始化数据,获取声卡信息 */
- bool SoundCardManager::InitData()
- {
- /* 获取可用的声卡列表 */
- // if(AudioDevice::getAudioDevices(m_listAudioDevice))
- if(AudioDevice::getPCMAudioDevice(m_listAudioDeviceDesc))
- {
- SPDLOG_INFO("成功获取到声卡设备信息");
- } else
- {
- SPDLOG_ERROR("获取声卡设备信息失败");
- }
- /* 将PCM通道根据已知的规则分类 */
- classifyPCMChannels();
- /* 打印声卡列表 */
- // printAudioDevices();
- printAudioDeviceDesc(m_mapSoundCardInfo);
- // /* 获取并打印另一种声卡信息 */
- // std::list<AudioDeviceDesc_t> pcmDevices;
- // if(getPCMAudioDevice(pcmDevices))
- // {
- // SPDLOG_INFO("成功获取到PCM设备信息");
- // printAudioDeviceDesc(pcmDevices);
- // } else
- // {
- // SPDLOG_ERROR("获取PCM设备信息失败");
- // }
- return true;
- }
- /* 打印声卡列表 */
- // void SoundCardManager::printAudioDevices()
- // {
- // SPDLOG_INFO("声卡列表: ");
- // for(const auto& device : m_listAudioDevice)
- // {
- // SPDLOG_INFO(" 声卡编号: {}, ID: {}, 名称: {}, 驱动: {}",
- // device.CardNumber, device.CardID, device.CardName, device.CardDriver);
- // SPDLOG_INFO(" 长名称: {}, 混音器名称: {}, 组件信息: {}",
- // device.CardLongName, device.CardMixername, device.CardComponents);
- // for(const auto& pcmDevice : device.PCMDevices)
- // {
- // SPDLOG_INFO(" PCM设备编号: {}, 子设备编号: {}, PCM ID: {}, 名称: {}, 子设备名称: {}",
- // pcmDevice.PCMDevice, pcmDevice.SubDevice, pcmDevice.CardNumber,
- // pcmDevice.PCMID, pcmDevice.PCMName, pcmDevice.PCMSubName);
- // }
- // }
- // }
- /* 打印声卡描述列表 */
- void SoundCardManager::printAudioDeviceDesc(const std::map<std::string, SoundCardPCMInfo_t>& mapSoundCard)
- {
- SPDLOG_INFO("----------------------------------------------------------------------------");
- for(const auto& device : mapSoundCard)
- {
- SPDLOG_INFO("声卡名称: {}", device.first);
- for(const auto& pcm : device.second.listPCM)
- {
- SPDLOG_INFO(" PCM设备名称: {}, 设备描述: {}", pcm.strPCMName, pcm.strPCMDesc);
- }
- SPDLOG_INFO("----------------------------------------------------------------------------");
- }
- }
- /* 将PCM通道分类 */
- void SoundCardManager::classifyPCMChannels()
- {
- std::list<AudioDeviceDesc_t> listPCM = m_listAudioDeviceDesc;
- /* 获取Dante声卡的PCM通道信息 */
- getDanteSoundCardInfo(listPCM);
- /* 分类其他pcm通道 */
- classifyRemainingPCMChannels(listPCM);
- }
- /* 取出dante声卡的PCM通道信息
- dante声卡通过设备描述信息识别区分录音通道 */
- void SoundCardManager::getDanteSoundCardInfo(std::list<AudioDeviceDesc_t>& listPCM)
- {
- SoundCardPCMInfo_t scPCMInfo;
- scPCMInfo.strSoundCardName = SC_AlpDANTE;
- for(auto it = listPCM.begin(); it != listPCM.end(); )
- {
- const auto& device = *it;
- if(device.DeviceDesc.find(SC_AlpDANTE) != std::string::npos)
- {
- /* 通过描述信息中的“ in” 区分是输入还是输出通道 */
- if(device.DeviceDesc.find(" in") != std::string::npos)
- {
- SPDLOG_DEBUG("Dante声卡输入通道: {}, IOID: {}, 描述: {}",
- device.DeviceName, device.IOID, device.DeviceDesc);
- OnePCMChannelInfo_t pcm;
- pcm.strPCMName = device.DeviceName;
- pcm.strPCMDesc = device.DeviceDesc;
- pcm.strIO = device.IOID;
- scPCMInfo.listPCM.push_back(pcm);
- }
- else if(device.DeviceDesc.find(" out") != std::string::npos)
- {
- SPDLOG_DEBUG("Dante声卡输出通道: {}, IOID: {}, 描述: {}",
- device.DeviceName, device.IOID, device.DeviceDesc);
- } else
- {
- SPDLOG_DEBUG("Dante声卡未知通道类型: {}, IOID: {}, 描述: {}",
- device.DeviceName, device.IOID, device.DeviceDesc);
- }
- /* 去掉这个pcm信息 */
- it = listPCM.erase(it);
- } else
- {
- ++it;
- }
- }
- m_mapSoundCardInfo[scPCMInfo.strSoundCardName] = scPCMInfo;
- }
- /* 将剩余的PCM通道信息分类
- 剩余的通道都放入到systemOther中 */
- void SoundCardManager::classifyRemainingPCMChannels(std::list<AudioDeviceDesc_t>& listPCM)
- {
- SoundCardPCMInfo_t scPCMInfo;
- scPCMInfo.strSoundCardName = SC_System;
- for(const auto& device : listPCM)
- {
- OnePCMChannelInfo_t pcm;
- pcm.strPCMName = device.DeviceName;
- pcm.strPCMDesc = device.DeviceDesc;
- pcm.strIO = device.IOID;
- scPCMInfo.listPCM.push_back(pcm);
- }
- m_mapSoundCardInfo[scPCMInfo.strSoundCardName] = scPCMInfo;
- }
|