Loading...
Searching...
No Matches
MidiNote.hpp
1#pragma once
2#include <score/model/IdentifiedObject.hpp>
3#include <score_plugin_midi_export.h>
4#include <score/selection/Selectable.hpp>
5
6#include <verdigris>
7
8namespace Midi
9{
10using midi_size_t = uint8_t;
12{
13 NoteData() = default;
14 NoteData(double s, double d, midi_size_t p, midi_size_t v)
15 : m_start{s}
16 , m_duration{d}
17 , m_pitch{p}
18 , m_velocity{v}
19 {
20 }
21
22 double start() const { return m_start; }
23 double duration() const { return m_duration; }
24 double end() const { return m_start + m_duration; }
25
26 midi_size_t pitch() const { return m_pitch; }
27 midi_size_t velocity() const { return m_velocity; }
28
29 void setStart(double s) { m_start = s; }
30 void setDuration(double s) { m_duration = s; }
31 void setPitch(midi_size_t s) { m_pitch = s; }
32 void setVelocity(midi_size_t s) { m_velocity = s; }
33
34 double m_start{};
35 double m_duration{};
36
37 midi_size_t m_pitch{};
38 midi_size_t m_velocity{};
39};
40
42{
43 bool operator()(const NoteData& lhs, const NoteData& rhs) const
44 {
45 return lhs.m_start < rhs.m_start;
46 }
47 bool operator()(const NoteData& lhs, double rhs) const { return lhs.m_start < rhs; }
48};
49
59class SCORE_PLUGIN_MIDI_EXPORT Note final : public IdentifiedObject<Note>
60{
61 W_OBJECT(Note)
62 SCORE_SERIALIZE_FRIENDS
63
64public:
65 Selectable selection{this};
66
67 Note(const Id<Note>& id, QObject* parent);
68 Note(const Id<Note>& id, NoteData n, QObject* parent);
69
70 template <IsDeserializer DeserializerVisitor>
71 Note(DeserializerVisitor&& vis, QObject* parent)
72 : IdentifiedObject<Note>{vis, parent}
73 {
74 vis.writeTo(*this);
75 }
76
77 // Both are between 0 - 1, 1 being the process duration.
78
79 double start() const noexcept { return m_start; }
80
81 double duration() const noexcept { return m_duration; }
82
83 double end() const noexcept { return m_start + m_duration; }
84
85 midi_size_t pitch() const noexcept { return m_pitch; }
86
87 midi_size_t velocity() const noexcept { return m_velocity; }
88
89 void scale(double s) noexcept;
90
91 void setStart(double s) noexcept;
92
93 void setDuration(double s) noexcept;
94
95 void setPitch(midi_size_t s) noexcept;
96
97 void setVelocity(midi_size_t s) noexcept;
98
99 NoteData noteData() const noexcept;
100
101 void setData(NoteData d) noexcept;
102
103public:
104 void noteChanged() W_SIGNAL(noteChanged);
105
106private:
107 double m_start{};
108 double m_duration{};
109
110 midi_size_t m_pitch{};
111 midi_size_t m_velocity{64};
112};
113}
The IdentifiedObject class.
Definition IdentifiedObject.hpp:19
The Note class.
Definition MidiNote.hpp:60
The Selectable class.
Definition Selectable.hpp:14
The id_base_t class.
Definition Identifier.hpp:59
Definition MidiNote.hpp:42
Definition MidiNote.hpp:12