I create an audio buffer and want to edit this before I play this sound.
My problem is that i get an big noise when number is more than 1. It means I can only
play the buffer without noise when I dont edit the buffer (data).
Background informations:
data is an audiorecord buffer with following informations:
private static final String TAG = "Aufnahme";
private AudioRecord recorder = null;
private boolean isRecording = false;
private int SAMPLERATE = 44100;
private int CHANNELS = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
private int bufferSize = AudioRecord.getMinBufferSize(SAMPLERATE, CHANNELS,
AUDIO_FORMAT);
private Thread recordingThread = null;
And my effect class :
public class verzerrer {
public void distortion(short[] data) {
output out = new output();
long[] y = new long[data.length];
int number =1000;
for(int i=1;i<data.length;i++){
y[i]=(data[i]/number)*number;
}
for(int i=0;i<data.length;i++){
data[i]=(short) y[i];
}
out.send(data);
}
}
You say “My problem is that i get an big noise when number is more than 1.” But it looks to me like a “big noise” is exactly what you are trying to create: your effect is called “distortion” and you are performing integer division when number > 1, which will create a very large amount IM distortion.
The effect you’ve created looks to me to be analogous to a “bit crush” effect: throwing away the least significant data. If you are looking to create a more traditional distortion (like a guitar amp distortion), you’ll need to perform “clipping”, not “bit crushing”. Like this:
This will create harmonic distortion. The lower number is, the more distortion you will get. Here, “number” is called “threshold”. you may want to use something like
to define it. Here, t is a float value. If t is closer to 1, you get more distortion, and closer to 0 you get less.