Я подписал монофонические 16-битные аудиосэмплы PCM, хранящиеся в буфере SInt16, и я пытаюсь преобразовать их в беззнаковые монофонические 8-битные сэмплы PCM, хранящиеся в буфере UInt8. Я написал следующий в основном рабочий код:
for (int i=0; i < numSamples; i++) {
SInt8 tempSigned8Bit = signed16BitBuffer[i]/127; // In 2 passes
unsigned8BitBuffer[i] = tempSigned8Bit + 127; // for clarity
}
Тем не менее, я слышу обрезку на максимальных амплитудах в результирующем звуке, или, по крайней мере, это мое впечатление о том, где происходит искажение. Является ли это артефактом повторного квантования или мне нужно включить какое-то ограничение, как описано в этом вопросе о подобном преобразовании, но без преобразования знака:
Преобразовать 16-битный PCM в 8-битный
Побитовые оптимизации не нужны, но я бы точно не отказался от них.