我在录音机上工作(Google Play上的AudioRec)。
我可以选择adjust the gain with [-20dB, + 20dB]
范围。
它在我的手机上效果很好,但是用户在设备had complained about the gain because when selecting -20dB, the output is distorted
上使用了专业麦克风。
见下文,我如何暗示。增益函数:
for(int frameIndex=0; frameIndex<numFrames; frameIndex++){
for(int c=0; c<nChannels; c++){
if(rGain != 1){
// gain
long accumulator=0;
for(int b=0; b<bytesPerSample; b++){
accumulator+=((long)(source[byteIndex++]&0xFF))<<(b*8+emptySpace);
}
double sample = ((double)accumulator/(double)Long.MAX_VALUE);
sample *= rGain;
int intValue = (int)((double)sample*(double)Integer.MAX_VALUE);
for(int i=0; i<bytesPerSample; i++){
source[i+byteIndex2]=(byte)(intValue >>> ((i+2)*8) & 0xff);
}
byteIndex2 += bytesPerSample;
}
}//end for(channel)
}//end for(frameIndex)
也许我应该在
samle *= rGain;
之后应用一些低/高滤波器?像if(sample < MINIMUM_VALUE || sample > MAXIMUM_VALUE)
一样?在这种情况下,请让我知道这些最小最大值是多少... 最佳答案
仅仅将值裁剪到阈值以上肯定会导致失真。如果您可以描绘出纯正弦波,则当您倾斜顶部时,它将开始类似于方波。
就是说,如果您有一个输入信号,并且将其乘以一个小于1的值,那么就不会引入任何(大量)失真。您需要再往回看信号路径。输入可能发生削波。