AudioDeviceID getNextDeviceID(AudioDeviceID currentDeviceID, ASDeviceType typeRequested) { UInt32 propertySize; AudioDeviceID dev_array[64]; int numberOfDevices = 0; AudioDeviceID first_dev = kAudioDeviceUnknown; int found = -1; AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propertySize, NULL); // printf("propertySize=%d\n",propertySize); AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propertySize, dev_array); numberOfDevices = (propertySize / sizeof(AudioDeviceID)); // printf("numberOfDevices=%d\n",numberOfDevices); for(int i = 0; i < numberOfDevices; ++i) { switch(typeRequested) { case kAudioTypeInput: if (!isAnInputDevice(dev_array[i])) continue; break; case kAudioTypeOutput: if (!isAnOutputDevice(dev_array[i])) continue; break; case kAudioTypeSystemOutput: if (getDeviceType(dev_array[i]) != kAudioTypeOutput) continue; break; default: break; } if (first_dev == kAudioDeviceUnknown) { first_dev = dev_array[i]; } if (found >= 0) { return dev_array[i]; } if (dev_array[i] == currentDeviceID) { found = i; } } return first_dev; }
AudioDeviceID getRequestedDeviceID(char* requestedDeviceName) { UInt32 propertySize; AudioDeviceID dev_array[64]; int numberOfDevices = 0; char deviceName[256]; AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propertySize, NULL); AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propertySize, dev_array); numberOfDevices = (propertySize / sizeof(AudioDeviceID)); for(int i = 0; i < numberOfDevices; ++i) { if (!isAnOutputDevice(dev_array[i])) continue; getDeviceName(dev_array[i], deviceName); if (strcmp(requestedDeviceName, deviceName) == 0) { return dev_array[i]; } } return kAudioDeviceUnknown; }
AudioDeviceID getRequestedDeviceID(char * requestedDeviceName, ASDeviceType typeRequested) { UInt32 propertySize; AudioDeviceID dev_array[64]; int numberOfDevices = 0; char deviceName[256]; AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propertySize, NULL); // printf("propertySize=%d\n",propertySize); AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propertySize, dev_array); numberOfDevices = (propertySize / sizeof(AudioDeviceID)); // printf("numberOfDevices=%d\n",numberOfDevices); for(int i = 0; i < numberOfDevices; ++i) { switch(typeRequested) { case kAudioTypeInput: if (!isAnInputDevice(dev_array[i])) continue; break; case kAudioTypeOutput: if (!isAnOutputDevice(dev_array[i])) continue; break; case kAudioTypeSystemOutput: if (getDeviceType(dev_array[i]) != kAudioTypeOutput) continue; break; default: break; } getDeviceName(dev_array[i], deviceName); // printf("For device %d, id = %d and name is %s\n",i,dev_array[i],deviceName); if (strcmp(requestedDeviceName, deviceName) == 0) { return dev_array[i]; } } return kAudioDeviceUnknown; }
void showAllDevices(ASDeviceType typeRequested) { UInt32 propertySize; AudioDeviceID dev_array[64]; int numberOfDevices = 0; ASDeviceType device_type; char deviceName[256]; AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propertySize, NULL); AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propertySize, dev_array); numberOfDevices = (propertySize / sizeof(AudioDeviceID)); for(int i = 0; i < numberOfDevices; ++i) { switch(typeRequested) { case kAudioTypeInput: if (!isAnInputDevice(dev_array[i])) continue; device_type = kAudioTypeInput; break; case kAudioTypeOutput: if (!isAnOutputDevice(dev_array[i])) continue; device_type = kAudioTypeOutput; break; case kAudioTypeSystemOutput: device_type = getDeviceType(dev_array[i]); if (device_type != kAudioTypeOutput) continue; break; default: break; } getDeviceName(dev_array[i], deviceName); printf("%s (%s)\n",deviceName,deviceTypeName(device_type)); } }