首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用TarsosDSP java android检测低于40 hz的频率

用TarsosDSP java android检测低于40 hz的频率
EN

Stack Overflow用户
提问于 2020-02-03 19:43:50
回答 1查看 439关注 0票数 1

我正在制作一款安卓手机应用程序,我一直在尝试用TarsosDSP来检测音高。只有当它大于43 it时,它才能发挥很大的作用。但我有一个要求,使它与40赫兹的工作。当我播放声音时,它甚至没有给出低于43的结果。是您可以在线生成所需频率的曲调的地方。这是密码。

代码语言:javascript
复制
void connectsAudioDispatchertoMicrophone() {

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

  PitchDetectionHandler pdh = new PitchDetectionHandler() {
     @Override
     public void handlePitch(final PitchDetectionResult result, AudioEvent e) {
        final float pitchInHz = result.getPitch();
        runOnUiThread(new Runnable() {
           @Override 
           public void run() {
              if (pitchInHz > 1)  
                 Log.d(TAG, "pitchInHz: " + pitchInHz);

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

  thread = new Thread(dispatcher, "Audio Dispatcher");
  thread.start();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-03 23:12:29

这听起来像是Tarsos内部使用的FFT的一个限制。FFT将检测到的声音分成几个频率“回收箱”中的一个。每个垃圾箱的中心频率是一个函数:

  • 抽样率,以及:
  • FFT的宽度(以样本计)。

对于220 FFT采样率,1024采样宽FFT:

Fmin = 22050 / 1024 *2= 43.066Hz

(Fmin是第二个最低的"bin“的中心频率。显然,这是算法能够检测到的最低频率。)

降低Fmin,A.)降低采样率,或者B)增加FFT的宽度:

Fmin = 16000 / 1024 *2= 31.25Hz Fmin = 22050 / 2048 *2= 21.53Hz

对于FFT的宽度,一定要坚持2的幂,并批准采样率的有效设置。

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

https://stackoverflow.com/questions/60046129

复制
相关文章

相似问题

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