Я взял на себя поддержку приложения для Android, которое записывает источник звука с помощью AudioRecord в формате 44100, 16-битное моно. Мне нужно понизить его до 8000. В текущем приложении есть алгоритм понижения разрешения, и я не уверен, что он работает правильно. Когда другое приложение (которое является черным ящиком) получает его, звук воспроизводится, но с громким жужжанием в фоновом режиме и более медленным, чем ожидалось, звуком. Другой звук в правильном формате, переданный в принимающее приложение, принимается без проблем.
Алгоритм, который у меня есть, указан здесь (я подозреваю, что это был изначально декомпилированный код откуда-то на основе имен переменных).
private void downSample() {
int v5 = 0;
int v4 = 0;
int v2;
for (v2 = 0; v2 < 0xA0; ++v2) {
v5 += 0xD755;
int v6 = v5 / 0x2710;
v5 -= v6 * 0x2710;
double v0 = 0;
int v3 = v4;
v4 += v6;
while (v3 < v4) {
v0 += ((double) ((((float) this.readBuffer[v3])) * this.volume));
++v3;
}
v0 /= ((double) v6);
if (32767 < v0) {
v0 = 32767;
}
else if (-32768 > v0) {
v0 = -32768;
}
this.downSampledBuffer[v2] = ((short) (((int) v0)));
}
}
readBuffer — это тип short[], который заполняется источником записи. downSampledBuffer также является коротким []. Любые мысли о том, что происходит не так?