2013-08-23 1 views
1

Я просто встаю, чтобы ускорить работу с основным звуком, и просматриваю все примеры в «Learning Core Audio» Адамсона и Авилы.Изучение Core Audio Глава 8 Пример не работает

Первый пример, который не работает (с использованием кода примера и проектов с веб-сайта), приведен в главе 8. Он просто ничего не делает.

несколько раз, но не каждый раз, когда я запускаю программу, я получаю сообщение об ошибке на последней строке

AUGraphClose(player.graph); 

CH08_AUGraphInput (9781,0x7fff78ee8960) таНос: * ошибка для объекта 0x104003600: указатель освобождения не было выделено * установить контрольную точку в malloc_error_break для отладки

Я просто проверяю, чтобы увидеть, если кто-нибудь имел эту проблему, как я ныряю в выяснить, что может быть пойдет не так.

ответ

1

Хорошо, мне удалось отладить это путем случайного использования контрольных точек.

Похоже, что поле mTimestamp метки времени не получается правильно записано при первом обратном вызове выхода. При первом вызове он всегда отображается как 0. После первого вызова он имеет такую ​​же величину, что и значение от временной метки ввода, которая намного больше 0. В результате inToOutSampleTimeOffset, вычисленный из первого образца не является значимой ценностью, и он вызывает беспорядок в кольцевом буфере.

Чтобы это исправить, я добавил

if (inTimeStamp->mSampleTime > 0.0) { 

В строке 97, и блокировал выполнение остальных функций. Теперь он работает, хотя начинается ужасный поп.

Смежные вопросы