Keep Low Frequency Data When Converting I2S 24 bit to 16 bit #1825
Replies: 2 comments 3 replies
-
|
Beta Was this translation helpful? Give feedback.
-
Thanks for the quick reply Phil! I'm using 16 bits now (so I can use the awesome equilizer!). I am concerned about the result of the "native" 24 bit I2S mic data being converted when received from the I2S channel. Some data must be lost? Is the cast dropping the lower or higher bits to fit into the 16 bit number? This discussion suggests it is the lower bits: "The quietest parts of a digital recording (like the very end of a long reverb tail) use bits 1-8. The middle of the line signal fall somewhere between 9-16. The loud stuff is up there at 17-24 bits. When you truncate to from 24 to 16 bits, you are effectively throwing away bits 1-8." https://recording.org/comment/mjones4th/24-bit-16-bit-whats-lost/lets-simple-it-expansion-gaffs-statement-clo#comment-18371 |
Beta Was this translation helpful? Give feedback.
-
I need the lowest frequency audio from a 24 bit ICS-43434 mic. I'm using Equilizer3Bands.freq_low and gain settings to isolate the band, as well as Boost in an AudioEffectStream to increase volume. Because these require 16-bit input, I've got the I2SStream bits_per_sample configuration set to 16.
All of this seems to be working; however, I'm not getting the expected output. Research suggests this may be due to the 24 to 16 bit conversion truncating the lowest frequency data. If that's the case, it seems like a good solution would be changing the conversion to drop the higher values rather than lower.
I've been poking around in I2SDriverESP32 and NumberFormatConverterStream and am not sure how to go about this. I'm hoping there's a built-in way to do what I want, as has turned out to be the case for everything else in this incredible library. ;-) Thanks in advance for advice or pointers.
Beta Was this translation helpful? Give feedback.
All reactions