Как вы выбираете устройство Audio ввода в Core Audio?

StackOverflow https://stackoverflow.com/questions/3199199

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top