Skip to content

Commit a7406ec

Browse files
committed
Support for opening a file by name in MP3Decoder
1 parent e045415 commit a7406ec

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

locale/circuitpython.pot

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2942,6 +2942,10 @@ msgstr ""
29422942
msgid "file must be a file opened in byte mode"
29432943
msgstr ""
29442944

2945+
#: shared-bindings/audiomp3/MP3Decoder.c
2946+
msgid "file path must be provided as input"
2947+
msgstr ""
2948+
29452949
#: shared-bindings/traceback/__init__.c
29462950
msgid "file write is not available"
29472951
msgstr ""

shared-bindings/audiomp3/MP3Decoder.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,26 @@ STATIC mp_obj_t audiomp3_mp3file_obj_set_file(mp_obj_t self_in, mp_obj_t file) {
172172
}
173173
MP_DEFINE_CONST_FUN_OBJ_2(audiomp3_mp3file_set_file_obj, audiomp3_mp3file_obj_set_file);
174174

175+
//| def open_file(self, str) -> None:
176+
//| """Takes in the name of a mp3 file, opens it, and replaces the old playback file."""
177+
//| ...
178+
//|
179+
STATIC mp_obj_t audiomp3_mp3file_obj_open_file(mp_obj_t self_in, mp_obj_t path) {
180+
audiomp3_mp3file_obj_t *self = MP_OBJ_TO_PTR(self_in);
181+
mp_obj_t file;
182+
check_for_deinit(self);
183+
if (!mp_obj_is_str(path)) {
184+
mp_raise_TypeError(translate("file path must be provided as input"));
185+
}
186+
file = mp_call_function_2(MP_OBJ_FROM_PTR(&mp_builtin_open_obj), path, MP_ROM_QSTR(MP_QSTR_rb));
187+
if (!mp_obj_is_type(file, &mp_type_fileio)) {
188+
mp_raise_TypeError(translate("file must be a file opened in byte mode"));
189+
}
190+
common_hal_audiomp3_mp3file_set_file(self, file);
191+
return mp_const_none;
192+
}
193+
MP_DEFINE_CONST_FUN_OBJ_2(audiomp3_mp3file_open_file_obj, audiomp3_mp3file_obj_open_file);
194+
175195
MP_PROPERTY_GETSET(audiomp3_mp3file_file_obj,
176196
(mp_obj_t)&audiomp3_mp3file_get_file_obj,
177197
(mp_obj_t)&audiomp3_mp3file_set_file_obj);
@@ -256,6 +276,7 @@ MP_PROPERTY_GETTER(audiomp3_mp3file_samples_decoded_obj,
256276

257277
STATIC const mp_rom_map_elem_t audiomp3_mp3file_locals_dict_table[] = {
258278
// Methods
279+
{ MP_ROM_QSTR(MP_QSTR_open_file), MP_ROM_PTR(&audiomp3_mp3file_open_file_obj) },
259280
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&audiomp3_mp3file_deinit_obj) },
260281
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) },
261282
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&audiomp3_mp3file___exit___obj) },

0 commit comments

Comments
 (0)