Представление меток времени
Я хотел бы представить временную метку HTMLMediaElement
, Его определяющими характеристиками являются:
- Его значение представляется в виде
Double
- Это может быть запрошено в любое время, используя
getCurrentTime :: IO Double
(как частично применяется к данномуHTMLMediaElement
) - Он может постоянно меняться (когда проигрыватель мультимедиа играет)
Мой первоначальный план состоял в том, чтобы представить его как Behavior t Double
который повторно запускает IO Double
каждый раз, когда это наблюдается, но это не сработало.
Вещи, которые я пробовал:
- Используя
Behavior
это продвигается под капотом с фиксированной частотой, как описано в разделе обойти этот вопрос - Проходя
Event t ()
представляя желаемую частоту дискретизации и возвращаяEvent t Double
который содержит совпадающие метки времени
Мне тоже не очень нравится - первый либо слишком сильно привязывает поведение (извините) к моему конкретному случаю использования (если я использую возможную частоту дискретизации, которую я буду использовать в своем приложении), либо кажется расточительным (если я использую что-то как 1 кГц выборка при создании Behavior
просто для того, чтобы сэмплировать его на частоте 60 Гц на стороне приложения), а второе довольно негибко, если вы хотите сделать более чем одну вещь с временной меткой при разных частотах дискретизации.
1 ответ
Прямо сейчас, используя Event
явно выбрать время (ваш второй вариант) значение является вашей лучшей ставкой. Мы еще не создали способ написать Behavior
Это ленивый опрос внешних ресурсов, хотя я надеюсь, что скоро мы сможем это сделать.
Имейте в виду, что при втором варианте вам не обязательно использовать конкретную частоту дискретизации; вместо этого вы можете производить выборку по требованию и даже иметь несколько мест, выполняющих эту выборку. Это не идеально, но я надеюсь, что это позволит вам сделать работу!