Я хотел бы представить временную метку, исходящую от HTMLMediaElement
. Ее определяющие характеристики:Представление временных меток
- Его значение представляется в виде
Double
- Он может быть получен в любой момент с использованием
getCurrentTime :: IO Double
(как частично применен на даннойHTMLMediaElement
) - Это потенциально непрерывно изменяется (всякий раз, когда проигрыватель мультимедиа)
Мой первоначальный план был represent it as a Behavior t Double
that re-runs the IO Double
every time it is observed, но это не получилось слишком хорошо.
вещи я попытался:
- Использование
Behavior
, который подталкивают под капотом на фиксированной частоте, как описано в the workaround section of this question - Переходя к
Event t()
, представляющий требуемую частоту дискретизации, и возвращаяEvent t Double
который содержит совпадающие временные метки
Мне тоже не нравится - первый либо сопрягает поведение (извините) слишком много для моего конкретного случая использования (если я использую возможную частоту дискретизации, которую я буду использовать в своем приложении), или кажется расточительным (если я использую что-то вроде выборки 1 кГц при создании Behavior
, а затем пробовал его на 60 Гц на конце приложения), а вторая довольно негибкая, если вы хотите сделать несколько вещей с отметкой времени с разной частотой дискретизации.