Чтение обратных вызовов, необходимых для AudioFileInitializeWithCallbacks? API Apple AudioFile
Я пытаюсь написать аудиозапись низкого уровня с помощью API AudioFile и ExtAudioFile. Я создаю новый аудиофайл с AudioFileInitializeWithCallbacks, но кажется, что для этого нужны реализованные обратные вызовы размера и чтения. Почему нельзя просто принять один обратный вызов записи и поверить, что данные были успешно записаны.
Что, если я пишу в поток, который я не могу найти, например, на компакт-диске или в сетевом сокете?
Конечно, это должно просто непрерывно передавать данные в обратный вызов записи, и я несу ответственность за запись этих данных в случае необходимости, возвращая код ошибки, если операция не удалась.
Документы для AudioFile_SetSizeProc и AudioFile_WriteProc представляются неверными, так как они оба говорят об операциях чтения "inPosition Смещение в данных, из которых производится чтение.", "@Result Обратный вызов должен возвращать размер данных.".
На данный момент я преодолел это только записью в файл, но я получил kExtAudioFileError_InvalidOperationOrder после первой процедуры записи. Что это значит? В документации нет комментариев по этому поводу.
Любые указатели или помощь будут очень ценны.
1 ответ
Документация Apple здесь не так. Проверьте заголовочный файл AudioFile.h:
/*!
@typedef AudioFile_SetSizeProc
@abstract A callback for setting the size of the file data. used with AudioFileOpenWithCallbacks or AudioFileInitializeWithCallbacks.
@discussion a function that will be called when AudioFile needs to set the size of the file data. This size is for all of the
data in the file, not just the audio data. This will only be called if the file is written to.
@param inClientData A pointer to the client data as set in the inClientData parameter to AudioFileXXXWithCallbacks.
@result The callback should return the size of the data.
*/
typedef OSStatus (*AudioFile_SetSizeProc)(
void * inClientData,
SInt64 inSize);