|
@@ -36,6 +36,7 @@ public:
|
|
|
m_output = output;
|
|
|
m_input_complex = NULL;
|
|
|
m_output_complex = NULL;
|
|
|
+ m_count = 0;
|
|
|
}
|
|
|
|
|
|
void set_count(int n){
|
|
@@ -114,18 +115,18 @@ public:
|
|
|
return new AudiToMidi(SampleRate);
|
|
|
}
|
|
|
|
|
|
- AudiToMidi(long sample_rate) : m_input_data(NULL), m_output_data(NULL), m_sample_rate(sample_rate) {
|
|
|
- m_input_complex = fftw_alloc_complex(sample_rate);
|
|
|
- m_output_complex = fftw_alloc_complex(sample_rate);
|
|
|
- for(unsigned int i=0; i<sample_rate; i++){
|
|
|
- m_output_complex[i][1] = m_input_complex[i][1] =0 ;
|
|
|
- }
|
|
|
- m_dftplan = fftw_plan_dft_1d(sample_rate, m_input_complex, m_output_complex, FFTW_FORWARD, FFTW_ESTIMATE);
|
|
|
-
|
|
|
- count = 0;
|
|
|
+ AudiToMidi(long sample_rate) :
|
|
|
+ m_sample_rate(sample_rate){
|
|
|
+ count = 0;
|
|
|
+ m_input_complex = m_output_complex = NULL;
|
|
|
+ m_input_data = m_output_data = NULL;
|
|
|
+ m_sample_count = 0;
|
|
|
+ m_dftplan = NULL;
|
|
|
m_fft = new CustomFft(&m_input_data, &m_output_data);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
virtual ~AudiToMidi(){
|
|
|
fftw_destroy_plan(m_dftplan);
|
|
|
fftw_free(m_input_complex);
|
|
@@ -135,6 +136,7 @@ public:
|
|
|
LADSPA_Data * m_input_data;
|
|
|
LADSPA_Data * m_output_data;
|
|
|
long m_sample_rate;
|
|
|
+ long m_sample_count;
|
|
|
fftw_complex* m_input_complex;
|
|
|
fftw_complex* m_output_complex;
|
|
|
int count;
|
|
@@ -154,27 +156,51 @@ public:
|
|
|
}
|
|
|
|
|
|
|
|
|
- void run(long sc){
|
|
|
+ void set_count(long sc){
|
|
|
+ if(m_sample_count != sc){
|
|
|
+ m_sample_count = sc;
|
|
|
+ if(m_input_complex) fftw_free(m_input_complex);
|
|
|
+ if(m_output_complex) fftw_free(m_output_complex);
|
|
|
|
|
|
- printf("RUN !!!!!!!\n");
|
|
|
- m_fft->set_count(sc);
|
|
|
+ m_fft->set_count(sc);
|
|
|
+ m_input_complex = fftw_alloc_complex(m_sample_count);
|
|
|
+ m_output_complex = fftw_alloc_complex(m_sample_count);
|
|
|
+ for(unsigned int i=0; i<m_sample_count; i++){
|
|
|
+ m_output_complex[i][1] = m_input_complex[i][1] =0 ;
|
|
|
+ }
|
|
|
+ m_dftplan = fftw_plan_dft_1d(m_sample_count, m_input_complex, m_output_complex, FFTW_FORWARD, FFTW_ESTIMATE);
|
|
|
|
|
|
- if(!m_input_data || !m_output_data) return;
|
|
|
+ count = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ void run(long sc){
|
|
|
+ float none[4096] = {0};
|
|
|
+ //printf("RUN %d!!!!\n", sc);
|
|
|
+ set_count(sc);
|
|
|
+ if(!m_input_data) return;
|
|
|
uint64_t start, stop;
|
|
|
start = get_time_ns();
|
|
|
+
|
|
|
+
|
|
|
for(unsigned int i=0; i<sc; i++){
|
|
|
m_input_complex[i][0] = m_input_data[i] ;
|
|
|
}
|
|
|
fftw_execute(m_dftplan);
|
|
|
- for(unsigned int i=0; i<sc; i++){
|
|
|
- m_output_data[i] =isnan(m_output_complex[i][0])?0.0:m_output_complex[i][0] ;
|
|
|
+ if(m_output_data){
|
|
|
+ for(unsigned int i=0; i<sc; i++){
|
|
|
+ //m_output_data[i] =isnan(m_output_complex[i][0])?0.0:m_output_complex[i][0] ;
|
|
|
+ m_output_data[i] = m_output_complex[i][0];
|
|
|
+ }
|
|
|
+ m_window.set_value(m_output_data, sc);
|
|
|
}
|
|
|
- m_window.set_value(NULL, sc);
|
|
|
- //m_fft->execute();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
count+=1;
|
|
|
stop = get_time_ns();
|
|
|
- //m_window.set_value(m_output_data, sc);
|
|
|
- printf("----- %d %d %lf ms\n", count, sc, ((double)(stop-start))/1000000);
|
|
|
+ /*printf("----- %d %d %lf us\n",
|
|
|
+ count, sc, ((double)(stop-start))/1000000
|
|
|
+ );*/
|
|
|
|
|
|
|
|
|
}
|
|
@@ -187,7 +213,6 @@ static void activate_plugin(LADSPA_Handle Instance){
|
|
|
}
|
|
|
|
|
|
static void connect_plugin(LADSPA_Handle Instance, unsigned long SampleCount, LADSPA_Data * data){
|
|
|
- printf("connect_plugin\n");
|
|
|
return ((AudiToMidi*)Instance)->connect(SampleCount, data);
|
|
|
}
|
|
|
|