Skip to content

Commit 712550c

Browse files
authored
Merge pull request #10567 from relic-se/miditrack-tempo
Add `synthio.MidiTrack.tempo` property
2 parents 65cfcb8 + 57c9797 commit 712550c

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

shared-bindings/synthio/MidiTrack.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,27 @@ static void check_for_deinit(synthio_miditrack_obj_t *self) {
115115
//| """32 bit value that tells how quickly samples are played in Hertz (cycles per second)."""
116116
//|
117117

118+
//| tempo: int
119+
//| """Tempo of the streamed events, in MIDI ticks per second."""
120+
//|
121+
static mp_obj_t synthio_miditrack_obj_get_tempo(mp_obj_t self_in) {
122+
synthio_miditrack_obj_t *self = MP_OBJ_TO_PTR(self_in);
123+
check_for_deinit(self);
124+
return mp_obj_new_int(common_hal_synthio_miditrack_get_tempo(self));
125+
}
126+
MP_DEFINE_CONST_FUN_OBJ_1(synthio_miditrack_get_tempo_obj, synthio_miditrack_obj_get_tempo);
127+
128+
static mp_obj_t synthio_miditrack_obj_set_tempo(mp_obj_t self_in, mp_obj_t arg) {
129+
synthio_miditrack_obj_t *self = MP_OBJ_TO_PTR(self_in);
130+
check_for_deinit(self);
131+
common_hal_synthio_miditrack_set_tempo(self, mp_obj_get_int(arg));
132+
return mp_const_none;
133+
}
134+
MP_DEFINE_CONST_FUN_OBJ_2(synthio_miditrack_set_tempo_obj, synthio_miditrack_obj_set_tempo);
135+
MP_PROPERTY_GETSET(synthio_miditrack_tempo_obj,
136+
(mp_obj_t)&synthio_miditrack_get_tempo_obj,
137+
(mp_obj_t)&synthio_miditrack_set_tempo_obj);
138+
118139
//| error_location: Optional[int]
119140
//| """Offset, in bytes within the midi data, of a decoding error"""
120141
//|
@@ -141,6 +162,7 @@ static const mp_rom_map_elem_t synthio_miditrack_locals_dict_table[] = {
141162

142163
// Properties
143164
{ MP_ROM_QSTR(MP_QSTR_error_location), MP_ROM_PTR(&synthio_miditrack_error_location_obj) },
165+
{ MP_ROM_QSTR(MP_QSTR_tempo), MP_ROM_PTR(&synthio_miditrack_tempo_obj) },
144166
AUDIOSAMPLE_FIELDS,
145167
};
146168
static MP_DEFINE_CONST_DICT(synthio_miditrack_locals_dict, synthio_miditrack_locals_dict_table);

shared-bindings/synthio/MidiTrack.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,6 @@ void common_hal_synthio_miditrack_construct(synthio_miditrack_obj_t *self, const
1515

1616
void common_hal_synthio_miditrack_deinit(synthio_miditrack_obj_t *self);
1717
mp_int_t common_hal_synthio_miditrack_get_error_location(synthio_miditrack_obj_t *self);
18+
19+
mp_int_t common_hal_synthio_miditrack_get_tempo(synthio_miditrack_obj_t *self);
20+
void common_hal_synthio_miditrack_set_tempo(synthio_miditrack_obj_t *self, mp_int_t value);

shared-module/synthio/MidiTrack.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,15 @@ mp_int_t common_hal_synthio_miditrack_get_error_location(synthio_miditrack_obj_t
116116
return self->error_location;
117117
}
118118

119+
mp_int_t common_hal_synthio_miditrack_get_tempo(synthio_miditrack_obj_t *self) {
120+
return self->tempo;
121+
}
122+
123+
void common_hal_synthio_miditrack_set_tempo(synthio_miditrack_obj_t *self, mp_int_t value) {
124+
mp_int_t val = mp_arg_validate_int_min(value, 1, MP_QSTR_tempo);
125+
self->tempo = val;
126+
}
127+
119128
void synthio_miditrack_reset_buffer(synthio_miditrack_obj_t *self,
120129
bool single_channel_output, uint8_t channel) {
121130
synthio_synth_reset_buffer(&self->synth, single_channel_output, channel);

0 commit comments

Comments
 (0)