Обратный вызов в определенное время во время воспроизведения аудио - PullRequest
1 голос
/ 03 октября 2011

Можно ли воспроизвести аудиофайл из пользовательской библиотеки ipod и вызвать обратный вызов всякий раз, когда проигрыватель достигает определенного момента времени? Мне нужно, чтобы он был очень точным, поэтому простого использования таких методов, как currentPlaybackTime, может быть недостаточно, поскольку равенство с плавающей точкой является неточным. Я мог бы использовать проверку с плавающей точкой A - B < Epsilon, но есть ли лучший, более точный способ достижения этого?

1 Ответ

2 голосов
/ 03 октября 2011

Если вы можете выбрать iOS 4.0 или выше, попробуйте использовать AVPlayer. Тогда вы сможете использовать

- (id)addBoundaryTimeObserverForTimes:(NSArray *)times queue:(dispatch_queue_t)queue usingBlock:(void (^)(void))block

, который принимает массив значений NSValues ​​для CMTimes и будет запускать содержимое блока каждый раз при достижении одного из границ времени. (Остерегайтесь некоторого поведения, например, если вы приостановите звуковой файл внутри блока, обратный вызов снова вызовет снова , когда вы его приостановите).

Поскольку CMTime не является плавающей точкой, я думаю, что это будет более точным, чем повторная проверка currentTime.

...