java - 傻瓜式 TarsosDSP 音高分析

标签 java audio javasound tarsosdsp

我正在研究一个分析声音文件音高的程序。我遇到了一个非常好的 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 到底是什么?我如何找到这些值?我在哪里输入我的音频文件?

最佳答案

TarsosDSP 框架中的基本音频流如下:读取来自音频文件或麦克风的传入音频流,并将其分割成例如帧。 1024 个样本。每个帧都通过修改或分析(例如音调分析)它的管道。

在 TarsosDSP 中,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。处理程序也在那里使用。

最后一行开始这个过程。

关于java - 傻瓜式 TarsosDSP 音高分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31231813/

相关文章:

java - Univocity 解析器 : Is there a way to select a col, ,如果文件中不存在,是否让解析器将其中的 col 名称和值解析为 "null"?

java - 将 CFML 参数转换为用于 Web 服务调用的 Java 类时出错

Java 蜂鸣声 : Produce sound of some specific frequencies

java - 从音频文件中获取字节流?

java - 如何将 JSON 解析为 JTree,反之亦然

java - 有没有一种方法可以在获取以下预期的日期中添加月份

java - 从波形获取声功率

c# - Xamarin.iOS 中的静音

Docker 安装/tmp/pulseaudio 给出错误

java - 播放的音频超过了java中设置的持续时间