TarsosDSP Pitch Анализ для чайников

Я проснулся на Progarm, которые анализируют высоту звукового файла. Я столкнулся с очень хорошим API под названием "TarsosDSP", который предлагает анализ различной высоты тона. Однако я испытываю много проблем при настройке. Может кто-нибудь показать мне несколько быстрых указателей о том, как использовать этот API (особенно класс PitchProcessor), пожалуйста? Некоторые фрагменты кода будут чрезвычайно полезны, потому что я действительно новичок в анализе звука.

Спасибо

РЕДАКТИРОВАТЬ: я нашел какой-то документ на http://husk.eecs.berkeley.edu/courses/cs160-sp14/index.php/Sound_Programming где есть пример кода, который показывает, как настроить PitchProcessor,…

int bufferReadResult = mRecorder.read(mBuffer, 0, mBufferSize);
// (note: this is NOT android.media.AudioFormat)
be.hogent.tarsos.dsp.AudioFormat mTarsosFormat = new be.hogent.tarsos.dsp.AudioFormat(SAMPLE_RATE, 16, 1, true, false);
AudioEvent audioEvent = new AudioEvent(mTarsosFormat, bufferReadResult);
audioEvent.setFloatBufferWithByteBuffer(mBuffer);
pitchProcessor.process(audioEvent);

… Я совершенно растерялся, что же такое mBuffer и mBufferSize? Как мне найти эти значения? И где я могу ввести свои аудио файлы?

1 ответ

Решение

Основной поток звука в структуре TarsosDSP выглядит следующим образом: входящий аудиопоток, исходящий из аудиофайла или микрофона, считывается и разбивается на кадры, например, 1024 выборок. Каждый кадр проходит через конвейер, который его модифицирует или анализирует (например, анализ высоты тона).

В ТарсосДСП AudioDispatcher отвечает за нарезку аудио в кадрах. Также он оборачивает аудио кадр в AudioEvent объект. это AudioEvent объект отправляется через цепочку AudioProcessors,

Таким образом, в указанном вами коде mBuffer - это аудио кадр, mBufferSize - размер буфера в сэмплах. Вы можете выбрать размер буфера самостоятельно, но для определения высоты тона достаточно 2048 сэмплов.

Для определения высоты тона вы можете сделать что-то подобное с библиотекой TarsosDSP:

   PitchDetectionHandler handler = new PitchDetectionHandler() {
        @Override
        public void handlePitch(PitchDetectionResult pitchDetectionResult,
                AudioEvent audioEvent) {
            System.out.println(audioEvent.getTimeStamp() + " " pitchDetectionResult.getPitch());
        }
    };
    AudioDispatcher adp = AudioDispatcherFactory.fromDefaultMicrophone(2048, 0);
    adp.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.YIN, 44100, 2048, handler));
    adp.run();

В этом коде сначала создается обработчик, который просто печатает обнаруженный шаг. AudioDispatcher подключен к микрофону по умолчанию и имеет размер буфера 2048. Аудиопроцессор, который обнаруживает высоту тона, добавляется к AudioDispatcher, Там же используется обработчик.

Последняя строка запускает процесс.

Другие вопросы по тегам