Chord-Detector-and-Chromagram, 一种弦检测和Chromagram估计

分享于 

6分钟阅读

GitHub

  繁體 雙語
A Chord Detection and Chromagram Estimation Algorithm
  • 源代码名称:Chord-Detector-and-Chromagram
  • 源代码网址:http://www.github.com/adamstark/Chord-Detector-and-Chromagram
  • Chord-Detector-and-Chromagram源代码文档
  • Chord-Detector-and-Chromagram源代码下载
  • Git URL:
    git://www.github.com/adamstark/Chord-Detector-and-Chromagram.git
    Git Clone代码到本地:
    git clone http://www.github.com/adamstark/Chord-Detector-and-Chromagram
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/adamstark/Chord-Detector-and-Chromagram
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Chromagram估计&弦检测

    由亚当。斯塔克和马克。

    这是在以下会议文章中首次介绍的弦识别算法的C++ 实现:

    • 实时演奏中的实时和弦识别。 M。Stark和M。D。 在 2009国际计算机音乐会议( ICMC 2009 ),加拿大,加拿大,16 -21 2009年08月 过程中的Plumbley。

    并在斯塔克博士的论文中展开:

    • "音乐家和机器:在实际性能中桥接语义差异"。 作者:,Stark,London,2011,。

    版本

    ==== 1.0.7 ==== [17th June 2016 ]

    • 代码样式更新

    ==== 1.0.6 ==== [21st November 2014 ]

    • 移动到 GitHub,没有实现更改

    ==== 1.0.1 ==== [26th June 2014 ]

    • 增加了对 Kiss FFT的支持,作为FFTW的替代方案

    ==== 1.0.0 ==== [14th June 2014 ]

    • 这是chromagram和chord检测代码的实现,约 2014年。

    许可证

    这个代码是在GNU通用 public 许可证下提供的,版本 3。 有关详细信息,请参阅包含的LICENSE.txt。

    依赖项

    Chromagram估计代码需要以下的一个FFT库:

    • FFTW [add the flag -DUSE_FFTW ]
    • 亲吻 [add the flag -DUSE_KISS_FFT ]

    使用- Chromagram估计

    步骤 1

    包括Chromagram头文件,如下所示:

    
    #include"Chromagram.h"
    
    
    
    

    步骤 2

    实例化该算法,指定音频帧大小和采样率:

    
    int frameSize = 512;
    
    
    int sampleRate = 44100;
    
    
    
    Chromagram c (frameSize,sampleRate); 
    
    
    
    

    步骤 3.1 - 使用 array 音频输入

    在处理循环中,用一个音频采样框填充双精度 array:

    
    double frame[frameSize]; 
    
    
    
    //!
    
    
    //do something here to fill the frame with audio samples
    
    
    //!
    
    
    
    

    然后打电话:

    
    c.processAudioFrame (frame);
    
    
    
    

    步 3.2 - 使用向量音频输入

    在处理循环中,用一个音频采样框填充双precsion矢量:

    
    std::vector<double> frame (frameSize); 
    
    
    
    //!
    
    
    //do something here to fill the frame with audio samples
    
    
    //!
    
    
    
    

    然后打电话:

    
    c.processAudioFrame (frame); 
    
    
    
    

    步骤 4 - 获取 Chromagram

    算法需要大量的音频计算,所以在( 例如) 512采样的每个音频帧上计算它可能是不必要的。

    调用 processAudioFrame() ( 参见步骤 3 ) 后,只需调用:

    
    if (c.isReady())
    
    
    {
    
    
     std::vector<double> chroma = c.getChromagram();
    
    
    
    //do something with the chromagram here
    
    
    }
    
    
    
    

    注- 设置参数

    你可以为该算法设置许多参数。 这些包括。

    音频帧大小:

    
    c.setInputAudioFrameSize (512);
    
    
    
    

    采样频率:

    
    c.setSamplingFrequency (44100);
    
    
    
    

    将chromagram计算为( 在采样频率处指定的采样频率中指定的采样频率。默认值为 8192 )的间隔:

    
    c.setChromaCalculationInterval (8192);
    
    
    
    

    用法- 弦检测

    步骤 1

    包括ChordDetector头文件,如下所示:

    
    #include"ChordDetector.h"
    
    
    
    

    步骤 2

    按如下方式实例化弦检测器:

    
    ChordDetector chordDetector;
    
    
    
    

    步骤 3

    用Chromagram值(。可能是从音频估计,使用Chromagram类) 填充双精度 array 或者长度为 12的向量:

    
    double chroma[12];//or std::vector<double> chroma(12);
    
    
    
    //!
    
    
    //fill with chromagram values here
    
    
    //!
    
    
    
    

    然后打电话:

    
    chordDetector.detectChord (chroma);
    
    
    
    

    步骤 4

    然后你可以得到 root 音符,和弦质量( 大调。小调等) 和任何其他间隔通过。

    
    chordDetector.rootNote
    
    
    chordDetector.quality
    
    
    chordDetector.intervals
    
    
    
    

    问题?

    访问:

    http://www.adamstark.co.uk

    给我发邮件。 : )


    CHR  算法  Detect  检测  Estimation  Chord