Skip to content

omakoto/mvv

Repository files navigation

MVV - MIDI Velocity Visualizer

Synopsys

MVV is an online MIDI input visualizer, recorder and player, created for piano learners.

It visualizes:

  • Note events (which keys are pressed), with intencity (aka velocity)
  • Pedal depth (sosutenuto pedelanot supported yet)
MVV screenshot

(Click image to open MVV)

Keys

  • 1 or F1: Hide screen
  • 2 or F2: Freeze roll pane
  • F or double tap anywhere : Toggle full-screen
  • R: Record start/stop
  • SPACE: Playback start / pause
    • Left/Right: during playback -- Rewind/Fast-forward
  • Z: Stop playback
  • S: Save the last recording as a midi file
  • L: Load a *.mid file
  • 3: Show FPS and playback timer resolution.

Supported midi events

  • Only note ons/offs and the pedal depth will be visualized.
  • Other MIDI events are not visualized, but MVV will/should still record / play them; not tested though.

Bugs/TODOs

  • P4: Re-architect the entire thing
  • P1: Always recording mode
    • Estimate RAM consumption
    • Throttle control changes if needed.
    • Auto-detect between pieces
  • P3: Better playback (as a geneal MIDI player)
    • Fast-forward should send all skipped control changes
    • Rewind should replay all control changes
  • P4: Actually sync the renderer to vsync (how?)
  • P4: Support SMPTE time format in *.mid files
  • P4: Add help (not important now that we have buttons)
  • P3: Visualize sosutenuto pedal depth
  • P1: On-screen playback/recording controls
    • Play/Record/Stop/Pause/RewindToTop
    • FF/Rewind -> not needed, now that we have the position bar
    • Video mute
    • Pane freeze
    • Current position
  • Show confirmation dialog before over-recording or loading
  • Prevent text selection
  • Support pausing
  • Keep playing while in the BG too
  • Don't use prompt() (which stops playback)
  • Support loading a *.mid file
    • Support self-created mid files
    • Support other mid files
  • Constant scroll speed regardless of FPS
    • It should be mostly fixed with double-buffering now, as long as updating the hidden buffer finishes within 16 ms.
  • Show playback timestamp