Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2021 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 : #include "utils.h"
23 :
24 : #include "translation.h"
25 :
26 : using namespace muse;
27 :
28 : [[maybe_unused]]
29 : static constexpr const char* noteNamesWithOctaves[] = {
30 : // octave -1
31 : QT_TRANSLATE_NOOP("global/pitchName", "C-1"),
32 : QT_TRANSLATE_NOOP("global/pitchName", "C♯-1"),
33 : QT_TRANSLATE_NOOP("global/pitchName", "D♭-1"),
34 : QT_TRANSLATE_NOOP("global/pitchName", "D-1"),
35 : QT_TRANSLATE_NOOP("global/pitchName", "D♯-1"),
36 : QT_TRANSLATE_NOOP("global/pitchName", "E♭-1"),
37 : QT_TRANSLATE_NOOP("global/pitchName", "E-1"),
38 : QT_TRANSLATE_NOOP("global/pitchName", "E♯-1"),
39 : QT_TRANSLATE_NOOP("global/pitchName", "F♭-1"),
40 : QT_TRANSLATE_NOOP("global/pitchName", "F-1"),
41 : QT_TRANSLATE_NOOP("global/pitchName", "F♯-1"),
42 : QT_TRANSLATE_NOOP("global/pitchName", "G♭-1"),
43 : QT_TRANSLATE_NOOP("global/pitchName", "G-1"),
44 : QT_TRANSLATE_NOOP("global/pitchName", "G♯-1"),
45 : QT_TRANSLATE_NOOP("global/pitchName", "A♭-1"),
46 : QT_TRANSLATE_NOOP("global/pitchName", "A-1"),
47 : QT_TRANSLATE_NOOP("global/pitchName", "A♯-1"),
48 : QT_TRANSLATE_NOOP("global/pitchName", "B♭-1"),
49 : QT_TRANSLATE_NOOP("global/pitchName", "B-1"),
50 : QT_TRANSLATE_NOOP("global/pitchName", "B♯-1"),
51 : // octave 0
52 : QT_TRANSLATE_NOOP("global/pitchName", "C♭0"),
53 : QT_TRANSLATE_NOOP("global/pitchName", "C0"),
54 : QT_TRANSLATE_NOOP("global/pitchName", "C♯0"),
55 : QT_TRANSLATE_NOOP("global/pitchName", "D♭0"),
56 : QT_TRANSLATE_NOOP("global/pitchName", "D0"),
57 : QT_TRANSLATE_NOOP("global/pitchName", "D♯0"),
58 : QT_TRANSLATE_NOOP("global/pitchName", "E♭0"),
59 : QT_TRANSLATE_NOOP("global/pitchName", "E0"),
60 : QT_TRANSLATE_NOOP("global/pitchName", "E♯0"),
61 : QT_TRANSLATE_NOOP("global/pitchName", "F♭0"),
62 : QT_TRANSLATE_NOOP("global/pitchName", "F0"),
63 : QT_TRANSLATE_NOOP("global/pitchName", "F♯0"),
64 : QT_TRANSLATE_NOOP("global/pitchName", "G♭0"),
65 : QT_TRANSLATE_NOOP("global/pitchName", "G0"),
66 : QT_TRANSLATE_NOOP("global/pitchName", "G♯0"),
67 : QT_TRANSLATE_NOOP("global/pitchName", "A♭0"),
68 : QT_TRANSLATE_NOOP("global/pitchName", "A0"),
69 : QT_TRANSLATE_NOOP("global/pitchName", "A♯0"),
70 : QT_TRANSLATE_NOOP("global/pitchName", "B♭0"),
71 : QT_TRANSLATE_NOOP("global/pitchName", "B0"),
72 : QT_TRANSLATE_NOOP("global/pitchName", "B♯0"),
73 : // octave 1
74 : QT_TRANSLATE_NOOP("global/pitchName", "C♭1"),
75 : QT_TRANSLATE_NOOP("global/pitchName", "C1"),
76 : QT_TRANSLATE_NOOP("global/pitchName", "C♯1"),
77 : QT_TRANSLATE_NOOP("global/pitchName", "D♭1"),
78 : QT_TRANSLATE_NOOP("global/pitchName", "D1"),
79 : QT_TRANSLATE_NOOP("global/pitchName", "D♯1"),
80 : QT_TRANSLATE_NOOP("global/pitchName", "E♭1"),
81 : QT_TRANSLATE_NOOP("global/pitchName", "E1"),
82 : QT_TRANSLATE_NOOP("global/pitchName", "E♯1"),
83 : QT_TRANSLATE_NOOP("global/pitchName", "F♭1"),
84 : QT_TRANSLATE_NOOP("global/pitchName", "F1"),
85 : QT_TRANSLATE_NOOP("global/pitchName", "F♯1"),
86 : QT_TRANSLATE_NOOP("global/pitchName", "G♭1"),
87 : QT_TRANSLATE_NOOP("global/pitchName", "G1"),
88 : QT_TRANSLATE_NOOP("global/pitchName", "G♯1"),
89 : QT_TRANSLATE_NOOP("global/pitchName", "A♭1"),
90 : QT_TRANSLATE_NOOP("global/pitchName", "A1"),
91 : QT_TRANSLATE_NOOP("global/pitchName", "A♯1"),
92 : QT_TRANSLATE_NOOP("global/pitchName", "B♭1"),
93 : QT_TRANSLATE_NOOP("global/pitchName", "B1"),
94 : QT_TRANSLATE_NOOP("global/pitchName", "B♯1"),
95 : // octave 2
96 : QT_TRANSLATE_NOOP("global/pitchName", "C♭2"),
97 : QT_TRANSLATE_NOOP("global/pitchName", "C2"),
98 : QT_TRANSLATE_NOOP("global/pitchName", "C♯2"),
99 : QT_TRANSLATE_NOOP("global/pitchName", "D♭2"),
100 : QT_TRANSLATE_NOOP("global/pitchName", "D2"),
101 : QT_TRANSLATE_NOOP("global/pitchName", "D♯2"),
102 : QT_TRANSLATE_NOOP("global/pitchName", "E♭2"),
103 : QT_TRANSLATE_NOOP("global/pitchName", "E2"),
104 : QT_TRANSLATE_NOOP("global/pitchName", "E♯2"),
105 : QT_TRANSLATE_NOOP("global/pitchName", "F♭2"),
106 : QT_TRANSLATE_NOOP("global/pitchName", "F2"),
107 : QT_TRANSLATE_NOOP("global/pitchName", "F♯2"),
108 : QT_TRANSLATE_NOOP("global/pitchName", "G♭2"),
109 : QT_TRANSLATE_NOOP("global/pitchName", "G2"),
110 : QT_TRANSLATE_NOOP("global/pitchName", "G♯2"),
111 : QT_TRANSLATE_NOOP("global/pitchName", "A♭2"),
112 : QT_TRANSLATE_NOOP("global/pitchName", "A2"),
113 : QT_TRANSLATE_NOOP("global/pitchName", "A♯2"),
114 : QT_TRANSLATE_NOOP("global/pitchName", "B♭2"),
115 : QT_TRANSLATE_NOOP("global/pitchName", "B2"),
116 : QT_TRANSLATE_NOOP("global/pitchName", "B♯2"),
117 : // octave 3
118 : QT_TRANSLATE_NOOP("global/pitchName", "C♭3"),
119 : QT_TRANSLATE_NOOP("global/pitchName", "C3"),
120 : QT_TRANSLATE_NOOP("global/pitchName", "C♯3"),
121 : QT_TRANSLATE_NOOP("global/pitchName", "D♭3"),
122 : QT_TRANSLATE_NOOP("global/pitchName", "D3"),
123 : QT_TRANSLATE_NOOP("global/pitchName", "D♯3"),
124 : QT_TRANSLATE_NOOP("global/pitchName", "E♭3"),
125 : QT_TRANSLATE_NOOP("global/pitchName", "E3"),
126 : QT_TRANSLATE_NOOP("global/pitchName", "E♯3"),
127 : QT_TRANSLATE_NOOP("global/pitchName", "F♭3"),
128 : QT_TRANSLATE_NOOP("global/pitchName", "F3"),
129 : QT_TRANSLATE_NOOP("global/pitchName", "F♯3"),
130 : QT_TRANSLATE_NOOP("global/pitchName", "G♭3"),
131 : QT_TRANSLATE_NOOP("global/pitchName", "G3"),
132 : QT_TRANSLATE_NOOP("global/pitchName", "G♯3"),
133 : QT_TRANSLATE_NOOP("global/pitchName", "A♭3"),
134 : QT_TRANSLATE_NOOP("global/pitchName", "A3"),
135 : QT_TRANSLATE_NOOP("global/pitchName", "A♯3"),
136 : QT_TRANSLATE_NOOP("global/pitchName", "B♭3"),
137 : QT_TRANSLATE_NOOP("global/pitchName", "B3"),
138 : QT_TRANSLATE_NOOP("global/pitchName", "B♯3"),
139 : // octave 4
140 : QT_TRANSLATE_NOOP("global/pitchName", "C♭4"),
141 : QT_TRANSLATE_NOOP("global/pitchName", "C4"),
142 : QT_TRANSLATE_NOOP("global/pitchName", "C♯4"),
143 : QT_TRANSLATE_NOOP("global/pitchName", "D♭4"),
144 : QT_TRANSLATE_NOOP("global/pitchName", "D4"),
145 : QT_TRANSLATE_NOOP("global/pitchName", "D♯4"),
146 : QT_TRANSLATE_NOOP("global/pitchName", "E♭4"),
147 : QT_TRANSLATE_NOOP("global/pitchName", "E4"),
148 : QT_TRANSLATE_NOOP("global/pitchName", "E♯4"),
149 : QT_TRANSLATE_NOOP("global/pitchName", "F♭4"),
150 : QT_TRANSLATE_NOOP("global/pitchName", "F4"),
151 : QT_TRANSLATE_NOOP("global/pitchName", "F♯4"),
152 : QT_TRANSLATE_NOOP("global/pitchName", "G♭4"),
153 : QT_TRANSLATE_NOOP("global/pitchName", "G4"),
154 : QT_TRANSLATE_NOOP("global/pitchName", "G♯4"),
155 : QT_TRANSLATE_NOOP("global/pitchName", "A♭4"),
156 : QT_TRANSLATE_NOOP("global/pitchName", "A4"),
157 : QT_TRANSLATE_NOOP("global/pitchName", "A♯4"),
158 : QT_TRANSLATE_NOOP("global/pitchName", "B♭4"),
159 : QT_TRANSLATE_NOOP("global/pitchName", "B4"),
160 : QT_TRANSLATE_NOOP("global/pitchName", "B♯4"),
161 : // octave 5
162 : QT_TRANSLATE_NOOP("global/pitchName", "C♭5"),
163 : QT_TRANSLATE_NOOP("global/pitchName", "C5"),
164 : QT_TRANSLATE_NOOP("global/pitchName", "C♯5"),
165 : QT_TRANSLATE_NOOP("global/pitchName", "D♭5"),
166 : QT_TRANSLATE_NOOP("global/pitchName", "D5"),
167 : QT_TRANSLATE_NOOP("global/pitchName", "D♯5"),
168 : QT_TRANSLATE_NOOP("global/pitchName", "E♭5"),
169 : QT_TRANSLATE_NOOP("global/pitchName", "E5"),
170 : QT_TRANSLATE_NOOP("global/pitchName", "E♯5"),
171 : QT_TRANSLATE_NOOP("global/pitchName", "F♭5"),
172 : QT_TRANSLATE_NOOP("global/pitchName", "F5"),
173 : QT_TRANSLATE_NOOP("global/pitchName", "F♯5"),
174 : QT_TRANSLATE_NOOP("global/pitchName", "G♭5"),
175 : QT_TRANSLATE_NOOP("global/pitchName", "G5"),
176 : QT_TRANSLATE_NOOP("global/pitchName", "G♯5"),
177 : QT_TRANSLATE_NOOP("global/pitchName", "A♭5"),
178 : QT_TRANSLATE_NOOP("global/pitchName", "A5"),
179 : QT_TRANSLATE_NOOP("global/pitchName", "A♯5"),
180 : QT_TRANSLATE_NOOP("global/pitchName", "B♭5"),
181 : QT_TRANSLATE_NOOP("global/pitchName", "B5"),
182 : QT_TRANSLATE_NOOP("global/pitchName", "B♯5"),
183 : // octave 6
184 : QT_TRANSLATE_NOOP("global/pitchName", "C♭6"),
185 : QT_TRANSLATE_NOOP("global/pitchName", "C6"),
186 : QT_TRANSLATE_NOOP("global/pitchName", "C♯6"),
187 : QT_TRANSLATE_NOOP("global/pitchName", "D♭6"),
188 : QT_TRANSLATE_NOOP("global/pitchName", "D6"),
189 : QT_TRANSLATE_NOOP("global/pitchName", "D♯6"),
190 : QT_TRANSLATE_NOOP("global/pitchName", "E♭6"),
191 : QT_TRANSLATE_NOOP("global/pitchName", "E6"),
192 : QT_TRANSLATE_NOOP("global/pitchName", "E♯6"),
193 : QT_TRANSLATE_NOOP("global/pitchName", "F♭6"),
194 : QT_TRANSLATE_NOOP("global/pitchName", "F6"),
195 : QT_TRANSLATE_NOOP("global/pitchName", "F♯6"),
196 : QT_TRANSLATE_NOOP("global/pitchName", "G♭6"),
197 : QT_TRANSLATE_NOOP("global/pitchName", "G6"),
198 : QT_TRANSLATE_NOOP("global/pitchName", "G♯6"),
199 : QT_TRANSLATE_NOOP("global/pitchName", "A♭6"),
200 : QT_TRANSLATE_NOOP("global/pitchName", "A6"),
201 : QT_TRANSLATE_NOOP("global/pitchName", "A♯6"),
202 : QT_TRANSLATE_NOOP("global/pitchName", "B♭6"),
203 : QT_TRANSLATE_NOOP("global/pitchName", "B6"),
204 : QT_TRANSLATE_NOOP("global/pitchName", "B♯6"),
205 : // octave 7
206 : QT_TRANSLATE_NOOP("global/pitchName", "C♭7"),
207 : QT_TRANSLATE_NOOP("global/pitchName", "C7"),
208 : QT_TRANSLATE_NOOP("global/pitchName", "C♯7"),
209 : QT_TRANSLATE_NOOP("global/pitchName", "D♭7"),
210 : QT_TRANSLATE_NOOP("global/pitchName", "D7"),
211 : QT_TRANSLATE_NOOP("global/pitchName", "D♯7"),
212 : QT_TRANSLATE_NOOP("global/pitchName", "E♭7"),
213 : QT_TRANSLATE_NOOP("global/pitchName", "E7"),
214 : QT_TRANSLATE_NOOP("global/pitchName", "E♯7"),
215 : QT_TRANSLATE_NOOP("global/pitchName", "F♭7"),
216 : QT_TRANSLATE_NOOP("global/pitchName", "F7"),
217 : QT_TRANSLATE_NOOP("global/pitchName", "F♯7"),
218 : QT_TRANSLATE_NOOP("global/pitchName", "G♭7"),
219 : QT_TRANSLATE_NOOP("global/pitchName", "G7"),
220 : QT_TRANSLATE_NOOP("global/pitchName", "G♯7"),
221 : QT_TRANSLATE_NOOP("global/pitchName", "A♭7"),
222 : QT_TRANSLATE_NOOP("global/pitchName", "A7"),
223 : QT_TRANSLATE_NOOP("global/pitchName", "A♯7"),
224 : QT_TRANSLATE_NOOP("global/pitchName", "B♭7"),
225 : QT_TRANSLATE_NOOP("global/pitchName", "B7"),
226 : QT_TRANSLATE_NOOP("global/pitchName", "B♯7"),
227 : // octave 8
228 : QT_TRANSLATE_NOOP("global/pitchName", "C♭8"),
229 : QT_TRANSLATE_NOOP("global/pitchName", "C8"),
230 : QT_TRANSLATE_NOOP("global/pitchName", "C♯8"),
231 : QT_TRANSLATE_NOOP("global/pitchName", "D♭8"),
232 : QT_TRANSLATE_NOOP("global/pitchName", "D8"),
233 : QT_TRANSLATE_NOOP("global/pitchName", "D♯8"),
234 : QT_TRANSLATE_NOOP("global/pitchName", "E♭8"),
235 : QT_TRANSLATE_NOOP("global/pitchName", "E8"),
236 : QT_TRANSLATE_NOOP("global/pitchName", "E♯8"),
237 : QT_TRANSLATE_NOOP("global/pitchName", "F♭8"),
238 : QT_TRANSLATE_NOOP("global/pitchName", "F8"),
239 : QT_TRANSLATE_NOOP("global/pitchName", "F♯8"),
240 : QT_TRANSLATE_NOOP("global/pitchName", "G♭8"),
241 : QT_TRANSLATE_NOOP("global/pitchName", "G8"),
242 : QT_TRANSLATE_NOOP("global/pitchName", "G♯8"),
243 : QT_TRANSLATE_NOOP("global/pitchName", "A♭8"),
244 : QT_TRANSLATE_NOOP("global/pitchName", "A8"),
245 : QT_TRANSLATE_NOOP("global/pitchName", "A♯8"),
246 : QT_TRANSLATE_NOOP("global/pitchName", "B♭8"),
247 : QT_TRANSLATE_NOOP("global/pitchName", "B8"),
248 : QT_TRANSLATE_NOOP("global/pitchName", "B♯8"),
249 : // octave 9
250 : QT_TRANSLATE_NOOP("global/pitchName", "C♭9"),
251 : QT_TRANSLATE_NOOP("global/pitchName", "C9"),
252 : QT_TRANSLATE_NOOP("global/pitchName", "C♯9"),
253 : QT_TRANSLATE_NOOP("global/pitchName", "D♭9"),
254 : QT_TRANSLATE_NOOP("global/pitchName", "D9"),
255 : QT_TRANSLATE_NOOP("global/pitchName", "D♯9"),
256 : QT_TRANSLATE_NOOP("global/pitchName", "E♭9"),
257 : QT_TRANSLATE_NOOP("global/pitchName", "E9"),
258 : QT_TRANSLATE_NOOP("global/pitchName", "E♯9"),
259 : QT_TRANSLATE_NOOP("global/pitchName", "F♭9"),
260 : QT_TRANSLATE_NOOP("global/pitchName", "F9"),
261 : QT_TRANSLATE_NOOP("global/pitchName", "F♯9"),
262 : QT_TRANSLATE_NOOP("global/pitchName", "G♭9"),
263 : QT_TRANSLATE_NOOP("global/pitchName", "G9"),
264 : };
265 :
266 : static constexpr const char* sharpNotes[] = {
267 : QT_TRANSLATE_NOOP("global/noteName", "C"),
268 : QT_TRANSLATE_NOOP("global/noteName", "C♯"),
269 : QT_TRANSLATE_NOOP("global/noteName", "D"),
270 : QT_TRANSLATE_NOOP("global/noteName", "D♯"),
271 : QT_TRANSLATE_NOOP("global/noteName", "E"),
272 : QT_TRANSLATE_NOOP("global/noteName", "F"),
273 : QT_TRANSLATE_NOOP("global/noteName", "F♯"),
274 : QT_TRANSLATE_NOOP("global/noteName", "G"),
275 : QT_TRANSLATE_NOOP("global/noteName", "G♯"),
276 : QT_TRANSLATE_NOOP("global/noteName", "A"),
277 : QT_TRANSLATE_NOOP("global/noteName", "A♯"),
278 : QT_TRANSLATE_NOOP("global/noteName", "B")
279 : };
280 :
281 : static constexpr const char* flatNotes[] = {
282 : QT_TRANSLATE_NOOP("global/noteName", "C"),
283 : QT_TRANSLATE_NOOP("global/noteName", "D♭"),
284 : QT_TRANSLATE_NOOP("global/noteName", "D"),
285 : QT_TRANSLATE_NOOP("global/noteName", "E♭"),
286 : QT_TRANSLATE_NOOP("global/noteName", "E"),
287 : QT_TRANSLATE_NOOP("global/noteName", "F"),
288 : QT_TRANSLATE_NOOP("global/noteName", "G♭"),
289 : QT_TRANSLATE_NOOP("global/noteName", "G"),
290 : QT_TRANSLATE_NOOP("global/noteName", "A♭"),
291 : QT_TRANSLATE_NOOP("global/noteName", "A"),
292 : QT_TRANSLATE_NOOP("global/noteName", "B♭"),
293 : QT_TRANSLATE_NOOP("global/noteName", "B")
294 : };
295 :
296 0 : std::string muse::pitchToString(int pitch, bool addoctave, bool useFlats /* = false */)
297 : {
298 0 : if (pitch < 0 || pitch > 127) {
299 0 : return std::string();
300 : }
301 :
302 0 : auto source = useFlats ? flatNotes : sharpNotes;
303 :
304 0 : int i = pitch % 12;
305 0 : if (addoctave) {
306 0 : int octave = (pitch / 12) - 1;
307 0 : std::string key = std::string(source[i]) + std::to_string(octave);
308 0 : return muse::trc("global/pitchName", key.c_str());
309 0 : }
310 0 : return muse::trc("global/noteName", source[i]);
311 : }
|