Сигнализация конца данных при использовании AudioConverterFillComplexBuffer
Q: При использовании AudioConverterFillComplexBuffer для преобразования данных, что я должен сделать, когда я исчерпываю данные?
A: Когда Вы исчерпаете данные, будет три случая:
Конец потока - В Вашей входной процедуре, необходимо установить общую сумму пакетного чтения и размеры данных в AudioBufferList для обнуления. Входная процедура должна также возвратить noErr. Это будет сигнализировать AudioConverter, что Вы вне данных. Более в частности, набор
ioNumberDataPacketsиioBufferList->mDataByteSizeобнулить в Вашем вводе proc и возвратить noErr. ГдеioNumberDataPacketsпреобразованный объем данных иioBufferList->mDataByteSizeразмер объема данных, преобразованного в каждом AudioBuffer в Вашем входном обратном вызове процедуры. Вашу входную процедуру можно вызвать еще несколько раз; необходимо просто продолжить возвращать нуль и noErr.Некоторые доступные данные от входного потока, но недостаточно удовлетворить входной запрос - Если данные передавались потоком в режиме реального времени, могут быть ситуацией, где существует недостаточно данных, которые будут обработаны, который встречает объем данных, который требуют в Вашем обратном вызове. В этом случае необходимо возвратить noErr и сумму пакетов, обработанных от входного обратного вызова. Ваш входной обратный вызов вызовут снова для остающихся пакетов.
Никакие в настоящее время доступные данные - Если нет никаких данных, в настоящее время доступных от входного потока, но данных, не остаются быть преобразованными, установленными
ioNumberDataPacketsобнулить и возвратить ошибку (любое ненулевое значение). Ошибка будет распространена назад к вызывающей стороне. Если какие-либо данные были преобразованы, который будет также возвращен к вызывающей стороне.
Вы никогда не должны также пытаться предположить точно сколько данных, чтобы запросить от Вашего обратного вызова преобразовать весь буфер данных в одном вызове. Кодекам позволяют сохранить любой объем данных буферизованным внутренне; поэтому, необходимо запросить меньшие объемы данных. Издержки запроса преобразования являются маленькими по сравнению с самим преобразованием. Запрос очень больших буферов также плох для кэша. Это заставляет каждый внутренний буфер должным быть быть большим, или должным быть разделяться на меньшие блоки.
См. AudioConverter.h в AudioToolbox.framework для большего количества подробных данных относительно использования AudioConverter.
История версии документа
| Дата | Примечания |
|---|---|
| 21.07.2011 | Передовая статья |
| 26.04.2004 | Неуказанные версии содержания. |
| 23.10.2003 | Новый документ это, как сигнализировать конец данных при использовании AudioConverterFillComplexBuffer для преобразования аудиоданных. |