summaryrefslogtreecommitdiff
path: root/rotord/rotor.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@herge.(none)>2013-04-05 17:05:38 +0100
committerTim Redfern <tim@herge.(none)>2013-04-05 17:05:38 +0100
commit81d4c56683303021aed05b9f5bf57abb1b154d8c (patch)
treed1a8d403ad455f761f63f480240b81555611c689 /rotord/rotor.cpp
parent332c7c24301700ca0a4ceb104051bcd3a3b3bc4b (diff)
making audio analysis adapter
Diffstat (limited to 'rotord/rotor.cpp')
-rw-r--r--rotord/rotor.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/rotord/rotor.cpp b/rotord/rotor.cpp
index cd288e3..73577f4 100644
--- a/rotord/rotor.cpp
+++ b/rotord/rotor.cpp
@@ -30,7 +30,10 @@ void Render_context::runTask() {
if (load_audio(audio_filename,processors)) {
state=AUDIO_READY;
}
- else state=IDLE;
+ else {
+ //an error occurred: TODO have to clean up allocated data. autoptr?
+ state=IDLE;
+ }
}
sleep(100);
}
@@ -326,7 +329,10 @@ bool Render_context::load_audio(const string &filename,vector<Base_audio_process
std::cout << "The data is in format " <<codecContext->sample_fmt<< " (aka "<< av_get_sample_fmt_name(codecContext->sample_fmt) << ") "<<std::endl;
for (auto p: processors) {
- p->init(codecContext->channels,16,samples,codecContext->sample_rate);
+ if(!p->init(codecContext->channels,16,samples,codecContext->sample_rate) ){
+ cerr<<"Plugin failed to initialse"<<endl;
+ return false;
+ }
}
AVPacket packet;
@@ -397,6 +403,10 @@ bool Render_context::load_audio(const string &filename,vector<Base_audio_process
cerr << "finished processing: "<<sample_processed << " samples of "<<samples<<", "<<((double)sample_processed*100)/samples<<"%"<< std::endl;
// Clean up!
+ for (auto p: processors) {
+ p->cleanup();
+ }
+
av_free(frame);
avcodec_close(codecContext);
av_close_input_file(formatContext);
@@ -469,7 +479,7 @@ Node_factory::Node_factory(){
add_type("==",new Is_new_integer());
add_type("signal_output",new Signal_output());
}
-void Audio_thumbnailer::init(int _channels,int _bits,int _samples,int _rate) {
+bool Audio_thumbnailer::init(int _channels,int _bits,int _samples,int _rate) {
//base_audio_processor::init(_channels,_bits,_samples);
channels=_channels;
bits=_bits;
@@ -482,6 +492,7 @@ void Audio_thumbnailer::init(int _channels,int _bits,int _samples,int _rate) {
sample=0;
samples=0;
accum=0.0;
+ return true;
}
int Audio_thumbnailer::process_frame(uint8_t *_data,int samples_in_frame){
//begin by processing remaining samples
@@ -539,13 +550,13 @@ string Audio_thumbnailer::print(){
}
return output;
}
-void Audio_analysis::init(int _channels,int _bits,int _samples, int _rate) {
+bool Audio_analysis::init(int _channels,int _bits,int _samples, int _rate) {
//need these to make sense of data
channels=_channels;
bits=_bits;
samples=_samples;
-
- analyser.init(soname,id,_rate);
+
+ return analyser.init(soname,id,_channels,_bits,_samples,_rate);
//attempt to load vamp plugin and prepare to receive frames of data
//should the audio analysis contain a vamphost or should it inherit?
@@ -553,6 +564,9 @@ void Audio_analysis::init(int _channels,int _bits,int _samples, int _rate) {
}
int Audio_analysis::process_frame(uint8_t *data,int samples_in_frame) {
- //the standard vamp process takes a file
+ analyser.process_frame(data,samples_in_frame);
return 1;
}
+void Audio_analysis::cleanup() {
+ analyser.cleanup();
+}