在Android上使用TarsosDSP探测声音频率

TarsosDSP是一个用于音频处理的Java库,这个库包含多个声音频率探测算法,同样包含Goertzel DTMF算法、时间拉伸算法、滤波器等等。

这篇文章通过一个简单的例子在Android上使用TarsosDSP来探测声音的频率。

首先新建一个Android项目,并且在布局上安置一个TextView来显示音高信息。

在开始项目前,需要先申请录音权限。

现在,新建一个AudioDispatcher对象,这个对象采用“默认麦克风”作为信息来源:

AudioDispatcher dispatcher =
                AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);

之后,新建一个PitchDetectionHandler对象,以处理得到的音高:

PitchDetectionHandler pdh = new PitchDetectionHandler() {
            @Override
            public void handlePitch(PitchDetectionResult res, AudioEvent e){
                final float pitchInHz = res.getPitch();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        processPitch(pitchInHz);
                    }
                });
            }
        };

在这个例子中,使用processPitch()函数处理得到的音高,本例子中此函数只是将频率值显示出来,-1代表没有探测到频率。

现在,新建一个AudioProcessor对象并将其添加到AudioDispatcher对象中:

AudioProcessor pitchProcessor = new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, pdh);
dispatcher.addAudioProcessor(pitchProcessor);

最后,让AudioDispatcher对象跑起来吧:

Thread audioThread = new Thread(dispatcher, "Audio Thread");
audioThread.start();

程序的效果图如下:

TarsosDSP探测声音频率

留下评论

电子邮件地址不会被公开。 必填项已用*标注