Audio Plugin to Play MIDI and Process Voice

I am going to write a desktop software where I can listen notes, sing along with them and see visual feedback in a realtime with both notes and vocal displayed in the same screen.

I need:

  1. Import music notes (as MIDI file or in some another popular format)
  2. See the notes in a convenient visual form
  3. Play the notes through headphones
  4. Sing to a microphone along with the notes played in headphones
  5. See visual feedback link on top of the notes layer
  6. Change pitch shifts and tempo of the notes

The screenshot is from Vocaberry Android app.

I tried to find a ready-made desktop tool for this, but apparently it does not exist:




Therefore I need to write my own. I want to make it as an audio plugin (VST3, etc) for DAWs. It is not a trivial plugin, therefore I decide to write it on c++.

What JUCE classes or modules can I use for the task at hand to avoid reinventing a wheel?
How to show notes from MIDI file as blocks, how to get and draw the voice line above the note blocks? What concrete classes can I use?