denigma 4.0.0
Loading...
Searching...
No Matches
noteheads.h
1/*
2 * Copyright (C) 2026, Robert Patterson
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 */
22#pragma once
23
24#include <optional>
25#include <string>
26
27#include "musx/musx.h"
28
29namespace denigma {
30namespace classify {
31
32namespace notehead {
33
36enum class Shape
37{
38 Unclassified,
41 Other,
42 Null,
43 Regular,
44 X,
45 Diamond,
46 SmallSlash,
47 LargeSlash,
48 Circled
49};
50
53enum class Fill
54{
56 Unspecified,
57 Filled,
58 Unfilled
59};
60
61} // namespace notehead
62
66{
68 notehead::Shape shape{ notehead::Shape::Unclassified };
70 notehead::Fill fill{ notehead::Fill::Unspecified };
72 std::optional<std::string> glyphName;
74 musx::dom::NoteInfoPtr::NoteheadInfo noteheadInfo;
75
77 explicit operator bool() const noexcept
78 { return shape != notehead::Shape::Unclassified; }
79};
80
83 const musx::dom::MusxInstance<musx::dom::FontInfo>& fontInfo, char32_t symbol);
84
87NoteheadClassification classifyNotehead(const musx::dom::NoteInfoPtr& note);
88
89} // namespace classify
90} // namespace denigma
NoteheadClassification classifyNotehead(const musx::dom::NoteInfoPtr &note)
Classifies the effective notehead for a note, resolving the note's font/character via #musx::dom::Not...
NoteheadClassification classifyNoteheadSymbol(const musx::dom::MusxInstance< musx::dom::FontInfo > &fontInfo, char32_t symbol)
Classifies a notehead symbol from a font and character code.
Core public API for the Denigma conversion libraries.
Definition articulations.h:32
Result returned by notehead classification.
Definition noteheads.h:66
std::optional< std::string > glyphName
SMuFL glyph name associated with the recognized symbol, when available.
Definition noteheads.h:72
musx::dom::NoteInfoPtr::NoteheadInfo noteheadInfo
The resolved font, character, size, and offset that produced this classification.
Definition noteheads.h:74
notehead::Shape shape
Classified notehead shape family.
Definition noteheads.h:68
notehead::Fill fill
Filled/unfilled state of the glyph. notehead::Fill::Unspecified when not known or not applicable.
Definition noteheads.h:70