Java 假人的TarsosDSP节距分析

Java 假人的TarsosDSP节距分析,java,audio,javasound,tarsosdsp,Java,Audio,Javasound,Tarsosdsp,我正在研究一种分析声音文件音调的程序。我遇到了一个非常好的API“TarsosDSP”,它提供了各种音高分析。然而,我在设置它时遇到了很多麻烦。有人能告诉我一些关于如何使用这个API(特别是PitchProcessor类)的快速指南吗?一些代码片段将非常感谢,因为我在声音分析方面真的是新手 谢谢 编辑:我找到了一些文档,其中有一些示例代码显示如何设置PitchProcessor int bufferReadResult = mRecorder.read(mBuffer, 0, mBufferSi

我正在研究一种分析声音文件音调的程序。我遇到了一个非常好的API“TarsosDSP”,它提供了各种音高分析。然而,我在设置它时遇到了很多麻烦。有人能告诉我一些关于如何使用这个API(特别是PitchProcessor类)的快速指南吗?一些代码片段将非常感谢,因为我在声音分析方面真的是新手

谢谢

编辑:我找到了一些文档,其中有一些示例代码显示如何设置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);

…我完全迷路了,姆伯弗和姆伯弗西泽到底是什么?如何找到这些值?在哪里输入音频文件?

TarsosDSP框架中的音频基本流程如下:从音频文件或麦克风发出的传入音频流被读取并切分为1024个样本帧。每个帧都经过一条管道,该管道对其进行修改或分析(例如,节距分析)

在TarsosDSP中,
AudioDispatcher
负责将音频切分为帧。它还将音频帧包装到
AudioEvent
对象中。此
AudioEvent
对象通过
音频处理器链发送

因此,在您引用的代码中,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
。处理程序也在那里使用


最后一行开始这个过程。

谢谢@Joren我真的很感谢你在Tarsos上所做的工作。为了提醒其他人,System.out.println()缺少一个“+”,我需要添加一个采样率作为berkeley链接中断的.fromDefaultMirror()的第一个参数