Как мне обрабатывать звук в режиме реального времени с помощью AudioRecord?

Я пытался получить звук с микрофона устройства с помощью 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();
    }
    */
}

person Neal Anwar    schedule 08.10.2017    source источник
comment
Связано: developer.android.com/ndk/guides/audio/audio- задержка.html   -  person Morrison Chang    schedule 08.10.2017
comment
вы ищете stackoverflow.com/a/4827945/4038978   -  person Mehdi Khademloo    schedule 08.10.2017