Skip to content

Commit 542c7c9

Browse files
committed
Implement level as BlockInput.
1 parent 5602618 commit 542c7c9

File tree

5 files changed

+18
-14
lines changed

5 files changed

+18
-14
lines changed

shared-bindings/audiomixer/MixerVoice.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "py/objproperty.h"
1414
#include "py/runtime.h"
1515
#include "shared-bindings/util.h"
16+
#include "shared-module/synthio/block.h"
1617

1718
//| class MixerVoice:
1819
//| """Voice objects used with Mixer
@@ -75,17 +76,16 @@ static mp_obj_t audiomixer_mixervoice_obj_stop(size_t n_args, const mp_obj_t *po
7576
}
7677
MP_DEFINE_CONST_FUN_OBJ_KW(audiomixer_mixervoice_stop_obj, 1, audiomixer_mixervoice_obj_stop);
7778

78-
//| level: float
79+
//| level: synthio.BlockInput
7980
//| """The volume level of a voice, as a floating point number between 0 and 1."""
8081
static mp_obj_t audiomixer_mixervoice_obj_get_level(mp_obj_t self_in) {
81-
return mp_obj_new_float(common_hal_audiomixer_mixervoice_get_level(self_in));
82+
return common_hal_audiomixer_mixervoice_get_level(self_in);
8283
}
8384
MP_DEFINE_CONST_FUN_OBJ_1(audiomixer_mixervoice_get_level_obj, audiomixer_mixervoice_obj_get_level);
8485

8586
static mp_obj_t audiomixer_mixervoice_obj_set_level(mp_obj_t self_in, mp_obj_t level_in) {
8687
audiomixer_mixervoice_obj_t *self = MP_OBJ_TO_PTR(self_in);
87-
mp_float_t level = mp_arg_validate_obj_float_range(level_in, 0, 1, MP_QSTR_level);
88-
common_hal_audiomixer_mixervoice_set_level(self, level);
88+
common_hal_audiomixer_mixervoice_set_level(self, level_in);
8989
return mp_const_none;
9090
}
9191
MP_DEFINE_CONST_FUN_OBJ_2(audiomixer_mixervoice_set_level_obj, audiomixer_mixervoice_obj_set_level);

shared-bindings/audiomixer/MixerVoice.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ void common_hal_audiomixer_mixervoice_construct(audiomixer_mixervoice_obj_t *sel
1515
void common_hal_audiomixer_mixervoice_set_parent(audiomixer_mixervoice_obj_t *self, audiomixer_mixer_obj_t *parent);
1616
void common_hal_audiomixer_mixervoice_play(audiomixer_mixervoice_obj_t *self, mp_obj_t sample, bool loop);
1717
void common_hal_audiomixer_mixervoice_stop(audiomixer_mixervoice_obj_t *self);
18-
mp_float_t common_hal_audiomixer_mixervoice_get_level(audiomixer_mixervoice_obj_t *self);
19-
void common_hal_audiomixer_mixervoice_set_level(audiomixer_mixervoice_obj_t *self, mp_float_t gain);
18+
mp_obj_t common_hal_audiomixer_mixervoice_get_level(audiomixer_mixervoice_obj_t *self);
19+
void common_hal_audiomixer_mixervoice_set_level(audiomixer_mixervoice_obj_t *self, mp_obj_t gain);
2020

2121
bool common_hal_audiomixer_mixervoice_get_playing(audiomixer_mixervoice_obj_t *self);
2222

shared-module/audiomixer/Mixer.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,9 +188,12 @@ static void mix_down_one_voice(audiomixer_mixer_obj_t *self,
188188
}
189189
}
190190

191-
uint32_t n = MIN(voice->buffer_length, length);
191+
uint32_t n = MIN(MIN(voice->buffer_length, length), SYNTHIO_MAX_DUR * self->channel_count);
192192
uint32_t *src = voice->remaining_buffer;
193-
uint16_t level = voice->level;
193+
194+
// Get the current level from the BlockInput. These may change at run time so you need to do bounds checking if required.
195+
shared_bindings_synthio_lfo_tick(self->sample_rate); //, n / self->channel_count); // Requires #9776
196+
uint16_t level = (uint16_t)(synthio_block_slot_get_limited(&voice->level, MICROPY_FLOAT_CONST(0.0), MICROPY_FLOAT_CONST(1.0)) * (1 << 15));
194197

195198
// First active voice gets copied over verbatim.
196199
if (!voices_active) {

shared-module/audiomixer/MixerVoice.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@
1515

1616
void common_hal_audiomixer_mixervoice_construct(audiomixer_mixervoice_obj_t *self) {
1717
self->sample = NULL;
18-
self->level = 1 << 15;
18+
common_hal_audiomixer_mixervoice_set_level(self, mp_obj_new_float(1.0));
1919
}
2020

2121
void common_hal_audiomixer_mixervoice_set_parent(audiomixer_mixervoice_obj_t *self, audiomixer_mixer_obj_t *parent) {
2222
self->parent = parent;
2323
}
2424

25-
mp_float_t common_hal_audiomixer_mixervoice_get_level(audiomixer_mixervoice_obj_t *self) {
26-
return (mp_float_t)self->level / (1 << 15);
25+
mp_obj_t common_hal_audiomixer_mixervoice_get_level(audiomixer_mixervoice_obj_t *self) {
26+
return self->level.obj;
2727
}
2828

29-
void common_hal_audiomixer_mixervoice_set_level(audiomixer_mixervoice_obj_t *self, mp_float_t level) {
30-
self->level = (uint16_t)(level * (1 << 15));
29+
void common_hal_audiomixer_mixervoice_set_level(audiomixer_mixervoice_obj_t *self, mp_obj_t arg) {
30+
synthio_block_assign_slot(arg, &self->level, MP_QSTR_level);
3131
}
3232

3333
bool common_hal_audiomixer_mixervoice_get_loop(audiomixer_mixervoice_obj_t *self) {

shared-module/audiomixer/MixerVoice.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include "shared-module/audiomixer/__init__.h"
1111
#include "shared-module/audiomixer/Mixer.h"
12+
#include "shared-module/synthio/block.h"
1213

1314
typedef struct {
1415
mp_obj_base_t base;
@@ -18,5 +19,5 @@ typedef struct {
1819
bool more_data;
1920
uint32_t *remaining_buffer;
2021
uint32_t buffer_length;
21-
uint16_t level;
22+
synthio_block_slot_t level;
2223
} audiomixer_mixervoice_obj_t;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy