次のコードを使用して PCM オーディオ データを正規化していますが、これは正規化する正しい方法ですか? 正規化後、LPFを適用しています。最初にLPFを実行し、その出力で正規化を行うか、それが重要な場合にのみ現在の順序が優れているかは、順序が重要ですか。また、私の targetMax は、このフォーラムの投稿から使用した 8000 に設定されています。その最適値はいくらですか。私の入力は、サンプルレート 44100 の 16 ビット MONO 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);
}