#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. Я могу разобраться с этим, но мне все равно нужен способ очищать файл каждый раз, верно?