NAP
midiinputcomponent.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 // Midi includes
8 #include "midievent.h"
9 #include "midiservice.h"
10 
11 // Nap includes
12 #include <component.h>
13 #include <nap/signalslot.h>
14 
15 
16 namespace nap
17 {
18 
19  class MidiInputComponentInstance;
20 
21 
25  class NAPAPI MidiInputComponent : public nap::Component
26  {
27  RTTI_ENABLE(nap::Component)
29 
30  public:
32 
33  std::vector<std::string> mPorts;
34  std::vector<MidiValue> mChannels;
35  std::vector<MidiValue> mNumbers;
36  bool mNoteOn = true;
37  bool mNoteOff = true;
38  bool mAfterTouch = true;
39  bool mControlChange = true;
40  bool mProgramChange = true;
41  bool mChannelPressure = true;
42  bool mPitchBend = true;
43  };
44 
45 
50  {
51  RTTI_ENABLE(nap::ComponentInstance)
52  friend class MidiService;
53 
54  public:
55  MidiInputComponentInstance(EntityInstance& entity, Component& resource) : nap::ComponentInstance(entity, resource) { }
56 
57  // Initialize the component
58  bool init(utility::ErrorState& errorState) override;
59 
60  virtual ~MidiInputComponentInstance();
61 
66 
67  std::vector<std::string> mPorts;
68  std::vector<MidiValue> mChannels;
69  std::vector<MidiValue> mNumbers;
70  std::vector<MidiEvent::Type> mTypes;
72  nap::Signal<const MidiEvent&>* getMessageReceived() { return &messageReceived; }
73 
74  protected:
78  void trigger(const MidiEvent& event) { messageReceived(event); }
79 
80  private:
81  MidiService* mService = nullptr;
82  };
83 
84 }
nap::MidiInputComponentInstance::mChannels
std::vector< MidiValue > mChannels
Definition: midiinputcomponent.h:68
nap::MidiInputComponent::MidiInputComponent
MidiInputComponent()
Definition: midiinputcomponent.h:31
nap::MidiInputComponentInstance::trigger
void trigger(const MidiEvent &event)
Definition: midiinputcomponent.h:78
nap::MidiInputComponentInstance
Definition: midiinputcomponent.h:49
nap::utility::ErrorState
Definition: errorstate.h:19
nap::MidiInputComponentInstance::getMessageReceived
nap::Signal< const MidiEvent & > * getMessageReceived()
Definition: midiinputcomponent.h:72
nap::MidiInputComponent::mNumbers
std::vector< MidiValue > mNumbers
Property: 'Numbers' Filter specifying what number bytes (like cc numbers) to listen to....
Definition: midiinputcomponent.h:35
nap::MidiInputComponent::mPorts
std::vector< std::string > mPorts
Property: 'Ports' Filter specifying input ports that will be listened to. Empty means all ports....
Definition: midiinputcomponent.h:33
nap::Signal
Definition: signalslot.h:28
nap::EntityInstance
Definition: entity.h:34
nap::ComponentInstance
Definition: component.h:43
nap::MidiInputComponent::mChannels
std::vector< MidiValue > mChannels
Property: 'Channels' Filter specifying what midi channels to listen to. Empty means all channels....
Definition: midiinputcomponent.h:34
nap::MidiEvent
Definition: midievent.h:22
nap::Component
Definition: component.h:151
nap::MidiService
Definition: midiservice.h:30
nap
Definition: templateapp.h:17
nap::MidiInputComponentInstance::messageReceived
nap::Signal< const MidiEvent & > messageReceived
Definition: midiinputcomponent.h:65
nap::MidiInputComponentInstance::mTypes
std::vector< MidiEvent::Type > mTypes
Definition: midiinputcomponent.h:70
nap::MidiInputComponentInstance::mNumbers
std::vector< MidiValue > mNumbers
Definition: midiinputcomponent.h:69
nap::MidiInputComponent
Definition: midiinputcomponent.h:25
nap::MidiInputComponentInstance::mPorts
std::vector< std::string > mPorts
Definition: midiinputcomponent.h:67