다음 코드를 사용하여 PCM 오디오 데이터를 정규화합니다. 정상화하는 올바른 방법입니까? 정규화 후 LPF를 적용합니다. 순서가 LPF를 먼저 할 것인지 아니면 정규화를 출력 할 것인지를 결정해야합니다. 그렇지 않으면 현재의 순서가 더 중요한 것입니다. 또한 내 targetMax는 8000으로 설정되어 있으며이 포럼의 게시에서 사용했습니다. 무엇을위한 최적의 가치입니다. 내 입력 귀하의 findMaxAmplitude은 긍정적 여행에 보이는 44100.PCM 데이터를 표준화하십시오.
private static int findMaxAmplitude(short[] buffer) {
short max = Short.MIN_VALUE;
for (int i = 0; i < buffer.length; ++i) {
short value = buffer[i];
max = (short) Math.max(max, value);
}
return max;
}
short[] process(short[] buffer) {
short[] output = new short[buffer.length];
int maxAmplitude = findMaxAmplitude(buffer);
for (int index = 0; index < buffer.length; index++) {
output[index] = normalization(buffer[index], maxAmplitude);
}
return output;
}
private short normalization(short value, int rawMax) {
short targetMax = 8000;
double maxReduce = 1 - targetMax/(double) rawMax;
int abs = Math.abs(value);
double factor = (maxReduce * abs/(double) rawMax);
return (short) Math.round((1 - factor) * value);
}