Демонстрационное время воспроизведения Аудио-очереди и буферное демонстрационное время объяснены
Q: Можно ли объяснить, как временная шкала, которую использует объект аудио-очереди, касается буфера, поставленного в очередь для воспроизведения в установленный срок?
A: Можно ли объяснить, как временная шкала, которую использует объект аудио-очереди, касается буфера, поставленного в очередь для воспроизведения в установленный срок?
Объект аудио-очереди использует то, что упоминается как временная шкала воспроизведения, это - число выборок, протекших, так как аудио-очередь была запущена. Когда объект аудио-очереди сначала запускается, значение временной шкалы воспроизведения всегда 0.
Чтобы понять, как временная шкала аудио-очереди касается поставленных в очередь буферов, давайте вообразим простой сценарий с помощью единственного аудио буфера, содержащего 10 000 выборок. Приложение ставит в очередь этот буфер и запускает аудио-очередь. Поскольку очередь играет буфер в первый раз, значение временной шкалы аудио-очереди непосредственно отражает, где объект аудио-очереди в связи с аудио играемым буфером. Например, если очередь является промежуточной, хотя буфер, значение временной шкалы аудио-очереди 5,000, потому что очередь была бы в демонстрационных 5,000 в буфере.
Поскольку очередь продолжает играть, приложение ставит в очередь буфер во второй раз через AudioQueueOutputCallback обратный вызов. Временная шкала аудио-очереди продолжает постепенно увеличиваться. Временная шкала, например, может теперь иметь значение 15 000, указывая, что это промежуточно, хотя второй ставивший в очередь буфер 10 000 выборок и поэтому в демонстрационных 5,000 во втором аудио буфере.
Давайте теперь примем AudioQueueOutputCallback вызывается снова, но на сей раз приложение хотело бы ожидать 100 000 выборок прежде, чем иметь аудио буферную игру снова, создавая разрыв в воспроизведении. Чтобы сделать так, необходимо использовать AudioQueueEnqueueBufferWithParameters функция с a AudioTimeStamp значение 120 000 предусмотрело inStartTime параметр.
Где делает демонстрационное время 120 000, прибывают из?
10,000 - Продолжительность первого буфера.
+ 10,000 - Продолжительность второго буфера.
+ 100,000 - Разрыв приложение требуется.
= 120,000 - значение временной шкалы Аудио-очереди в этот момент в очереди.
Это работает, потому что аудио-очередь все еще играет и все еще постепенно увеличивает временную шкалу воспроизведения, но не будет фактически играть ставивший в очередь буфер, пока «глава воспроизведения» не добирается до демонстрационного времени, которое было предоставлено при постановке в очередь буфера (120,000). Когда аудио-очередь достигает этого демонстрационного времени, она играет первую выборку (0) из новых 10 000 демонстрационных аудио буферов. Когда значение временной шкалы воспроизведения аудио-очереди достигает 125,000, это еще раз промежуточно (5 000 выборок) через аудио буфер.
Обрезка выборок
Приложения могут также передать параметры обрезки такой как inTrimFramesAtStart к AudioQueueEnqueueBufferWithParameters функция, далее управляющее воспроизведение. inTrimFramesAtStart параметр говорит аудио-очереди обрезать определенную сумму выборок от начала ставящегося в очередь аудио буфера. Для обрезки выборок от конца буфера используйте inTrimFramesAtEnd параметр вместо этого. Оба параметра могут также использоваться вместе.
Давайте предположим что в следующий раз AudioQueueOutputCallback обратный вызов вызывается, приложения хотят перескочить через первые 5 000 выборок в аудио буфере. Это использовало бы AudioQueueEnqueueBufferWithParameters функция с inStartTime набор параметра к NULL. Это говорит объекту аудио-очереди сразу воспроизвести буфер после того, как закончится предыдущий буфер. Приложение также обеспечило бы значение 5 000 для inTrimFramesAtStart параметр, сообщая аудио-очереди для не игры первых 5 000 выборок в буфере.
Этот вызов AudioQueueEnqueueBufferWithParameters функционируйте изменяет буферную демонстрационную продолжительность для работы постановки в очередь. 10 000 демонстрационных аудио буферов теперь эффективно обрезаются к 5 000 выборок. Буфер воспроизводит сразу от обрезанного смещения от запуска аудио буфера, как только аудио-очередь заканчивает играть ранее ставивший в очередь буфер. Нет никакого разрыва.
Что временная шкала аудио-очереди оценит быть после того, как будет играться этот обрезанный буфер?
120,000 - Наше предыдущее значение временной шкалы очереди.
+ 10,000 - Предыдущий буфер с очередями с разрывом перед ним.
+ 5,000 - Продолжительность обрезанного буфера.
= 135,000 - Демонстрационное время в этот момент в очереди.
История версии документа
| Дата | Примечания |
|---|---|
| 20.09.2010 | Новый документ, описывающий, как демонстрационное время воспроизведения аудио-очереди касается ставившего в очередь буферного демонстрационного времени и обсуждает AudioQueueEnqueueBufferWithParameters. |