Я занимаюсь разработкой приложения для распознавания звука на Android и использую класс MediaRecorder, а также модель тензорного потока. Я создаю аудиофайл, в котором я буду сохранять звук с микрофона рекордера в методе onCreate для класса
audioFile = getExternalCacheDir().getAbsolutePath();
audioFile += "/Recording.3gp";
И я установил выходной файл mediaRecorder для этого файла в классе startRecording
mediaRecorder.setOutputFile(audioFile);
Проблема, с которой я столкнулся, заключается в том, что мне нужно преобразовать запись в серию значений MFCC, чтобы модель работала, а используемый им класс MFFC.java требует, чтобы запись была преобразована в двойной массив. Я делаю это так
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedInputStream in = new BufferedInputStream(new FileInputStream(audioFile));
int read;
byte[] buff = new byte[1024];
while ((read = in.read(buff)) > 0)
{
out.write(buff, 0, read);
}
out.flush();
byte[] bytes = out.toByteArray();
int times = Double.SIZE / Byte.SIZE;
double[] doubleArray = new double[bytes.length / times];
for(int i=0;i<doubleArray.length;i++){
doubleArray[i] = ByteBuffer.wrap(bytes, i*times, times).getDouble();
}
Вот как они сказали сделать это на другом посте переполнения стека. Проблема заключается в том, что аудиофайл, в который я отправляю записи, просто добавляет новые записи к предыдущим. Это потому, что я записываю аудио, а затем передаю его в мой метод классификатора в виде цикла
while(true){
try {
soundRecognition task = new soundRecognition();
task.execute();
sleep(1500);
}
Решения, которые я пробовал
Я попытался переместить создание аудио в класс распознавания звука, но я не могу сделать это, так как это приводит к ошибкам, в частности, запуск mediaRecorder вызван в недопустимом состоянии: 4.
Я пытался перезаписать файл, используя классы FileWriter и PrintWriter, но это не сработало, я предполагаю, что файл и аудио файл.
Любая помощь будет оценена