Это является продолжением к предыдущему вопросу: OSX CoreAudio: Getting inNumberFrames in advance - on initialization?OSX: API CoreAudio для настройки длины буфера IO?
Я пытаюсь выяснить, что будет AudioUnit API для возможности установки inNumberFrames или предпочитали IO длительность буфера входного обратного вызова для одного HAL экземпляр аудио компонента в OSX (не подключаемый модуль!). Хотя я понимаю, что есть полная документация о том, как это может быть достигнуто в iOS, с помощью AVAudioSession API. Я не могу ни вычислить, ни найти документацию по настройке этих значений в OSX, в зависимости от того, какой API. В Интернете полно экспертных, но противоречивых заявлений от «. Существует API аудиоустройства для запроса частоты дискретизации и предпочтительной продолжительности буфера ...», до «». Вы можете определенно получить количество кадров, но только для текущего вызова обратного вызова ... ".
Есть ли способ, по крайней мере получения (и адаптации к) в inNumberFrames или аудио буфера длиной коллекции всемирно система, для входной выбранных частот дискретизации в OSX? Например, для 44.1k и его кратных (это, похоже, работает частично), а также для 48k и его кратных (это, похоже, не работает вообще, я не знаю, где хак, который позволяет адаптировать буфер lenfth к этим значениям)? Вот консоль распечатка:
Available 7 Sample Rates
Available Sample Rate value : 8000.000000
Available Sample Rate value : 16000.000000
Available Sample Rate value : 32000.000000
Available Sample Rate value : 44100.000000
Available Sample Rate value : 48000.000000
Available Sample Rate value : 88200.000000
Available Sample Rate value : 96000.000000
.mSampleRate = 48000.00
.mFormatID = 1819304813
.mBytesPerPacket = 8
.mFramesPerPacket = 1
.mBytesPerFrame = 8
.mChannelsPerFrame = 2
.mBitsPerChannel = 32
.mFormatFlags = 9
_mFormatHumanReadable = kAudioFormatFlagIsFloat
kAudioFormatFlagIsPacked
kLinearPCMFormatFlagIsFloat
kLinearPCMFormatFlagIsPacked
kLinearPCMFormatFlagsSampleFractionShift
kAppleLosslessFormatFlag_16BitSourceData
kAppleLosslessFormatFlag_24BitSourceData
expectedInNumberFrames = 512
Couldn't render in current context (Error -10863)
Ожидаемое inNumberFrames считывается из системы:
UInt32 expectedInNumberFrames = 0;
UInt32 propSize = sizeof(UInt32);
AudioUnitGetProperty(gInputUnitComponentInstance,
kAudioDevicePropertyBufferFrameSize,
kAudioUnitScope_Global,
0,
&expectedInNumberFrames,
&propSize);
Заранее спасибо за указание мне в правильном направлении!
Большое спасибо, @ hotpaw2. Я видел эту ссылку раньше, но из-за сложного заголовка «** Экономия энергии во время аудио ввода/вывода - свойство kAudioHardwarePropertyPowerHint **» пробежало по нему, вместо того чтобы уделять более пристальное внимание содержимому этого ** TN **. Большое спасибо за то, что указали на меня. Уверена, что у меня возникнут другие вопросы, касающиеся нескольких внешних аппаратных устройств высокого класса, когда я смогу переписать код в соответствии с этим ** TN **.Я согласен с ответом на то, что я «наиболее полезен в поиске решения» этой проблемы. – user3078414