blob: e6c1e656bed2522e17038bd00da6fc14398c7762 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#ifndef ROTOR_NODES_AUDIO_ANALYSIS
#define ROTOR_NODES_AUDIO_ANALYSIS
#include "rotor.h"
#include "vampHost.h"
namespace Rotor {
class Audio_analysis: public Base_audio_processor {
public:
Audio_analysis(){};
Audio_analysis(map<string,string> &settings) {
base_settings(settings);
soname=find_setting(settings,"soname");
id=find_setting(settings,"id");
outputNo=find_setting(settings,"outputNo",0);
};
Audio_analysis* clone(map<string,string> &_settings) { return new Audio_analysis(_settings);};
bool init(int _channels,int _bits,int _samples,int _rate);
void cleanup();
void set_parameter(const std::string &key,const std::string &value){params[key]=ofToFloat(value);};
int process_frame(uint8_t *data,int samples_in_frame);
const float output(const Time_spec &time) {
if (analyser.features.size()) {
auto i=analyser.features.upper_bound(time.time); //the first element in the container whose key is considered to go after k
if (i!=analyser.features.end()){
float uk=i->first;
i--;
float lk=i->first;
int ln=i->second;
return (((time.time-lk)/(uk-lk))+ln);
}
}
return 0.0f;
}
void print_features();
void print_summary(){
cerr<<"vamp plugin "<<id<<" of library "<<soname<<" found "<<analyser.features.size()<<" features "<<endl;
};
private:
string soname,id;
int outputNo;
vampHost::Analyser analyser;
map <string,float> params;
};
}
#endif
|