Как вы выбираете устройство Audio ввода в Core Audio?
-
02-10-2019 - |
Вопрос
Я пишу программу, которая должна иметь дело с несколькими аудиовходами.
В настоящее время я использую AudioQueues, чтобы получить вход, но это только из устройства ввода по умолчанию.
Есть ли способ либо либо:
- Выберите, какое устройство ввода используют аудиопроцелы.
- Измените устройство ввода по умолчанию.
Я знаю, что я могу использовать kaudiohardwarePropertydevices в Core-audio для получения списка устройств вывода, есть ли аналогичный, который я могу использовать для устройств ввода?
Решение
kAudioHardwarePropertyDevices
используется как для выходных, так и для ввода устройств. Устройства могут иметь как входные и выходные каналы, либо могут иметь только входные или выходные каналы.
Большая часть аудиовисных ... Функции возьмите логический параметр ISINPUP так, чтобы вы записали входную сторону устройства.
Другие советы
Я ударил голову против того, как это сделать на некоторое время, и, наконец, понял это:
BOOL isMic = NO;
BOOL isSpeaker = NO;
AudioDeviceID device = audioDevices[i];
// Determine direction of the device by asking for the number of input or
// output streams.
propertyAddress.mSelector = kAudioDevicePropertyStreams;
propertyAddress.mScope = kAudioDevicePropertyScopeInput;
UInt32 dataSize = 0;
OSStatus status = AudioObjectGetPropertyDataSize(device,
&propertyAddress,
0,
NULL,
&dataSize);
UInt32 streamCount = dataSize / sizeof(AudioStreamID);
if (streamCount > 0)
{
isMic = YES;
}
propertyAddress.mScope = kAudioDevicePropertyScopeOutput;
dataSize = 0;
status = AudioObjectGetPropertyDataSize(device,
&propertyAddress,
0,
NULL,
&dataSize);
streamCount = dataSize / sizeof(AudioStreamID);
if (streamCount > 0)
{
isSpeaker = YES;
}
Как видите, ключевая часть состоит в том, чтобы использовать значения параметров параметров Scoppeinput / Scoppeoutput.