110 black_notes_.
init(open_gl);
111 white_pressed_notes_.
init(open_gl);
112 black_pressed_notes_.
init(open_gl);
133 white_pressed_notes_.
destroy(open_gl);
134 black_pressed_notes_.
destroy(open_gl);
143 state_.noteOn(midi_channel_, hover_note_,
getVelocityForNote(hover_note_, e.position));
151 state_.noteOff(midi_channel_, hover_note_, 0.0f);
177 if (note == hover_note_)
180 state_.noteOff(midi_channel_, hover_note_, 0.0f);
211 void setWhiteKeyQuad(
OpenGlMultiQuad* quads,
int quad_index,
int white_key_index);
219 void setBlackKeyQuad(
OpenGlMultiQuad* quads,
int quad_index,
int black_key_index);
221 MidiKeyboardState& state_;
230 Colour key_press_color_;
232 Colour white_key_color_;
233 Colour black_key_color_;
235 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(
MidiKeyboard)
A visual and interactive MIDI keyboard component.
Definition midi_keyboard.h:17
static const float kBlackKeyOffsets[]
Horizontal offsets for black keys relative to white keys, per octave.
Definition midi_keyboard.h:3
void init(OpenGlWrapper &open_gl) override
Initializes OpenGL resources for rendering keys.
Definition midi_keyboard.h:109
void parentHierarchyChanged() override
Called when the parent hierarchy changes.
Definition midi_keyboard.cpp:89
void setMidiChannel(int channel)
Sets the MIDI channel used by note-on and note-off messages.
Definition midi_keyboard.h:197
float getVelocityForNote(int midi, Point< float > position)
Calculates the note velocity based on vertical mouse click position.
Definition midi_keyboard.cpp:152
static constexpr int kNumBlackKeysPerOctave
Number of black keys per octave.
Definition midi_keyboard.h:41
void mouseExit(const MouseEvent &e) override
Handles mouse exit events to clear the hovered note.
Definition midi_keyboard.h:167
static const bool kWhiteKeys[]
Array indicating which notes (semitones) in an octave are white keys.
Definition midi_keyboard.h:11
void mouseEnter(const MouseEvent &e) override
Handles mouse enter events to update the hovered note.
Definition midi_keyboard.h:159
int getNoteAtPosition(Point< float > position)
Determines the MIDI note at a given mouse position.
Definition midi_keyboard.cpp:130
static force_inline bool isWhiteKey(int midi)
Determines if a given MIDI note number corresponds to a white key.
Definition midi_keyboard.h:53
void paintBackground(Graphics &g) override
Paints any background elements of the keyboard, typically key boundaries.
Definition midi_keyboard.cpp:79
void mouseDown(const MouseEvent &e) override
Handles mouse down events to trigger note-on messages.
Definition midi_keyboard.h:141
void mouseMove(const MouseEvent &e) override
Handles mouse move events to update which note is hovered.
Definition midi_keyboard.h:189
void setPressedKeyPositions()
Updates which keys are displayed as pressed according to the current MidiKeyboardState.
Definition midi_keyboard.cpp:196
static constexpr int kNumWhiteKeys
Total number of white keys across the entire MIDI range.
Definition midi_keyboard.h:35
void setColors()
Updates the color scheme of the keys.
Definition midi_keyboard.cpp:93
void destroy(OpenGlWrapper &open_gl) override
Destroys OpenGL resources when the component is removed or reinitialized.
Definition midi_keyboard.h:131
void resized() override
Called when the component is resized.
Definition midi_keyboard.cpp:103
static constexpr int kNumWhiteKeysPerOctave
Number of white keys per octave.
Definition midi_keyboard.h:37
bool isBlackKeyHeight(Point< float > position)
Checks if a given position falls within the vertical range of a black key.
Definition midi_keyboard.h:95
void render(OpenGlWrapper &open_gl, bool animate) override
Renders the keyboard and its keys using OpenGL.
Definition midi_keyboard.cpp:162
static constexpr float kBlackKeyWidthRatio
Horizontal ratio of the black key width relative to white keys.
Definition midi_keyboard.h:46
static constexpr float kBlackKeyHeightRatio
Ratio of keyboard height covered by black keys.
Definition midi_keyboard.h:44
static constexpr int kNumBlackKeys
Total number of black keys across the entire MIDI range.
Definition midi_keyboard.h:39
void mouseDrag(const MouseEvent &e) override
Handles mouse drag events, allowing note slides across keys.
Definition midi_keyboard.h:175
MidiKeyboard(MidiKeyboardState &state)
Constructs the MidiKeyboard component.
Definition midi_keyboard.cpp:59
void mouseUp(const MouseEvent &e) override
Handles mouse up events to trigger note-off messages.
Definition midi_keyboard.h:150
A base component class that integrates JUCE's Component with OpenGL rendering.
Definition open_gl_component.h:20
A component for rendering multiple quads using OpenGL, with customizable colors, rounding,...
Definition open_gl_multi_quad.h:16
virtual void init(OpenGlWrapper &open_gl) override
Initializes OpenGL buffers and shader attributes.
Definition open_gl_multi_quad.cpp:37
virtual void destroy(OpenGlWrapper &open_gl) override
Releases OpenGL resources when the component is destroyed.
Definition open_gl_multi_quad.cpp:69
A convenience class for a single quad rendered via OpenGL.
Definition open_gl_multi_quad.h:447
#define force_inline
Definition common.h:23
constexpr int kNotesPerOctave
Number of semitones per octave.
Definition common.h:51
constexpr int kMidiSize
MIDI note count (0-127).
Definition common.h:44
A helper struct containing references to OpenGL context, shaders, and display scale.
Definition shaders.h:174