summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-10-30 10:05:16 -0500
committerJeff Epler <jepler@gmail.com>2020-12-29 14:46:38 -0600
commita7542598a0ce1fbd7722312dd863b1d40b0c2837 (patch)
tree68c59920a804cb616564434d959155baee37deb8 /shared-module
parent2cd377f1a7a91a46d154f4da9dbf50a747da9b41 (diff)
esp32s2: add I2SOut
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/audiocore/__init__.c60
-rw-r--r--shared-module/audiocore/__init__.h8
2 files changed, 68 insertions, 0 deletions
diff --git a/shared-module/audiocore/__init__.c b/shared-module/audiocore/__init__.c
index ac9d41b60..7bdfe460c 100644
--- a/shared-module/audiocore/__init__.c
+++ b/shared-module/audiocore/__init__.c
@@ -70,3 +70,63 @@ void audiosample_get_buffer_structure(mp_obj_t sample_obj, bool single_channel,
proto->get_buffer_structure(MP_OBJ_TO_PTR(sample_obj), single_channel, single_buffer,
samples_signed, max_buffer_length, spacing);
}
+
+void audiosample_convert_u8m_s16s(int16_t *buffer_out, const uint8_t *buffer_in, size_t nframes) {
+ for(;nframes--;) {
+ int16_t sample = (*buffer_in++ - 0x80) << 8;
+ *buffer_out++ = sample;
+ *buffer_out++ = sample;
+ }
+}
+
+
+void audiosample_convert_u8s_s16s(int16_t *buffer_out, const uint8_t *buffer_in, size_t nframes) {
+ size_t nsamples = 2*nframes;
+ for(;nsamples--;) {
+ int16_t sample = (*buffer_in++ - 0x80) << 8;
+ *buffer_out++ = sample;
+ }
+}
+
+void audiosample_convert_s8m_s16s(int16_t *buffer_out, const int8_t *buffer_in, size_t nframes) {
+ for(;nframes--;) {
+ int16_t sample = (*buffer_in++) << 8;
+ *buffer_out++ = sample;
+ *buffer_out++ = sample;
+ }
+}
+
+
+void audiosample_convert_s8s_s16s(int16_t *buffer_out, const int8_t *buffer_in, size_t nframes) {
+ size_t nsamples = 2*nframes;
+ for(;nsamples--;) {
+ int16_t sample = (*buffer_in++) << 8;
+ *buffer_out++ = sample;
+ }
+}
+
+
+void audiosample_convert_u16m_s16s(int16_t *buffer_out, const uint16_t *buffer_in, size_t nframes) {
+ for(;nframes--;) {
+ int16_t sample = *buffer_in++ - 0x8000;
+ *buffer_out++ = sample;
+ *buffer_out++ = sample;
+ }
+}
+
+
+void audiosample_convert_u16s_s16s(int16_t *buffer_out, const uint16_t *buffer_in, size_t nframes) {
+ size_t nsamples = 2*nframes;
+ for(;nsamples--;) {
+ int16_t sample = *buffer_in++ - 0x8000;
+ *buffer_out++ = sample;
+ }
+}
+
+void audiosample_convert_s16m_s16s(int16_t *buffer_out, const int16_t *buffer_in, size_t nframes) {
+ for(;nframes--;) {
+ int16_t sample = *buffer_in++;
+ *buffer_out++ = sample;
+ *buffer_out++ = sample;
+ }
+}
diff --git a/shared-module/audiocore/__init__.h b/shared-module/audiocore/__init__.h
index 7a56454b8..ec2cf1cfa 100644
--- a/shared-module/audiocore/__init__.h
+++ b/shared-module/audiocore/__init__.h
@@ -74,4 +74,12 @@ void audiosample_get_buffer_structure(mp_obj_t sample_obj, bool single_channel,
bool* single_buffer, bool* samples_signed,
uint32_t* max_buffer_length, uint8_t* spacing);
+void audiosample_convert_u8m_s16s(int16_t *buffer_out, const uint8_t *buffer_in, size_t nframes);
+void audiosample_convert_u8s_s16s(int16_t *buffer_out, const uint8_t *buffer_in, size_t nframes);
+void audiosample_convert_s8m_s16s(int16_t *buffer_out, const int8_t *buffer_in, size_t nframes);
+void audiosample_convert_s8s_s16s(int16_t *buffer_out, const int8_t *buffer_in, size_t nframes);
+void audiosample_convert_u16m_s16s(int16_t *buffer_out, const uint16_t *buffer_in, size_t nframes);
+void audiosample_convert_u16s_s16s(int16_t *buffer_out, const uint16_t *buffer_in, size_t nframes);
+void audiosample_convert_s16m_s16s(int16_t *buffer_out, const int16_t *buffer_in, size_t nframes);
+
#endif // MICROPY_INCLUDED_SHARED_MODULE_AUDIOCORE__INIT__H