Я пытался получить звук с микрофона устройства с помощью AudioRecord в режиме реального времени. Я помещаю каждый byte[], который я получаю из AudioRecord, в ArrayList и отмечаю прошедшее время, а затем, когда ArrayList достигает определенного размера, я печатаю запись интервалов. Однако, когда я напечатал эти интервалы, я узнал, что между чтением каждого нового байта [] из AudioRecord проходит примерно 20 миллисекунд, а сами байты [] имеют длину всего 81 запись, а не 1024. Можно ли это исправить, поэтому я может читать аудиоданные мгновенно?
private void writeAudioDataToFile() {
// Write the output audio in byte
short sData[] = new short[BufferElements2Rec];
long startTime = time();
long elapsed = 0;
final long BUFFER_SIZE = 2000; //in millis
//initialize buffer creation time variable to time just before creation of first buffer
long bufferCreationTime = time();
List<Long> time = new ArrayList<Long>();
ArrayList<byte[]> byteBuffer = new ArrayList<byte[]>();
while (isRecording) {
// gets the voice output from microphone to byte format
//TODO: absolute value averages of block data
final int BYTE_ARRAY_SIZE = 1024;
final int TIME_BYTE_ARRAY_SIZE = 8;
//read the next short array of audio data
audioRecord.read(sData, 0, BufferElements2Rec);
System.out.println("Short writing to file" + " " + elapsed + " " + Arrays.toString(sData));
System.out.println("" + elapsed + " " + " " + BUFFER_SIZE);
try {
// // stores the voice buffer
final byte bData[] = short2byte(sData);
byteBuffer.add(bData);
time.add(time());
elapsed = time() - startTime;
if(elapsed > BUFFER_SIZE) {
System.out.println(time);
for (int i = 0; i < time.size(); i++)
time.set(i, time.get(i) - bufferCreationTime);
System.out.println(time);
System.out.println("TAG" + blockedBuffer);
}
//set new buffer creation time
bufferCreationTime = time();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
*/
}