Signal processing 带处理和最小值的注释检测

Signal processing 带处理和最小值的注释检测,signal-processing,processing,minim,Signal Processing,Processing,Minim,我正在尝试创建一个处理应用程序,能够检测乐器(吉他)的音符。例如,如果播放打开的“A”音符,我想基于此做一些事情,比如在屏幕上显示音符或显示图像 我被卡住了,不确定我是否做对了,或者如何继续。根据我的理解,我需要得到基频?如果是的话,我该怎么做?好像当我现在演奏一个音符时,示意图显示了一系列不同的频率。我是不是应该试着去弄清楚那张纸条的开头或是什么 如果你说不出来,我是个新手,所以温柔点;)以下是我目前掌握的情况: /* sketch to measure frequencies */ imp

我正在尝试创建一个处理应用程序,能够检测乐器(吉他)的音符。例如,如果播放打开的“A”音符,我想基于此做一些事情,比如在屏幕上显示音符或显示图像

我被卡住了,不确定我是否做对了,或者如何继续。根据我的理解,我需要得到基频?如果是的话,我该怎么做?好像当我现在演奏一个音符时,示意图显示了一系列不同的频率。我是不是应该试着去弄清楚那张纸条的开头或是什么

如果你说不出来,我是个新手,所以温柔点;)以下是我目前掌握的情况:

/* sketch to measure frequencies */

import ddf.minim.analysis.*;
import ddf.minim.*;

Minim minim;
AudioInput in;
FFT fft;

void setup()

{
  size(512, 200, P3D);
  minim = new Minim(this);

  in = minim.getLineIn(Minim.STEREO, 2048);

  // create an FFT object that has a time-domain buffer 
  // the same size as jingle's sample buffer
  // note that this needs to be a power of two 
  // and that it means the size of the spectrum
  // will be 512. see the online tutorial for more info.
  fft = new FFT(in.bufferSize(), 44100);
}

void draw()
{
  background(0);
  stroke(255);
  // perform a forward FFT on the audip that's coming in
  fft.forward(in.mix);
  for(int i = 0; i < fft.specSize(); i++)
  {
    // draw the line for frequency band i, scaling it by 4 so we can see it a bit better
    line(i, height, i, height - fft.getBand(i) * 4);
    //print out the frequency. Am I supposed to be multiplying the value by 2048?
    println( (fft.getFreq(i) * 2048)); 
  }

  fill(255);

}


void stop()
{
  // always close Minim audio classes when you finish with them
  in.close();
  minim.stop();
  super.stop();
}
测量频率的草图*/ 进口ddf.微量分析。*; 进口ddf.微量。*; 极小极小; 音频输入; FFT; 无效设置() { 大小(512,200,P3D); 最小值=新的最小值(本); in=最小getLineIn(最小立体声,2048); //创建具有时域缓冲区的FFT对象 //与Kingle的样本缓冲区大小相同 //请注意,这需要是2的幂 //这意味着光谱的大小 //将为512。有关详细信息,请参阅联机教程。 fft=新的fft(in.bufferSize(),44100); } 作废提款() { 背景(0); 中风(255); //在即将到来的audip上执行前向FFT fft.前向(in.mix); 对于(int i=0;i不要使用简单的FFT估计吉他音高。甚至是有窗户的。不要使用上面的bjorneroche博客文章


FFT峰值检测器对于主要由泛音组成的声音(如大多数音乐中的泛音)效果很差。请改用更稳健的基音检测/估计方法,如RAPT、YAAPT、自相关变量、谐波积谱或倒谱/倒谱方法。

我认为您需要对基音检测的基础知识进行更多的研究。试试维基百科,其他问题,或者这篇博文:谢谢比约恩。这篇文章看起来不错。我会读它,尽可能多地学习理论。但是,我不使用C语言编写代码。你能给我什么建议来推动我在这方面的进展吗?文章中的C代码示例与你在Java/处理中所做的任何事情都非常相似,概念也完全相同。嗨,Hotpaw2!你能给出一个具体的处理例子吗?或者,处理不是用于此目的的程序?