NAP
midiservice.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Std includes
8 #include <set>
9 
10 // Nap includes
11 #include <nap/service.h>
12 #include <concurrentqueue.h>
13 
14 // Midi includes
15 #include "midievent.h"
16 
17 namespace nap
18 {
19  // Forward declarations
20  class MidiInputPort;
21  class MidiInputComponentInstance;
22 
26  class NAPAPI MidiService : public nap::Service
27  {
28  RTTI_ENABLE(nap::Service)
29 
30  friend class MidiInputPort;
32 
33  public:
34  MidiService(ServiceConfiguration* configuration);
35 
36  // Initialization
37  bool init(nap::utility::ErrorState& errorState) override;
38 
42  void enqueueEvent(std::unique_ptr<MidiEvent> event) { mEventQueue.enqueue(std::move(event)); }
43 
47  void update(double deltaTime) override;
48 
49  private:
50  // Used by input component to register itself to receive incoming midi events
51  void registerInputComponent(MidiInputComponentInstance& component) { mInputComponents.emplace(&component); }
52 
53  // Used by input component to unregister itself.
54  void unregisterInputComponent(MidiInputComponentInstance& component) { mInputComponents.erase(&component); }
55 
56  std::set<MidiInputComponentInstance*> mInputComponents; // all registered midi input components
57 
61  moodycamel::ConcurrentQueue<std::unique_ptr<MidiEvent>> mEventQueue;
62  };
63 
64 }
nap::MidiInputComponentInstance
Definition: midiinputcomponent.h:47
nap::ServiceConfiguration
Definition: service.h:28
nap::Service
Definition: templateservice.h:8
nap::MidiEvent
Definition: midievent.h:22
nap::MidiService
Definition: midiservice.h:26
nap
Definition: templateapp.h:17
nap::MidiInputPort
Definition: midiinputport.h:22