Search found 9 matches

by SlimyRedstone
Fri Oct 13, 2023 9:11 pm
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Re: Unable to do simple audio transformations

sample = (int32_t)(((int8_t)buffer[sIndex + 2])<<16 | (buffer[sIndex + 1])<<8 | (buffer[sIndex + 0])); So the byte order actually was little-endian all along ;) Btw, for performance reasons, I would definitely steer clear of using double, and generally would avoid/reduce floating point calculations...
by SlimyRedstone
Fri Oct 13, 2023 5:46 pm
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Re: Unable to do simple audio transformations

I don't know how and why, but I finally managed to do it. Two months, I tried every witchery and randomly when clearing the bloated lines and the commented definitly not working ones, it works ! I thank both of you guys (MicroController and ESP_Sprite) Here is the working code (for one channel), if ...
by SlimyRedstone
Fri Oct 13, 2023 5:24 pm
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Re: Unable to do simple audio transformations

Here's how I would probably draft it: static const uint32_t bytes_per_sample = 3; static const uint32_t samples_per_frame = 2; // Read a big-endian, signed 24-bit value from src static int32_t read24(const uint8_t* const src) { int32_t r = (int8_t)src[0]; // takes care of the sign-extension r = (r<...
by SlimyRedstone
Thu Oct 12, 2023 7:17 pm
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Re: Unable to do simple audio transformations

(Before treatment) sample[Left] = 0X831700 (8591104) That would be a large negative value (-8186112), very close to the maximum amplitude representable in 24bits (-8388608). Double-check the byte order in the buffer. And make sure you operate on the signed values. (int32_t signed32 = ((int32_t)(sam...
by SlimyRedstone
Wed Oct 11, 2023 11:11 am
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Re: Unable to do simple audio transformations

Erm... you sure the I2S doesn't require 24 bits of sample data in 32-bits variables? Do you mean using 1 u32bit variable instead of a 3 u8bit ? I already tried that as well In the datasheet of the UDA1334 (page 10 https://www.nxp.com/docs/en/data-sheet/UDA1334ATS.pdf#page=10 ), in 24 bit mode, the ...
by SlimyRedstone
Wed Oct 11, 2023 12:34 am
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Re: Unable to do simple audio transformations

Plus, the samples are signed , two's complement values; so you have to sign-extend them to int32_t before multiplying. I also tried converting the values into signed int32_t, either by bit shifting or by map() (to get a more accurate conversion, I guess). Nothing works. I don't know why, because wh...
by SlimyRedstone
Tue Oct 10, 2023 5:40 pm
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Re: Unable to do simple audio transformations

I tried to set manually the sample into little endian and in big endian, still noise. // @return Returns the first 24 bits #define as24bit(n) (uint32_t)(n&0xFFFFFF) #define CONVERT32bits(b,o) (uint32_t)(b[o]<<16 | b[o+1]<<8 | b[o+2]) /* @param n The number to convert @param o Byte offset (0:Right, 1...
by SlimyRedstone
Tue Oct 10, 2023 7:10 am
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Re: Unable to do simple audio transformations

Both I2S port are configured as little endian (or big endian to false) through this parameter Do you think this is the source of the problem ? https://docs.espressif.com/projects/esp-idf/en/v5.1.1/esp32s3/api-reference/peripherals/i2s.html#_CPPv4N21i2s_std_slot_config_t10big_endianE (extract from th...
by SlimyRedstone
Mon Oct 09, 2023 9:55 pm
Forum: ESP-IDF
Topic: Unable to do simple audio transformations
Replies: 17
Views: 3206

Unable to do simple audio transformations

I'm trying to do a I2S microphone + headphone example program with basic audio manipulation (eg: gain, delay, etc...) I have successfully done the simple part that gets the data from the microphone (using the INMP441, 24bits @ 48kHz), and sends it to the headphones (using the UDA1334, 24bits @ 48kHz...