Skip to content

Commit 8eb1103

Browse files
authored
Merge pull request #9861 from pdw-mb/mixervoice-loop-property
2 parents b481f1f + 413e577 commit 8eb1103

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

shared-bindings/audiomixer/MixerVoice.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,25 @@ MP_PROPERTY_GETSET(audiomixer_mixervoice_level_obj,
9494
(mp_obj_t)&audiomixer_mixervoice_get_level_obj,
9595
(mp_obj_t)&audiomixer_mixervoice_set_level_obj);
9696

97+
//| loop: bool
98+
//| """Get or set the loop status of the currently playing sample."""
99+
static mp_obj_t audiomixer_mixervoice_obj_get_loop(mp_obj_t self_in) {
100+
return mp_obj_new_bool(common_hal_audiomixer_mixervoice_get_loop(self_in));
101+
}
102+
MP_DEFINE_CONST_FUN_OBJ_1(audiomixer_mixervoice_get_loop_obj, audiomixer_mixervoice_obj_get_loop);
103+
104+
static mp_obj_t audiomixer_mixervoice_obj_set_loop(mp_obj_t self_in, mp_obj_t loop_in) {
105+
audiomixer_mixervoice_obj_t *self = MP_OBJ_TO_PTR(self_in);
106+
bool loop = mp_obj_is_true(loop_in);
107+
common_hal_audiomixer_mixervoice_set_loop(self, loop);
108+
return mp_const_none;
109+
}
110+
MP_DEFINE_CONST_FUN_OBJ_2(audiomixer_mixervoice_set_loop_obj, audiomixer_mixervoice_obj_set_loop);
111+
112+
MP_PROPERTY_GETSET(audiomixer_mixervoice_loop_obj,
113+
(mp_obj_t)&audiomixer_mixervoice_get_loop_obj,
114+
(mp_obj_t)&audiomixer_mixervoice_set_loop_obj);
115+
97116
//| playing: bool
98117
//| """True when this voice is being output. (read-only)"""
99118
//|
@@ -117,6 +136,7 @@ static const mp_rom_map_elem_t audiomixer_mixervoice_locals_dict_table[] = {
117136
// Properties
118137
{ MP_ROM_QSTR(MP_QSTR_playing), MP_ROM_PTR(&audiomixer_mixervoice_playing_obj) },
119138
{ MP_ROM_QSTR(MP_QSTR_level), MP_ROM_PTR(&audiomixer_mixervoice_level_obj) },
139+
{ MP_ROM_QSTR(MP_QSTR_loop), MP_ROM_PTR(&audiomixer_mixervoice_loop_obj) },
120140
};
121141
static MP_DEFINE_CONST_DICT(audiomixer_mixervoice_locals_dict, audiomixer_mixervoice_locals_dict_table);
122142

shared-bindings/audiomixer/MixerVoice.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,6 @@ mp_float_t common_hal_audiomixer_mixervoice_get_level(audiomixer_mixervoice_obj_
1919
void common_hal_audiomixer_mixervoice_set_level(audiomixer_mixervoice_obj_t *self, mp_float_t gain);
2020

2121
bool common_hal_audiomixer_mixervoice_get_playing(audiomixer_mixervoice_obj_t *self);
22+
23+
void common_hal_audiomixer_mixervoice_set_loop(audiomixer_mixervoice_obj_t *self, bool loop);
24+
bool common_hal_audiomixer_mixervoice_get_loop(audiomixer_mixervoice_obj_t *self);

shared-module/audiomixer/MixerVoice.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ void common_hal_audiomixer_mixervoice_set_level(audiomixer_mixervoice_obj_t *sel
3030
self->level = (uint16_t)(level * (1 << 15));
3131
}
3232

33+
bool common_hal_audiomixer_mixervoice_get_loop(audiomixer_mixervoice_obj_t *self) {
34+
return self->loop;
35+
}
36+
37+
void common_hal_audiomixer_mixervoice_set_loop(audiomixer_mixervoice_obj_t *self, bool loop) {
38+
self->loop = loop;
39+
}
40+
3341
void common_hal_audiomixer_mixervoice_play(audiomixer_mixervoice_obj_t *self, mp_obj_t sample, bool loop) {
3442
if (audiosample_sample_rate(sample) != self->parent->sample_rate) {
3543
mp_raise_ValueError_varg(MP_ERROR_TEXT("The sample's %q does not match"), MP_QSTR_sample_rate);

0 commit comments

Comments
 (0)