pitch-detection, 在 C++ 中,基音检测算法

分享于 

3分钟阅读

GitHub

  繁體 雙語
Some pitch detection algorithms in C++
  • 源代码名称:pitch-detection
  • 源代码网址:http://www.github.com/sevagh/pitch-detection
  • pitch-detection源代码文档
  • pitch-detection源代码下载
  • Git URL:
    git://www.github.com/sevagh/pitch-detection.git
    Git Clone代码到本地:
    git clone http://www.github.com/sevagh/pitch-detection
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/sevagh/pitch-detection
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    基于的基音周期检测算法

    一种 C++ 基音检测算法的。

    • McLeod节距方法
    • 自相关因为它给出了不正确的结果而被移除- MPM是对标准自相关的增强
    • DFT
    • Goertzel语

    阴和McLeod实现由 https://github.com/JorenSix/TarsosDSP 激发。

    MPM在实际乐器和声音方面表现最好;请参见 https://github.com/sevagh/Pitchahttps://github.com/sevagh/transcribe,我的两个项目使用 MPM。

    安装

    可选使用 https://github.com/anthonix/ffts

    make && sudo make install

    生成可移植的,而不链接到 fft ( 例如。 使用时域自相关,检查 mpm.cpp 了解详细信息):

    FFT_FLAG="-DPORTABLE_XCORR" make

    要在代码中使用:

    #include <pitch_detection.h>g++ [...] -lpitch_detection

    示例用法

    NB: 使用大小为的输入矢量将在FFT优化方面进行更好的优化。

    make examples

    标准值:

    
    $./bin/stdin
    
    
    Usage: stdin <algo> <sample_rate>
    
    
    $./bin/stdin mpm 48000 <samples/1337_hz_huge.txt
    
    
    Size: 32368
    
    
    Pitch: 1337
    
    
    
    

    正弦波:

    
    $./bin/sinewave
    
    
    Usage: sinewave <freq> <algo> <size> <sample_rate>
    
    
    $./bin/sinewave 1337 yin 8092 48000
    
    
    Freq: 1337 pitch: 1337.48
    
    
    
    

    用于生成正弦波并将结果输入 stdin.cpp的。/正弦波发生器:

    
    $./sine-generator/master/sine.sh | sh -s -- 4096 1337 |./bin/stdin mpm 48000
    
    
    Size: 4096
    
    
    Pitch: 1337.01
    
    
    
    

    相关文章