我在录音机上工作(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的值,那么就不会引入任何(大量)失真。您需要再往回看信号路径。输入可能发生削波。

10-01 13:30