33 "key",
"TonalAnalysis",
34 "category",
"Analysis",
35 "description",
"TonalAnalysis",
38 static FactoryRegistrator<ProcessingFactory, TonalAnalysis>
reg =
metadata;
49 SetFilterInertia(0.7);
50 SetTunningEnabled(
true);
51 SetPeakWindowingEnabled(
true);
53 SetSegmentationMethod(1);
58 : _input(
"Audio Input",this)
59 , _pcp(
"Pitch Profile",this)
60 , _chordCorrelation(
"Chord Correlation",this)
61 , _segmentation(
"Chord Segmentation", this)
62 , _chromaPeaks(
"Chroma Peaks",this)
63 , _tunning(
"Tunning",this)
64 , _implementation( 0 )
72 if (_implementation)
delete _implementation;
79 if (_implementation)
delete _implementation;
83 _implementation->
enableTunning( _config.GetTunningEnabled() );
85 _implementation->
hopRatio( _config.GetHopRatio() );
86 unsigned segmentationMethod = _config.HasSegmentationMethod() ? _config.GetSegmentationMethod() : 0;
91 _floatBuffer.resize(_implementation->
frameSize());
103 _implementation->
clear();
111 for (
unsigned i = 0; i < _implementation->
frameSize(); i++)
112 _floatBuffer[i] = input[i];
113 _implementation->
doIt(&_floatBuffer[0], _currentTime);
115 std::vector<TData> & pcp = _pcp.
GetData();
116 pcp.resize(_implementation->
pcp().size());
117 for (
unsigned i = 0; i < _implementation->
pcp().size(); i++)
118 pcp[i] = _implementation->
pcp()[i];
121 std::vector<TData> & chordCorrelation = _chordCorrelation.
GetData();
129 for (
unsigned i=0; i<segmentation.
onsets().size(); i++)
131 unsigned chordIndex = _implementation->
chordIndexes()[i];
132 std::string chordName = _implementation->
root(chordIndex) +
" " + _implementation->
mode(chordIndex);
140 std::vector<std::pair<TData,TData> > & chromaPeaks = _chromaPeaks.
GetData();
141 chromaPeaks.resize(_implementation->
peaks().size());
142 for (
unsigned i = 0; i < _implementation->
peaks().size(); i++)
143 chromaPeaks[i] = _implementation->
peaks()[i];
146 std::pair<TData,TData> & tunning = _tunning.
GetData();
154 _currentTime += _implementation->
hop()/44100.0;