type audio external create : string -> audio = "Audio" [@@bs.new] external play : audio -> unit = "play" [@@bs.send] external currentTime : audio -> int = "currentTime" [@@bs.get] external setCurrentTime : audio -> int -> unit = "currentTime" [@@bs.set] let playOrReplay audio = let () = if currentTime audio > 0 then setCurrentTime audio 0 else () in play audio (* Sounds *) let c3 = create "sounds/c3.mp3" let c4 = create "sounds/c4.mp3" let c5 = create "sounds/c5.mp3" (* Play from step *) let playFromStep (config: Config.config) (step : Step.state) = match step.step with | Step.Prepare when step.remaining == config.prepare -> playOrReplay c3 | Step.Work when step.remaining == config.work -> playOrReplay c5 | Step.Rest when step.remaining == config.rest -> playOrReplay c3 | Step.End -> playOrReplay c3 | _ -> if step.remaining <= 3 then playOrReplay c4 else ()