Измените пример кода Auriotouch для чтения данных из аудиофайла. - PullRequest
2 голосов
/ 28 июля 2011

Я хочу изменить образец кода Apple auriotouch, чтобы генерировать сигнал из аудиофайла, а не воспроизводить сигнал с микрофонного входа.Я пытался сделать это, но я не могу понять, где и какие изменения сделать.Кто-нибудь может подсказать мне, как этого достичь.

Спасибо,

1 Ответ

1 голос
/ 28 июля 2011

Просмотр обратного вызова рендеринга для функции с именем AudioUnitRender

Обратный вызов рендеринга происходит всякий раз, когда динамики жаждут данных.

IIRC A.T. просто захватывает, сколько сэмплов требуется от микрофона, используя эту функцию

Конечно, в первый раз он потерпит неудачу, потому что ничего не будет ждать

В любом случае, просто закомментируйте эту функцию и вместо этого самостоятельно заполните буфер сэмплами из вашего файла (который, я думаю, вы, вероятно, захотите загрузить в память заранее, вероятно, не хотите, чтобы fileIO засорял поток с высоким приоритетом)

это означает, что вам, вероятно, потребуется создать какой-то класс AudioFile и передать ссылку на экземпляр этого класса при настройке обратного вызова рендеринга. таким образом, вы сможете получить доступ к данным из этого обратного вызова рендеринга (который является ванильной функцией C, т.е. не членом класса, поэтому у него нет другого способа доступа к данным класса - если вы не хотите сделать что-то ужасное с переменными уровня файла).

убедитесь, что вы создали этот аудиофайл * NONATOMIC аудиофайл, если это свойство, вы не хотите, чтобы ваш обратный вызов рендеринга оставался в ожидании, потому что какой-то другой поток находится внутри объекта и, следовательно, имеет блокировку на нем.

...