Как обработать kAudioUnitProperty_MaximumFramesPerSlice
Q: Что kAudioUnitProperty_MaximumFramesPerSlice и как я использую его соответственно?
A: kAudioUnitProperty_MaximumFramesPerSlice используется Аудиоустройствами для определения то, что максимальное количество кадров Аудиоустройство попросят представить для любого данного вызова рендеринга. Если Вы попросите, чтобы Аудиоустройство представило для большего количества кадров, чем значение, указанное этим свойством, то Аудиоустройство возвратит ошибку и не представит любые данные. Поэтому необходимо гарантировать что значение, указанное kAudioUnitProperty_MaximumFramesPerSlice свойство является всегда столь же большим как наибольшее число кадров, которые Вы попросили бы представлять.
Перечисление 1 , Конфигурирующее максимальные кадры
// get the output device's frame count and set any Audio Units to match |
UInt32 numFrames; |
UInt32 dataSize = sizeof(numFrames); |
result = AudioDeviceGetProperty(myDeviceID, 0, false, |
kAudioDevicePropertyBufferFrameSize, &dataSize, & numFrames); |
if (result == noErr) |
{ |
result = AudioUnitSetProperty(myOutputAU, kAudioUnitProperty_MaximumFramesPerSlice, |
kAudioUnitScope_Global, 0, & numFrames, sizeof(numFrames)); |
result = AudioUnitSetProperty(myMixerAU, kAudioUnitProperty_MaximumFramesPerSlice, |
kAudioUnitScope_Global, 0, & numFrames, sizeof(numFrames)); |
} |
При использовании каких-либо преобразований частоты дискретизации в цепочке Аудиоустройства или графике, важно принять это во внимание. Например, если выходная частота дискретизации Вашего AUConverter составляет 44.1 кГц, и ввод составляет 22.0 кГц, AUConverter увеличит масштаб своих максимальных кадров 2X, чтобы гарантировать, что это будет в состоянии вытянуть данные через правильно.
Перечисление 2 масштабирование AUConverter
// input sample rate = 22kHz |
// output sample rate = 44.1kHz |
UInt32 numFrames = 1500; |
UInt32 dataSize = sizeof(numFrames); |
AudioUnitSetProperty(myAU, kAudioUnitProperty_MaximumFramesPerSlice, |
kAudioUnitScope_Global, 0, &numFrames, sizeof(numFrames)); |
// the AUConverter will scale up |
AudioUnitGetProperty(myAU, kAudioUnitProperty_MaximumFramesPerSlice, |
kAudioUnitScope_Global, 0, &numFrames, &dataSize); |
// numFrames is now 3000 |
Ссылки
История версии документа
| Дата | Примечания |
|---|---|
| 06.03.2012 | Передовая статья |
| 16.07.2007 | Новый документ, иллюстрирующий, как использовать kAudioUnitProperty_MaximumFramesPerSlice свойство |