首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哑铃木的TarsosDSP基音分析

哑铃木的TarsosDSP基音分析
EN

Stack Overflow用户
提问于 2015-07-05 15:13:35
回答 1查看 6.2K关注 0票数 8

我在做一个分析声音文件的音高的程序。我遇到了一个非常好的API,叫做"TarsosDSP“,它提供了各种各样的音调分析。然而,我在设置它时遇到了很多困难。有人能给我介绍一下如何使用这个API (尤其是PitchProcessor类)吗?一些代码片段将是非常感谢的,因为我真的是新的声音分析。

谢谢

编辑:我在Programming找到了一些文档,其中有一些示例代码展示了如何设置PitchProcessor,…

代码语言:javascript
复制
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到底是什么?我如何找到这些价值?我在哪里输入我的音频文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-06 14:38:10

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

在TarsosDSP中,AudioDispatcher负责分割帧中的音频。此外,它还将音频帧封装到AudioEvent对象中。这个AudioEvent对象是通过AudioProcessors链发送的。

因此,在您引用的代码中,mBuffer是音频帧,mBufferSize是示例中缓冲区的大小。您可以自己选择缓冲区大小,但对于基音检测,2048个样本是合理的。

对于基音检测,您可以在TarsosDSP库中执行如下操作:

代码语言:javascript
复制
   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中。处理程序也在那里使用。

最后一行启动进程。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31231813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档