Я обнаружил еще одну ошибку симулятора iOS. У меня вопрос, есть ли обходной путь?
Ошибка заключается в следующем:
Загрузить Apple AurioTouch Пример проекта.
и просто распечатайте количество кадров, получаемых обратным вызовом (в aurioTouchAppDelegate.mm)
static OSStatus PerformThru(
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
printf( "%u, ", (unsigned int)inNumberFrames );
Я получаю следующий вывод:
471, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, ...
Однако, если вы закомментируете вызов AudioUnitRender в следующей строке:
{
printf( "%u, ", (unsigned int)inNumberFrames );
aurioTouchAppDelegate *THIS = (aurioTouchAppDelegate *)inRefCon;
OSStatus err = 0; // AudioUnitRender(THIS->rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);
Теперь каждый раз отправляет соответствующее число поплавков.
471, 470, 471, 470, 470, 471, 470, 471, 470, 470, 471, 470, 471, 470, 470, 471, 470,
Другой вопрос, который у меня возникает: почему такое случайное число, как 470, 471? Я где-то читал, что вы указываете длину буфера неявно, указав его длительность, и он устанавливает длину буфера равной , т.е. степень двойки, которая дает наилучшее приближение к этой продолжительности . Но эмпирические данные свидетельствуют о том, что это не так.
Во всяком случае, уверен, что это ошибка. Я собираюсь пойти на файл это. Если кто-то может пролить свет, пожалуйста, сделайте!