Correct way of creating modules and connecting them



I am new to Juce and want to write a small application for pitch detection.

I need some guidance for using the correct and up-to-date programming style/jargon in the Juce Framework.

The program will take sound from an input, plays it in real-time, reads a sound file and plays it back, makes some analysis and plots (oscilloscope, spectrum etc) of both inputs.

So, how should I build the infrastructure? I looked through the API and saw a AudioProcessorGraph class. I thought that the whole program will be an instance of that. Am I right?

Can one please tell me the names of the classes to built a modular program, which includes modules for sound input from mic and file, mixing inputs, making calculations using the samples of the mixed inputs, plotting waveforms, collecting samples in frames and taking their FFT, detecting peaks in the spectrum etc.

There are many classes like AudioProcessor, AudioFilterStreamer, AudioSampleBuffer. I confused to choose which of them. I will be happy if someone enlightens me about which is the modern way of creating modules and interconnecting them.