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
, Там же используется обработчик.
Последняя строка запускает процесс.