Если вы можете выбрать iOS 4.0 или выше, попробуйте использовать AVPlayer. Тогда вы сможете использовать
- (id)addBoundaryTimeObserverForTimes:(NSArray *)times queue:(dispatch_queue_t)queue usingBlock:(void (^)(void))block
, который принимает массив значений NSValues для CMTimes и будет запускать содержимое блока каждый раз при достижении одного из границ времени. (Остерегайтесь некоторого поведения, например, если вы приостановите звуковой файл внутри блока, обратный вызов снова вызовет снова , когда вы его приостановите).
Поскольку CMTime не является плавающей точкой, я думаю, что это будет более точным, чем повторная проверка currentTime.