Chris@35: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@35: Chris@35: /* Chris@35: NNLS-Chroma / Chordino Chris@35: Chris@35: Audio feature extraction plugins for chromagram and chord Chris@35: estimation. Chris@35: Chris@35: Centre for Digital Music, Queen Mary University of London. Chris@35: This file copyright 2008-2010 Matthias Mauch and QMUL. Chris@35: Chris@35: This program is free software; you can redistribute it and/or Chris@35: modify it under the terms of the GNU General Public License as Chris@35: published by the Free Software Foundation; either version 2 of the Chris@35: License, or (at your option) any later version. See the file Chris@35: COPYING included with this distribution for more information. Chris@35: */ Chris@27: Chris@27: #ifndef _CHROMA_METHODS_H_ Chris@27: #define _CHROMA_METHODS_H_ Chris@27: Chris@27: #include Chris@27: #include Chris@27: mail@76: const int nBPS = 3; // bins per semitone mail@76: const int nOctave = 7; mail@76: const int nNote = nOctave * 12 * nBPS + 2 * (nBPS/2); // a core over all octaves, plus some overlap at top and bottom Chris@27: Chris@27: extern std::vector SpecialConvolution(std::vector convolvee, std::vector kernel); mail@41: extern void dictionaryMatrix(float* dm, float s_param); Chris@27: extern std::vector chordDictionary(std::vector *mchorddict); Chris@27: extern bool logFreqMatrix(int fs, int blocksize, float *outmatrix); Chris@27: Chris@27: static const char* notenames[24] = { Chris@27: "A (bass)","Bb (bass)","B (bass)","C (bass)","C# (bass)","D (bass)","Eb (bass)","E (bass)","F (bass)","F# (bass)","G (bass)","Ab (bass)", Chris@27: "A","Bb","B","C","C#","D","Eb","E","F","F#","G","Ab"}; Chris@27: Chris@27: static const char* bassnames[12][12] ={ Chris@27: {"A","","B","C","C#","D","","E","","F#","G","G#"}, Chris@27: {"Bb","","C","Db","D","Eb","","F","","G","Ab","A"}, Chris@27: {"B","","C#","D","D#","E","","F#","","G#","A","A#"}, Chris@27: {"C","","D","Eb","E","F","","G","","A","Bb","B"}, Chris@27: {"C#","","D#","E","E#","F#","","G#","","A#","B","B#"}, Chris@27: {"D","","E","F","F#","G","","A","","B","C","C#"}, Chris@27: {"Eb","","F","Gb","G","Ab","","Bb","","C","Db","D"}, Chris@27: {"E","","F#","G","G#","A","","B","","C#","D","D#"}, Chris@27: {"F","","G","Ab","A","Bb","","C","","D","Eb","E"}, Chris@27: {"F#","","G#","A","A#","B","","C#","","D#","E","E#"}, Chris@27: {"G","","A","Bb","B","C","","D","","E","F","F#"}, Chris@27: {"Ab","","Bb","Cb","C","Db","","Eb","","F","Gb","G"} Chris@27: }; Chris@27: Chris@27: static const float basswindow[] = {0.001769, 0.015848, 0.043608, 0.084265, 0.136670, 0.199341, 0.270509, 0.348162, 0.430105, 0.514023, 0.597545, 0.678311, 0.754038, 0.822586, 0.882019, 0.930656, 0.967124, 0.990393, 0.999803, 0.995091, 0.976388, 0.944223, 0.899505, 0.843498, 0.777785, 0.704222, 0.624888, 0.542025, 0.457975, 0.375112, 0.295778, 0.222215, 0.156502, 0.100495, 0.055777, 0.023612, 0.004909, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000}; Chris@27: static const float treblewindow[] = {0.000350, 0.003144, 0.008717, 0.017037, 0.028058, 0.041719, 0.057942, 0.076638, 0.097701, 0.121014, 0.146447, 0.173856, 0.203090, 0.233984, 0.266366, 0.300054, 0.334860, 0.370590, 0.407044, 0.444018, 0.481304, 0.518696, 0.555982, 0.592956, 0.629410, 0.665140, 0.699946, 0.733634, 0.766016, 0.796910, 0.826144, 0.853553, 0.878986, 0.902299, 0.923362, 0.942058, 0.958281, 0.971942, 0.982963, 0.991283, 0.996856, 0.999650, 0.999650, 0.996856, 0.991283, 0.982963, 0.971942, 0.958281, 0.942058, 0.923362, 0.902299, 0.878986, 0.853553, 0.826144, 0.796910, 0.766016, 0.733634, 0.699946, 0.665140, 0.629410, 0.592956, 0.555982, 0.518696, 0.481304, 0.444018, 0.407044, 0.370590, 0.334860, 0.300054, 0.266366, 0.233984, 0.203090, 0.173856, 0.146447, 0.121014, 0.097701, 0.076638, 0.057942, 0.041719, 0.028058, 0.017037, 0.008717, 0.003144, 0.000350}; Chris@27: Chris@27: static const float sinvalue = 0.866025404; Chris@27: static const float cosvalue = -0.5; Chris@27: mail@76: mail@76: Chris@27: #include "nnls.h" Chris@27: Chris@27: #endif Chris@27: