title: Audiokit MIDI initialisation is confusing
body: <p>CoreMIDI terminology is already super confusing and badly documented, and Audiokit isn't helping as much as I wished it might.</p>
  
  <p>As far as I can tell, each application is supposed to have one instance of a midi client reference (<code>MIDIClientRef</code>). Audiokit has the <code>AKMIDI</code> class that creates a new client reference for each <code>AKMIDI</code> instance, and instances are being created left, right and center (including the initialization of each <code>AKMIDIInstrument</code>, <code>AKCallbackInstrument</code> and <code>AKMIDISampler</code> instance). All of these also create endpoints with hardcoded names in their built-in constructors so I don't see how I'm supposed to make ones that have proper names.</p>
  
  <p>The top price goes to <code>AKMIDISampler</code>, whose source first says:</p>
  
  <pre><code>/// Initialize the MIDI Sampler
  public override init() {
      super.init()
      enableMIDI()
  }
  </code></pre>
  
  <p>And then on the following few lines:</p>
  
  <pre><code>/// Enable MIDI input from a given MIDI client
  /// This is not in the init function because it must be called AFTER you start AudioKit
  ///
  /// [snipped parameter comments for brevity]
  open func enableMIDI(_ midiClient: MIDIClientRef = AKMIDI().client, name: String = "MIDI Sampler")
  </code></pre>
  
  <p>(Note that it <strong>IS</strong> in the init function)</p>
  
  <p>I would be super happy to either hear some clarification about general usage guidelines (do I need to override everything?) or links to documentation/articles explaining this in more detail.</p>