2016-03-13 3 views
3

Я хотел бы представить временную метку, исходящую от 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 Гц на конце приложения), а вторая довольно негибкая, если вы хотите сделать несколько вещей с отметкой времени с разной частотой дискретизации.

ответ

2

Прямо сейчас, используя Event, чтобы явно указать время (ваш второй вариант), это ваш лучший выбор. Мы еще не создали способ написать Behavior с тем, что лениво опросили внешние ресурсы, хотя я надеюсь, что мы сможем скоро это сделать.

Имейте в виду, что при использовании второго варианта вам необязательно использовать определенную частоту дискретизации; вместо этого вы можете выбирать по требованию и даже иметь несколько мест, делающих эту выборку. Это не идеально, но я надеюсь, что это позволит вам выполнить свою работу!

Смежные вопросы