void CCoreAudioHardware::GetOutputDeviceName(std::string& name) { AudioDeviceID deviceId = GetDefaultOutputDevice(); if(deviceId) { UInt32 size = 0; // TODO: Change to kAudioObjectPropertyObjectName AudioDeviceGetPropertyInfo(deviceId,0, false, kAudioDevicePropertyDeviceName, &size, NULL); char *m_buffer = (char*)malloc(size); OSStatus ret = AudioDeviceGetProperty(deviceId, 0, false, kAudioDevicePropertyDeviceName, &size, m_buffer); if (ret && !m_buffer) { name ="Default"; } else { name = m_buffer; free(m_buffer); } } else { name = "Default"; } }
AudioDeviceID CCoreAudioHardware::FindAudioDevice(const std::string &searchName) { AudioDeviceID deviceId = 0; if (!searchName.length()) return deviceId; std::string searchNameLowerCase = searchName; std::transform(searchNameLowerCase.begin(), searchNameLowerCase.end(), searchNameLowerCase.begin(), ::tolower ); if (searchNameLowerCase.compare("default") == 0) { AudioDeviceID defaultDevice = GetDefaultOutputDevice(); CLog::Log(LOGDEBUG, "CCoreAudioHardware::FindAudioDevice: " "Returning default device [0x%04x].", (uint)defaultDevice); return defaultDevice; } CLog::Log(LOGDEBUG, "CCoreAudioHardware::FindAudioDevice: " "Searching for device - %s.", searchName.c_str()); // Obtain a list of all available audio devices UInt32 size = 0; AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &size, NULL); size_t deviceCount = size / sizeof(AudioDeviceID); AudioDeviceID* pDevices = new AudioDeviceID[deviceCount]; OSStatus ret = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &size, pDevices); if (ret) { CLog::Log(LOGERROR, "CCoreAudioHardware::FindAudioDevice: " "Unable to retrieve the list of available devices. Error = %s", GetError(ret).c_str()); delete[] pDevices; return 0; } // Attempt to locate the requested device std::string deviceName; for (size_t dev = 0; dev < deviceCount; dev++) { CCoreAudioDevice device; device.Open((pDevices[dev])); deviceName = device.GetName(); UInt32 totalChannels = device.GetTotalOutputChannels(); CLog::Log(LOGDEBUG, "CCoreAudioHardware::FindAudioDevice: " #if __LP64__ "Device[0x%04x]" #else "Device[0x%04lx]" #endif " - Name: '%s', Total Ouput Channels: %u. ", pDevices[dev], deviceName.c_str(), (uint)totalChannels); std::transform( deviceName.begin(), deviceName.end(), deviceName.begin(), ::tolower ); if (searchNameLowerCase.compare(deviceName) == 0) deviceId = pDevices[dev]; if (deviceId) break; } delete[] pDevices; return deviceId; }
AudioComponentInstance CIOSCoreAudioHardware::FindAudioDevice(std::string searchName) { if (!searchName.length()) return 0; AudioComponentInstance defaultDevice = GetDefaultOutputDevice(); return defaultDevice; }
AudioComponentInstance CIOSCoreAudioHardware::FindAudioDevice(std::string searchName) { if (!searchName.length()) return 0; AudioComponentInstance defaultDevice = GetDefaultOutputDevice(); CLog::Log(LOGDEBUG, "CIOSCoreAudioHardware::FindAudioDevice: Returning default device [0x%04x].", (uint32_t)defaultDevice); return defaultDevice; }
AudioDeviceID CCoreAudioHardware::FindAudioDevice(CStdString searchName) { if (!searchName.length()) return 0; UInt32 size = 0; AudioDeviceID deviceId = 0; OSStatus ret; if (searchName.Equals("Default Output Device")) { AudioDeviceID defaultDevice = GetDefaultOutputDevice(); CLog::Log(LOGDEBUG, "CCoreAudioHardware::FindAudioDevice: Returning default device [0x%04x].", defaultDevice); return defaultDevice; } CLog::Log(LOGDEBUG, "CCoreAudioHardware::FindAudioDevice: Searching for device - %s.", searchName.c_str()); // Obtain a list of all available audio devices AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &size, NULL); UInt32 deviceCount = size / sizeof(AudioDeviceID); AudioDeviceID* pDevices = new AudioDeviceID[deviceCount]; ret = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &size, pDevices); if (ret) { CLog::Log(LOGERROR, "CCoreAudioHardware::FindAudioDevice: Unable to retrieve the list of available devices. Error = 0x%08x (%4.4s)", ret, CONVERT_OSSTATUS(ret)); delete[] pDevices; return 0; } // Attempt to locate the requested device CStdString deviceName; for (UInt32 dev = 0; dev < deviceCount; dev++) { CCoreAudioDevice device; device.Open((pDevices[dev])); device.GetName(deviceName); UInt32 totalChannels = device.GetTotalOutputChannels(); CLog::Log(LOGDEBUG, "CCoreAudioHardware::FindAudioDevice: Device[0x%04x] - Name: '%s', Total Ouput Channels: %u. ", pDevices[dev], deviceName.c_str(), totalChannels); if (searchName.Equals(deviceName)) deviceId = pDevices[dev]; if (deviceId) break; } delete[] pDevices; return deviceId; }
void CCoreAudioHardware::GetOutputDeviceName(std::string& name) { name = "Default"; AudioDeviceID deviceId = GetDefaultOutputDevice(); if (deviceId) { AudioObjectPropertyAddress propertyAddress; propertyAddress.mScope = kAudioObjectPropertyScopeGlobal; propertyAddress.mElement = kAudioObjectPropertyElementMaster; propertyAddress.mSelector = kAudioObjectPropertyName; CFStringRef theDeviceName = NULL; UInt32 propertySize = sizeof(CFStringRef); OSStatus ret = AudioObjectGetPropertyData(deviceId, &propertyAddress, 0, NULL, &propertySize, &theDeviceName); if (ret != noErr) return; DarwinCFStringRefToString(theDeviceName, name); CFRelease(theDeviceName); } }
AudioDeviceID CCoreAudioHardware::FindAudioDevice(const std::string &searchName) { AudioDeviceID deviceId = 0; if (!searchName.length()) return deviceId; std::string searchNameLowerCase = searchName; std::transform(searchNameLowerCase.begin(), searchNameLowerCase.end(), searchNameLowerCase.begin(), ::tolower ); if (searchNameLowerCase.compare("default") == 0) { AudioDeviceID defaultDevice = GetDefaultOutputDevice(); CLog::Log(LOGDEBUG, "CCoreAudioHardware::FindAudioDevice: " "Returning default device [0x%04x].", (uint)defaultDevice); return defaultDevice; } CLog::Log(LOGDEBUG, "CCoreAudioHardware::FindAudioDevice: " "Searching for device - %s.", searchName.c_str()); // Obtain a list of all available audio devices AudioObjectPropertyAddress propertyAddress; propertyAddress.mScope = kAudioObjectPropertyScopeGlobal; propertyAddress.mElement = kAudioObjectPropertyElementMaster; propertyAddress.mSelector = kAudioHardwarePropertyDevices; UInt32 size = 0; OSStatus ret = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &size); if (ret != noErr) { CLog::Log(LOGERROR, "CCoreAudioHardware::FindAudioDevice: " "Unable to retrieve the size of the list of available devices. Error = %s", GetError(ret).c_str()); return 0; } size_t deviceCount = size / sizeof(AudioDeviceID); AudioDeviceID* pDevices = new AudioDeviceID[deviceCount]; ret = AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &size, pDevices); if (ret != noErr) { CLog::Log(LOGERROR, "CCoreAudioHardware::FindAudioDevice: " "Unable to retrieve the list of available devices. Error = %s", GetError(ret).c_str()); delete[] pDevices; return 0; } // Attempt to locate the requested device std::string deviceName; for (size_t dev = 0; dev < deviceCount; dev++) { CCoreAudioDevice device; device.Open((pDevices[dev])); deviceName = device.GetName(); std::transform( deviceName.begin(), deviceName.end(), deviceName.begin(), ::tolower ); if (searchNameLowerCase.compare(deviceName) == 0) deviceId = pDevices[dev]; if (deviceId) break; } delete[] pDevices; return deviceId; }