(note: string)
| 175 | } |
| 176 | |
| 177 | public static getToneForText(note: string): TuningParseResultTone | null { |
| 178 | const noteName = note.substring(0, 1); |
| 179 | const accidental = note.substring(1); |
| 180 | |
| 181 | let noteValue: number; |
| 182 | let noteAccidenalMode: NoteAccidentalMode; |
| 183 | |
| 184 | switch (noteName.toLowerCase()) { |
| 185 | case 'c': |
| 186 | noteValue = 0; |
| 187 | break; |
| 188 | case 'd': |
| 189 | noteValue = 2; |
| 190 | break; |
| 191 | case 'e': |
| 192 | noteValue = 4; |
| 193 | break; |
| 194 | case 'f': |
| 195 | noteValue = 5; |
| 196 | break; |
| 197 | case 'g': |
| 198 | noteValue = 7; |
| 199 | break; |
| 200 | case 'a': |
| 201 | noteValue = 9; |
| 202 | break; |
| 203 | case 'b': |
| 204 | noteValue = 11; |
| 205 | break; |
| 206 | default: |
| 207 | return null; |
| 208 | } |
| 209 | |
| 210 | if (!ModelUtils.accidentalModeMapping.has(accidental)) { |
| 211 | return null; |
| 212 | } |
| 213 | |
| 214 | noteAccidenalMode = ModelUtils.parseAccidentalMode(accidental); |
| 215 | switch (noteAccidenalMode) { |
| 216 | case NoteAccidentalMode.Default: |
| 217 | break; |
| 218 | case NoteAccidentalMode.ForceNone: |
| 219 | break; |
| 220 | case NoteAccidentalMode.ForceNatural: |
| 221 | break; |
| 222 | case NoteAccidentalMode.ForceSharp: |
| 223 | noteValue++; |
| 224 | break; |
| 225 | case NoteAccidentalMode.ForceDoubleSharp: |
| 226 | noteValue += 2; |
| 227 | break; |
| 228 | case NoteAccidentalMode.ForceFlat: |
| 229 | noteValue--; |
| 230 | break; |
| 231 | case NoteAccidentalMode.ForceDoubleFlat: |
| 232 | noteValue -= 2; |
| 233 | break; |
| 234 | } |
no test coverage detected