Просмотр обратного вызова рендеринга для функции с именем AudioUnitRender
Обратный вызов рендеринга происходит всякий раз, когда динамики жаждут данных.
IIRC A.T. просто захватывает, сколько сэмплов требуется от микрофона, используя эту функцию
Конечно, в первый раз он потерпит неудачу, потому что ничего не будет ждать
В любом случае, просто закомментируйте эту функцию и вместо этого самостоятельно заполните буфер сэмплами из вашего файла (который, я думаю, вы, вероятно, захотите загрузить в память заранее, вероятно, не хотите, чтобы fileIO засорял поток с высоким приоритетом)
это означает, что вам, вероятно, потребуется создать какой-то класс AudioFile и передать ссылку на экземпляр этого класса при настройке обратного вызова рендеринга. таким образом, вы сможете получить доступ к данным из этого обратного вызова рендеринга (который является ванильной функцией C, т.е. не членом класса, поэтому у него нет другого способа доступа к данным класса - если вы не хотите сделать что-то ужасное с переменными уровня файла).
убедитесь, что вы создали этот аудиофайл * NONATOMIC аудиофайл, если это свойство, вы не хотите, чтобы ваш обратный вызов рендеринга оставался в ожидании, потому что какой-то другой поток находится внутри объекта и, следовательно, имеет блокировку на нем.