Firefox, мне не приходилось работать с "компьютерным звуком", только со специализированными промышленными устройствами.
Обычно, сигнал с АЦП, униполярен. Т.е. коды изменяются от 0 до некого MAX. Это означает, что в сигнале присутсвует постоянная составляющая. Однако её величина зависит от конкретной реализации. Но можно предположить, что это пол шкалы.
Можно пойти таким путём убрать постоянную составляющую, а затем произвести изменение амплитуды. Псевдокод такой:
C++ (Qt)
const float k = 0.9; // это коэффициент усиления (<1, значит ослабление)
const Type constComponent = <тут половина максимального числа типа Type>; // Это постоянная составляющая
Type sourceData[] = <тут много данных>; // это массив источник данных
Type targetData[] ; // это массив конечных данных
for (...){
SignedType d1 = constComponent - sourceData[i]; // это данные уже без постоянной составляющей, знаковый тип
SignedType d2 = SignedType(k * d1); // это данные с изменённой амплитудой, знаковый тип
targetData[i] = constComponent + d2;// это результирующие данные с востановленной постоянной состовляющей
}
Собственно это схема, которую можно привести к любому удобному виду
если у тебя данные в виде байт, то
Type, может быть
char и соответсвенно
половина максимального числа типа Type = 127