Все образцы кода, которые я могу найти, использующие AudioConverterRef
, ориентированы на случаи использования, когда у меня есть все данные заранее (например, преобразование файла на диске). Обычно они вызывают AudioConverterFillComplexBuffer
с PCM для преобразования в inInputDataProcUserData
и просто заполняют его в обратном вызове. (Действительно ли это так, как это должно использоваться? Зачем тогда нужен обратный вызов?) В моем случае использования я пытаюсь передать аудио в формате aac с микрофона, поэтому у меня нет файла, и мой буфер PCM заполняется в режиме реального времени.
Поскольку у меня нет всех данных заранее, я попытался выполнить *ioNumberDataPackets = 0
в обратном вызове после того, как мои входные данные вышли, но это просто переводит AudioConverter в мертвое состояние, когда его нужно AudioConverterReset()
ted, и я не t получить какие-либо данные из него.
Один подход, который я видел в Интернете, заключается в том, чтобы вернуть ошибку обратного вызова, если данные, которые я сохранил, слишком малы, и просто попробовать еще раз, когда у меня будет больше данных, но это кажется такой пустой тратой ресурсов, что я не могу заставить себя хотя бы попробовать.
Мне действительно нужно «повторить попытку, пока мой входной буфер не станет достаточно большим», или есть лучший способ?