We are using an I2S mic with the BC127. The mic has 18-bits of data, left justified, with the remaining used 14 bits filled with zeros. Typical quiescent bias values are in the -8,000 range. A normal voice has a peak-to-peak amplitude of 3,000 units.
Here is what -7,863 looks like:
Top=bit position in I2S payload
Middle= mic data bit number
Bottom = Sample value from mic
The CSR8670 chip inside the BC127 can only deal with 16 bits of data. So we must throw away 2 bits. There are registers in Melody to allow you to select which bits. Even if we throw out the 2 MSBs of mic data, the audio on a -3,000 peak-to-peak signal does not sound loud. We can get it to sound loud by shifting it further, shifting in those unused zeros on the right. This means we lose dyanmaic range. It seems like a horrible kludge to shift in zeros just to make the chip interpret it as a normal volume signal. The audio does sound good, though, when we do it. So the signal is there. It’s just not making its way through the codec and to the Bluetooth profile as a “loud” signals. There should be some way to make the codec compand the raw data, so you can hear signals with amplitude of -3,000 without sacrificing dynamic range.