summaryrefslogtreecommitdiff
path: root/shared-bindings/audiocore
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2019-12-04 09:31:52 -0600
committerJeff Epler <jepler@gmail.com>2019-12-04 09:31:52 -0600
commitfeb8eb935bd69ce855533bf9a4316e3025602c1a (patch)
treee116a3f90994fd23c15d4c109839d7e09a431adf /shared-bindings/audiocore
parent238e12123690debaf2cf8488fb2a4d4003a06506 (diff)
audiosample: convert to use a protocol
This eases addition of new sample sources, since the manual virtual function dispatch functions are just calls via a protocol
Diffstat (limited to 'shared-bindings/audiocore')
-rw-r--r--shared-bindings/audiocore/RawSample.c11
-rw-r--r--shared-bindings/audiocore/RawSample.h2
-rw-r--r--shared-bindings/audiocore/WaveFile.c12
3 files changed, 25 insertions, 0 deletions
diff --git a/shared-bindings/audiocore/RawSample.c b/shared-bindings/audiocore/RawSample.c
index 07f8c683f..87d410ea1 100644
--- a/shared-bindings/audiocore/RawSample.c
+++ b/shared-bindings/audiocore/RawSample.c
@@ -180,9 +180,20 @@ STATIC const mp_rom_map_elem_t audioio_rawsample_locals_dict_table[] = {
};
STATIC MP_DEFINE_CONST_DICT(audioio_rawsample_locals_dict, audioio_rawsample_locals_dict_table);
+STATIC const audiosample_p_t audioio_rawsample_proto = {
+ MP_PROTO_IMPLEMENT(MP_QSTR_protocol_audiosample)
+ .sample_rate = (audiosample_sample_rate_fun)common_hal_audioio_rawsample_get_sample_rate,
+ .bits_per_sample = (audiosample_bits_per_sample_fun)common_hal_audioio_rawsample_get_bits_per_sample,
+ .channel_count = (audiosample_channel_count_fun)common_hal_audioio_rawsample_get_channel_count,
+ .reset_buffer = (audiosample_reset_buffer_fun)audioio_rawsample_reset_buffer,
+ .get_buffer = (audiosample_get_buffer_fun)audioio_rawsample_get_buffer,
+ .get_buffer_structure = (audiosample_get_buffer_structure_fun)audioio_rawsample_get_buffer_structure,
+};
+
const mp_obj_type_t audioio_rawsample_type = {
{ &mp_type_type },
.name = MP_QSTR_RawSample,
.make_new = audioio_rawsample_make_new,
.locals_dict = (mp_obj_dict_t*)&audioio_rawsample_locals_dict,
+ .protocol = &audioio_rawsample_proto,
};
diff --git a/shared-bindings/audiocore/RawSample.h b/shared-bindings/audiocore/RawSample.h
index b02778cad..61f61a066 100644
--- a/shared-bindings/audiocore/RawSample.h
+++ b/shared-bindings/audiocore/RawSample.h
@@ -39,6 +39,8 @@ void common_hal_audioio_rawsample_construct(audioio_rawsample_obj_t* self,
void common_hal_audioio_rawsample_deinit(audioio_rawsample_obj_t* self);
bool common_hal_audioio_rawsample_deinited(audioio_rawsample_obj_t* self);
uint32_t common_hal_audioio_rawsample_get_sample_rate(audioio_rawsample_obj_t* self);
+uint8_t common_hal_audioio_rawsample_get_bits_per_sample(audioio_rawsample_obj_t* self);
+uint8_t common_hal_audioio_rawsample_get_channel_count(audioio_rawsample_obj_t* self);
void common_hal_audioio_rawsample_set_sample_rate(audioio_rawsample_obj_t* self, uint32_t sample_rate);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_RAWSAMPLE_H
diff --git a/shared-bindings/audiocore/WaveFile.c b/shared-bindings/audiocore/WaveFile.c
index 1b3a94ff3..178d2a139 100644
--- a/shared-bindings/audiocore/WaveFile.c
+++ b/shared-bindings/audiocore/WaveFile.c
@@ -206,9 +206,21 @@ STATIC const mp_rom_map_elem_t audioio_wavefile_locals_dict_table[] = {
};
STATIC MP_DEFINE_CONST_DICT(audioio_wavefile_locals_dict, audioio_wavefile_locals_dict_table);
+STATIC const audiosample_p_t audioio_wavefile_proto = {
+ MP_PROTO_IMPLEMENT(MP_QSTR_protocol_audiosample)
+ .sample_rate = (audiosample_sample_rate_fun)common_hal_audioio_wavefile_get_sample_rate,
+ .bits_per_sample = (audiosample_bits_per_sample_fun)common_hal_audioio_wavefile_get_bits_per_sample,
+ .channel_count = (audiosample_channel_count_fun)common_hal_audioio_wavefile_get_channel_count,
+ .reset_buffer = (audiosample_reset_buffer_fun)audioio_wavefile_reset_buffer,
+ .get_buffer = (audiosample_get_buffer_fun)audioio_wavefile_get_buffer,
+ .get_buffer_structure = (audiosample_get_buffer_structure_fun)audioio_wavefile_get_buffer_structure,
+};
+
+
const mp_obj_type_t audioio_wavefile_type = {
{ &mp_type_type },
.name = MP_QSTR_WaveFile,
.make_new = audioio_wavefile_make_new,
.locals_dict = (mp_obj_dict_t*)&audioio_wavefile_locals_dict,
+ .protocol = &audioio_wavefile_proto,
};