Skip to content

Add synthio.MidiTrack.tempo property #10567

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions shared-bindings/synthio/MidiTrack.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,27 @@ static void check_for_deinit(synthio_miditrack_obj_t *self) {
//| """32 bit value that tells how quickly samples are played in Hertz (cycles per second)."""
//|

//| tempo: int
//| """Tempo of the streamed events, in MIDI ticks per second."""
//|
static mp_obj_t synthio_miditrack_obj_get_tempo(mp_obj_t self_in) {
synthio_miditrack_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
return mp_obj_new_int(common_hal_synthio_miditrack_get_tempo(self));
}
MP_DEFINE_CONST_FUN_OBJ_1(synthio_miditrack_get_tempo_obj, synthio_miditrack_obj_get_tempo);

static mp_obj_t synthio_miditrack_obj_set_tempo(mp_obj_t self_in, mp_obj_t arg) {
synthio_miditrack_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
common_hal_synthio_miditrack_set_tempo(self, mp_obj_get_int(arg));
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(synthio_miditrack_set_tempo_obj, synthio_miditrack_obj_set_tempo);
MP_PROPERTY_GETSET(synthio_miditrack_tempo_obj,
(mp_obj_t)&synthio_miditrack_get_tempo_obj,
(mp_obj_t)&synthio_miditrack_set_tempo_obj);

//| error_location: Optional[int]
//| """Offset, in bytes within the midi data, of a decoding error"""
//|
Expand All @@ -141,6 +162,7 @@ static const mp_rom_map_elem_t synthio_miditrack_locals_dict_table[] = {

// Properties
{ MP_ROM_QSTR(MP_QSTR_error_location), MP_ROM_PTR(&synthio_miditrack_error_location_obj) },
{ MP_ROM_QSTR(MP_QSTR_tempo), MP_ROM_PTR(&synthio_miditrack_tempo_obj) },
AUDIOSAMPLE_FIELDS,
};
static MP_DEFINE_CONST_DICT(synthio_miditrack_locals_dict, synthio_miditrack_locals_dict_table);
Expand Down
3 changes: 3 additions & 0 deletions shared-bindings/synthio/MidiTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ void common_hal_synthio_miditrack_construct(synthio_miditrack_obj_t *self, const

void common_hal_synthio_miditrack_deinit(synthio_miditrack_obj_t *self);
mp_int_t common_hal_synthio_miditrack_get_error_location(synthio_miditrack_obj_t *self);

mp_int_t common_hal_synthio_miditrack_get_tempo(synthio_miditrack_obj_t *self);
void common_hal_synthio_miditrack_set_tempo(synthio_miditrack_obj_t *self, mp_int_t value);
9 changes: 9 additions & 0 deletions shared-module/synthio/MidiTrack.c
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,15 @@ mp_int_t common_hal_synthio_miditrack_get_error_location(synthio_miditrack_obj_t
return self->error_location;
}

mp_int_t common_hal_synthio_miditrack_get_tempo(synthio_miditrack_obj_t *self) {
return self->tempo;
}

void common_hal_synthio_miditrack_set_tempo(synthio_miditrack_obj_t *self, mp_int_t value) {
mp_int_t val = mp_arg_validate_int_min(value, 1, MP_QSTR_tempo);
self->tempo = val;
}

void synthio_miditrack_reset_buffer(synthio_miditrack_obj_t *self,
bool single_channel_output, uint8_t channel) {
synthio_synth_reset_buffer(&self->synth, single_channel_output, channel);
Expand Down