TransWikia.com

Получить частоты из аудио

Stack Overflow на русском Asked by demo on November 24, 2021

Получаю массив байт с микрофона:

void createAudioRecorder() {
    final AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
            8192, //частота сэмплинга
            AudioFormat.CHANNEL_IN_MONO, //количество каналов
            AudioFormat.ENCODING_PCM_16BIT, //формат PCM
            2048);
    final byte[] buffer = new byte[myBufferSize];
    recorder.startRecording();
    final boolean isRecording = true;
    Thread recordingThread = new Thread(new Runnable() {
        public void run() {
            while (isRecording) {
                // читаем байты с микрофона в буфер
                recorder.read(buffer, 0, 1024); //читаем кусками по 1024
                //дальше что-то с этим делаем (видимо раскладываем на частоты)

                for (int i = 0; i < buffer.length; i++) {
                    System.out.println(buffer[i]);
                }
            }
        }
    });
    recordingThread.start();
}

В данном случае buffer – это массив байт.
Не могу разобраться, как из массива "цифр" можно получить частоты аудио?

Массив имеет примерно следующий вид:

...
2020-07-20 21:16:27.699 19289-19330/? I/System.out: -23
2020-07-20 21:16:27.699 19289-19330/? I/System.out: -1
2020-07-20 21:16:27.699 19289-19330/? I/System.out: 4
2020-07-20 21:16:27.699 19289-19330/? I/System.out: 0
2020-07-20 21:16:27.699 19289-19330/? I/System.out: 7
2020-07-20 21:16:27.699 19289-19330/? I/System.out: 0
...
2020-07-20 21:16:27.699 19289-19330/? I/System.out: 20
2020-07-20 21:16:27.699 19289-19330/? I/System.out: 0
2020-07-20 21:16:27.699 19289-19330/? I/System.out: 33
...

One Answer

Вы запрашиваете поток данных в виде AudioFormat.ENCODING_PCM_16BIT - что означает в переводе на нормальный язык PCM - Pulse Code Modulation - грубо говоря оцифрованная амплитудная модуляция сигнала. Простая синусоида (то есть 1 частотный сигнал) в PCM выглядит примерно так:

введите сюда описание изображения

Для того, чтобы получить частоты вам надо сделать Фурье преобразование, точнее FFT (Fast Fourier Transformation)

Например так

Answered by Barmaley on November 24, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP