Skip to content

Commit 72daefe

Browse files
committed
json interval normalization
1 parent db65905 commit 72daefe

File tree

7 files changed

+58
-52
lines changed

7 files changed

+58
-52
lines changed

examples/chord_1_pitched_notes.png

67 Bytes
Loading

examples/chord_2_pitched_notes.png

-313 Bytes
Loading

examples/chord_3_pitched_notes.png

65 Bytes
Loading

examples/chords.png

158 Bytes
Loading

examples/simple.json

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,28 @@
66
{},
77
{
88
"interval": {
9-
"denominator": 4,
10-
"numerator": 5
9+
"numerator": 5,
10+
"octave": -2
1111
}
1212
},
1313
{
1414
"interval": {
15-
"denominator": 2,
16-
"numerator": 3
15+
"numerator": 3,
16+
"octave": -1
1717
}
1818
}
1919
]
2020
},
2121
{
2222
"interval": {
2323
"denominator": 3,
24-
"numerator": 2
24+
"octave": 1
2525
},
2626
"pitched_notes": [
2727
{
2828
"interval": {
29-
"denominator": 2,
30-
"numerator": 3
29+
"numerator": 3,
30+
"octave": -1
3131
}
3232
},
3333
{
@@ -37,30 +37,29 @@
3737
},
3838
{
3939
"interval": {
40-
"denominator": 4,
4140
"numerator": 5,
42-
"octave": 1
41+
"octave": -1
4342
}
4443
}
4544
]
4645
},
4746
{
4847
"interval": {
49-
"denominator": 2,
50-
"numerator": 3
48+
"numerator": 3,
49+
"octave": -1
5150
},
5251
"pitched_notes": [
5352
{},
5453
{
5554
"interval": {
56-
"denominator": 4,
57-
"numerator": 5
55+
"numerator": 5,
56+
"octave": -2
5857
}
5958
},
6059
{
6160
"interval": {
62-
"denominator": 2,
63-
"numerator": 3
61+
"numerator": 3,
62+
"octave": -1
6463
}
6564
}
6665
]

src/justly.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,18 @@ struct Rational : public AbstractRational {
672672

673673
Q_DECLARE_METATYPE(Rational);
674674

675+
[[nodiscard]] static auto shift_octave(AbstractRational &rational, int octave) -> int {
676+
while (rational.numerator % 2 == 0) {
677+
rational.numerator = rational.numerator / 2;
678+
octave = octave + 1;
679+
}
680+
while (rational.denominator % 2 == 0) {
681+
rational.denominator = rational.denominator / 2;
682+
octave = octave - 1;
683+
}
684+
return octave;
685+
}
686+
675687
struct Interval : public AbstractRational {
676688
int octave = 0;
677689

@@ -681,19 +693,14 @@ struct Interval : public AbstractRational {
681693
const int octave_input)
682694
: AbstractRational(numerator_input, denominator_input),
683695
octave(octave_input) {
684-
while (numerator % 2 == 0) {
685-
numerator = numerator / 2;
686-
octave = octave + 1;
687-
}
688-
while (denominator % 2 == 0) {
689-
denominator = denominator / 2;
690-
octave = octave - 1;
691-
}
696+
octave = shift_octave(*this, octave);
692697
}
693698

694699
explicit Interval(const nlohmann::json &json_rational)
695700
: AbstractRational(json_rational),
696-
octave(json_rational.value("octave", 0)) {}
701+
octave(json_rational.value("octave", 0)) {
702+
octave = shift_octave(*this, octave);
703+
}
697704

698705
[[nodiscard]] auto operator==(const Interval &other_interval) const {
699706
return AbstractRational::operator==(other_interval) &&

tests/test.cpp

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -96,28 +96,28 @@ static const auto SONG_TEXT = R""""({
9696
},
9797
{
9898
"beats": {
99-
"denominator": 2
99+
"denominator": 5
100100
},
101101
"instrument": "Marimba",
102102
"interval": {
103-
"denominator": 2
103+
"denominator": 5
104104
},
105105
"velocity_ratio": {
106-
"denominator": 2
106+
"denominator": 5
107107
}
108108
},
109109
{
110110
"beats": {
111-
"denominator": 2,
111+
"denominator": 5,
112112
"numerator": 3
113113
},
114114
"instrument": "Marimba",
115115
"interval": {
116-
"denominator": 2,
116+
"denominator": 5,
117117
"numerator": 3
118118
},
119119
"velocity_ratio": {
120-
"denominator": 2,
120+
"denominator": 5,
121121
"numerator": 3
122122
}
123123
},
@@ -137,14 +137,14 @@ static const auto SONG_TEXT = R""""({
137137
{
138138
"instrument": "Marimba",
139139
"interval": {
140-
"numerator": 2,
140+
"numerator": 3,
141141
"octave": 1
142142
}
143143
},
144144
{
145145
"instrument": "Marimba",
146146
"interval": {
147-
"denominator": 2,
147+
"denominator": 5,
148148
"numerator": 3,
149149
"octave": 1
150150
}
@@ -168,23 +168,23 @@ static const auto SONG_TEXT = R""""({
168168
},
169169
{
170170
"beats": {
171-
"denominator": 2
171+
"denominator": 5
172172
},
173173
"percussion_instrument": "Tambourine",
174174
"percussion_set": "Standard",
175175
"velocity_ratio": {
176-
"denominator": 2
176+
"denominator": 5
177177
}
178178
},
179179
{
180180
"beats": {
181-
"denominator": 2,
181+
"denominator": 5,
182182
"numerator": 3
183183
},
184184
"percussion_instrument": "Tambourine",
185185
"percussion_set": "Standard",
186186
"velocity_ratio": {
187-
"denominator": 2,
187+
"denominator": 5,
188188
"numerator": 3
189189
}
190190
}
@@ -196,33 +196,33 @@ static const auto SONG_TEXT = R""""({
196196
},
197197
{
198198
"beats": {
199-
"denominator": 2
199+
"denominator": 5
200200
},
201201
"interval": {
202-
"denominator": 2
202+
"denominator": 5
203203
},
204204
"tempo_ratio": {
205-
"denominator": 2
205+
"denominator": 5
206206
},
207207
"velocity_ratio": {
208-
"denominator": 2
208+
"denominator": 5
209209
}
210210
},
211211
{
212212
"beats": {
213-
"denominator": 2,
213+
"denominator": 5,
214214
"numerator": 3
215215
},
216216
"interval": {
217-
"denominator": 2,
217+
"denominator": 5,
218218
"numerator": 3
219219
},
220220
"tempo_ratio": {
221-
"denominator": 2,
221+
"denominator": 5,
222222
"numerator": 3
223223
},
224224
"velocity_ratio": {
225-
"denominator": 2,
225+
"denominator": 5,
226226
"numerator": 3
227227
}
228228
},
@@ -239,13 +239,13 @@ static const auto SONG_TEXT = R""""({
239239
},
240240
{
241241
"interval": {
242-
"denominator": 2,
242+
"denominator": 5,
243243
"octave": 1
244244
}
245245
},
246246
{
247247
"interval": {
248-
"denominator": 2,
248+
"denominator": 5,
249249
"numerator": 3,
250250
"octave": 1
251251
}
@@ -603,16 +603,16 @@ void Tester::run_tests() {
603603
{chords_model.index(0, chord_percussion_instrument_column), ""}),
604604
ToStringRow({chords_model.index(0, chord_interval_column), ""}),
605605
ToStringRow({chords_model.index(1, chord_interval_column), "3"}),
606-
ToStringRow({chords_model.index(2, chord_interval_column), "/2"}),
607-
ToStringRow({chords_model.index(3, chord_interval_column), "3/2"}),
606+
ToStringRow({chords_model.index(2, chord_interval_column), "/5"}),
607+
ToStringRow({chords_model.index(3, chord_interval_column), "3/5"}),
608608
ToStringRow({chords_model.index(4, chord_interval_column), "o1"}),
609609
ToStringRow({chords_model.index(5, chord_interval_column), "3o1"}),
610-
ToStringRow({chords_model.index(6, chord_interval_column), "/2o1"}),
611-
ToStringRow({chords_model.index(7, chord_interval_column), "3/2o1"}),
610+
ToStringRow({chords_model.index(6, chord_interval_column), "/5o1"}),
611+
ToStringRow({chords_model.index(7, chord_interval_column), "3/5o1"}),
612612
ToStringRow({chords_model.index(0, chord_beats_column), ""}),
613613
ToStringRow({chords_model.index(1, chord_beats_column), "3"}),
614-
ToStringRow({chords_model.index(2, chord_beats_column), "/2"}),
615-
ToStringRow({chords_model.index(3, chord_beats_column), "3/2"}),
614+
ToStringRow({chords_model.index(2, chord_beats_column), "/5"}),
615+
ToStringRow({chords_model.index(3, chord_beats_column), "3/5"}),
616616
})) {
617617
QCOMPARE(row.index.data().toString(), row.text);
618618
}

0 commit comments

Comments
 (0)