]> git.cworth.org Git - scherzo/blob - scherzo-key.h
Fix high octave numbers (8+) to not be interpreted as 0.
[scherzo] / scherzo-key.h
1 /* scherzo - Music notation training
2  *
3  *      key.h - Common structures and functions for keys
4  *
5  * Copyright © 2013 Carl Worth
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program.  If not, see http://www.gnu.org/licenses/ .
19  */
20
21 #include <stdbool.h>
22
23 #ifndef SCHERZO_KEY_H
24 #define SCHERZO_KEY_H
25
26 #include "pitch.h"
27
28 typedef struct scherzo_key
29 {
30     /* Pitch class (diatonic) */
31     pitch_t pitch;
32
33     /* Number of sharps/flats in key (if any) */
34     int num_sharps;
35     int num_flats;
36 } scherzo_key_t;
37
38 void
39 scherzo_key_init (scherzo_key_t *key, pitch_t pitch);
40
41 /* Return true if 'pitch' is within the key as spelled.
42  *
43  * For example, a PITCH(A, SHARP) is not considered as contained
44  * within the key of PITCH(B, FLAT).
45  */
46 bool
47 scherzo_key_contains_pitch (scherzo_key_t *key, pitch_t pitch);
48
49 /* For a pitch that is enharmonic with a pitch within 'key', return
50  * the key's spelling of that pitch.
51  *
52  * Otherwise, return the pitch unmodified.
53  */
54 pitch_t
55 scherzo_key_spell_pitch (scherzo_key_t *key, pitch_t pitch);
56
57 #endif /* KEY_H */