Очистить содержимое файла без удаления

#java #android #audio

#java #Android #Аудио

Вопрос:

Я разрабатываю приложение для распознавания звука на Android и использую класс MediaRecorder, а также модель tensorflow. Я создаю аудиофайл, в котором я буду сохранять звук с микрофона записи в методе 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();
  }
  

Именно так они сказали сделать это в другом сообщении stack overflow. Проблема в том, что аудиофайл, в который я отправляю записи, просто продолжает добавлять новые записи к предыдущим. Это потому, что я записываю аудио, а затем передаю его в свой метод классификатора в цикле следующим образом

 while(true){
                try {
                    soundRecognition task = new soundRecognition();
                    task.execute();
                    sleep(1500);

                }
  

Решения, которые я пробовал

Я попытался перенести создание аудио в класс распознавания звука, но я не могу этого сделать, поскольку это приводит к ошибкам, в частности, запуск MediaRecorder вызывается в недопустимом состоянии: 4.

Я попытался перезаписать файл, используя FileWriter и класс PrintWriter, но это не сработало, я предполагаю, потому что файл и аудиофайл.

Любая помощь была бы оценена

Комментарии:

1. Вы пытаетесь прочитать файл 3GP, как если бы это был массив двойников?

2. Да, загруженный мной класс MFFC требует именно этого. Он был найден на github.com/chiachunfu/speech/blob/master/speechandroid/src/org /…

3. Не следует ли вам предварительно распаковать файл 3GP, а затем преобразовать данные PCM в массив удвоений?

4. Я могу разобраться с этим, но мне все равно нужен способ очищать файл каждый раз, верно?