anchor.diff:  
   init(Req, Opts) ->
   	{ok, Req2, State} = initSession(Req, Opts),
  -	{cowboy_websocket, Req2, State#{ interval => 500000 }}.
  +	{cowboy_websocket, Req2, State#{ interval => 500000, ts_denom => 4, ts_num => 4, tpqs => 256 }}.
   
   websocket_init(State) ->
   	File = filename:join(code:priv_dir(maestro_web), "static/midi/bumble_bee.mid"),
  -	Data = midifile:read(File),
  -	{seq, _, {track, [First |Track]}, OtherTracks} = Data,
  -	%io:format("~p~n", [Data]),
  +	{seq, {header, _Version, Devision}, {track, [First |Track]}, OtherTracks} = midifile:read(File),
  +	TicksPerQuarterNote = case <<Devision:16>> of
  +		<<0:1, TPQN:15>> -> TPQN;
  +		<<1:1, FPS:7, TPF:8>> ->  FPS*TPF
  +	end,
   	midiEvent(State, First),
  -	{ok, State#{ track => lists:flatten([Track, [ TrackData || {track, TrackData} <- OtherTracks ]]) }}.
  +	{ok, State#{ track => lists:flatten([Track, [ TrackData || {track, TrackData} <- OtherTracks ]]), tpqs := TicksPerQuarterNote }}.
   
   websocket_handle({text, JSON}, State) ->
   	case jsx:decode(JSON, [return_maps]) of
  
positive.code: handleMIDI(off, [Channel, Note, Velocity], State) ->
  	{reply, {text, formatMessage(<<"note.off">>, #{ note => Note, channel => Channel, velocity => Velocity })}, State};
  handleMIDI(program, [Channel, Program], State) ->
  	{reply, {text, formatMessage(<<"control.program">>, #{ channel => Channel, program => Program+1 })}, State};
  handleMIDI(_, _, State) ->
  	{ok, State}.
  
  
negative.code: 	{ok, State}.
  
  websocket_info({midi, Type, Data}, #{ track := [Next |Rest] } = State) ->
  	midiEvent(State, Next),
  	handleMIDI(Type, Data, State#{ track := Rest });
  websocket_info({send, Message}, State) ->
  