The recorded audio is set to 8000Hz single-channel and 44100hz dual-channel.
During recording, data is written into temp. PCM using byte [] to read and play the data.
The main requirement is to change the sampling rate.
private short[] getStereoData(byte[] b) {if (b == null || b.length <= 3) {// throw new IllegalStateException("audio data is too short");return null;}short s[] = new short[b.length / 2];for (int i = 0; i < s.length; i++) {int j = (i * 2);s[i] = (short) (((b[j + 1] << 8) | b[j + 0] & 0xff));}return getStereoData(s);}private short[] getStereoData(short[] buffer) {if (buffer == null || buffer.length < 2) {return null;}float f = 44100.0f / 8000.0f * 2;int[] insertpos = new int[buffer.length];short[] b = new short[(int) (buffer.length * f)];for (int i = 0; i < buffer.length; i++) {int j = (int) (i * f);b[j] = buffer[i];insertpos[i] = j;}for (int i = 1; i < insertpos.length; i++) {short start = b[insertpos[i - 1]];short end = b[insertpos[i]];int num = insertpos[i] - insertpos[i - 1];int m = start;int n = end;int a = (n - m) / num;short average = (short) a;for (int j = 1; j < num; j++) {b[insertpos[i - 1] + j] = (short) (b[insertpos[i - 1]] + average * j);}}return b;}
It is mainly to convert the byte value to short and interpolation.