void PluginAClientLAD::read_data(KeyFrame *keyframe) { FileXML input; char string[BCTEXTLEN]; input.set_shared_input(keyframe->get_data(), strlen(keyframe->get_data())); config.initialize(server); while(! input.read_tag() ) { //printf("PluginAClientLAD::read_data %s\n", input.tag.get_title()); if(! input.tag.title_is(lad_to_upper(string, plugin_title())) ) continue; const LADSPA_Descriptor *lad_desc = server->lad_descriptor; const LADSPA_PortDescriptor *port_desc = lad_desc->PortDescriptors; int port_count = lad_desc->PortCount; for(int port = 0, i = 0; i < port_count; i++) { if( !LADSPA_IS_PORT_INPUT(port_desc[i]) ) continue; if( !LADSPA_IS_PORT_CONTROL(port_desc[i]) ) continue; PluginAClientLAD::lad_to_upper(string, (char*)lad_desc->PortNames[i]); config.port_data[port] = input.tag.get_property(string, config.port_data[port]); //printf("PluginAClientLAD::read_data %d %f\n", port, config.port_data[port]); port++; } } }
void PluginAClientLAD::save_data(KeyFrame *keyframe) { FileXML output; char string[BCTEXTLEN]; if( !config.port_data ) config.initialize(server); // cause data to be stored directly in text output.set_shared_output(keyframe->get_data(), MESSAGESIZE); output.tag.set_title(lad_to_upper(string, plugin_title())); const LADSPA_Descriptor *lad_desc = server->lad_descriptor; const LADSPA_PortDescriptor *port_desc = lad_desc->PortDescriptors; //printf("PluginAClientLAD::save_data %d\n", lad_desc->PortCount); int port_count = lad_desc->PortCount; for(int port = 0, i = 0; i < port_count; i++) { if( !LADSPA_IS_PORT_INPUT(port_desc[i]) ) continue; if( !LADSPA_IS_PORT_CONTROL(port_desc[i]) ) continue; // Convert LAD port name to default title PluginAClientLAD::lad_to_upper(string, (char*)lad_desc->PortNames[i]); output.tag.set_property(string, config.port_data[port]); //printf("PluginAClientLAD::save_data %d %f\n", port, config.port_data[port]); ++port; } output.append_tag(); output.terminate_string(); }
int InterpolateAllEffect::start_loop() { state = READING; char string[BCTEXTLEN]; sprintf(string, "%s...", plugin_title()); progress = start_progress(string, (PluginClient::end - PluginClient::start)); current_position = PluginClient::start; return 0; }
int ReFrame::start_loop() { if(PluginClient::interactive) { char string[BCTEXTLEN]; sprintf(string, "%s...", plugin_title()); progress = start_progress(string, (PluginClient::end - PluginClient::start)); } current_position = 0; return 0; }
int _720to480Main::start_loop() { if(PluginClient::interactive) { char string[BCTEXTLEN]; sprintf(string, "%s...", plugin_title()); progress = start_progress(string, PluginClient::end - PluginClient::start); } input_position = PluginClient::start; return 0; }
int NormalizeMain::start_loop() { char string[BCTEXTLEN]; sprintf(string, "%s...", plugin_title()); progress = start_progress(string, (PluginClient::end - PluginClient::start) * 2); writing = 0; current_position = PluginClient::start; peak = new double[PluginClient::total_in_buffers]; scale = new double[PluginClient::total_in_buffers]; bzero(peak, sizeof(double) * PluginClient::total_in_buffers); return 0; }
int ResampleEffect::start_loop() { if(PluginClient::interactive) { char string[BCTEXTLEN]; sprintf(string, "%s...", plugin_title()); progress = start_progress(string, (int64_t)((double)(PluginClient::end - PluginClient::start) / scale)); } current_position = PluginClient::start; total_written = 0; resample = new ResampleResample(this); return 0; }
int CDRipMain::start_loop() { // get CD parameters int result = 0; //printf("CDRipMain::start_loop 1\n"); result = get_toc(); FRAME = 4; // 2 bytes 2 channels previewing = 3; // defeat bug in hardware fragment_length = PluginClient::in_buffer_size * FRAME; fragment_length /= NFRAMES * FRAMESIZE; fragment_length *= NFRAMES * FRAMESIZE; total_length = (endlba - startlba) * FRAMESIZE / fragment_length + previewing + 1; result = open_drive(); //printf("CDRipMain::start_loop 1 %d\n", interactive); // thread out progress if(interactive) { char string[BCTEXTLEN]; sprintf(string, "%s...", plugin_title()); progress = start_progress(string, total_length); } //printf("CDRipMain::start_loop 1\n"); // get still more CD parameters endofselection = 0; currentlength = 0; startlba_fragment = startlba - fragment_length * previewing / FRAMESIZE; buffer = new char[fragment_length]; arg.addr.lba = startlba_fragment; arg.addr_format = CDROM_LBA; arg.nframes = NFRAMES; //printf("CDRipMain::start_loop 2\n"); return result; }
int TimeStretch::start_loop() { scaled_size = (int64_t)(get_total_len() * scale); if(PluginClient::interactive) { char string[BCTEXTLEN]; sprintf(string, "%s...", plugin_title()); progress = start_progress(string, scaled_size); } current_position = get_source_start(); total_written = 0; total_read = 0; // The FFT case if(use_fft) { pitch = new PitchEngine(this); pitch->initialize(WINDOW_SIZE); resample = new TimeStretchResample(this); } else // The windowing case { // Must be short enough to mask beating but long enough to mask humming. stretch = new TimeStretchEngine(scale, PluginAClient::project_sample_rate, WINDOW_TIME); } return 0; }
BC_WindowBase* PluginClient::new_window() { printf("PluginClient::new_window undefined in %s.\n", plugin_title()); return 0; }
int NormalizeMain::process_loop(double **buffer, int64_t &write_length) { int result = 0; int64_t fragment_len; //printf("NormalizeMain::process_loop 1\n"); if(writing) { fragment_len = PluginClient::in_buffer_size; if(current_position + fragment_len > PluginClient::end) fragment_len = PluginClient::end - current_position; //printf("NormalizeMain::process_loop 2 %d %f\n", current_position, scale[0]); for(int i = 0; i < PluginClient::total_in_buffers; i++) { read_samples(buffer[i], i, current_position, fragment_len); for(int j = 0; j < fragment_len; j++) buffer[i][j] *= scale[i]; } //printf("NormalizeMain::process_loop 1 %d %f\n", current_position, scale[0]); current_position += fragment_len; write_length = fragment_len; result = progress->update(PluginClient::end - PluginClient::start + current_position - PluginClient::start); if(current_position >= PluginClient::end) result = 1; } else { // Get peak //printf("NormalizeMain::process_loop 4\n"); for(int i = PluginClient::start; i < PluginClient::end && !result; i += fragment_len) { fragment_len = PluginClient::in_buffer_size; if(i + fragment_len > PluginClient::end) fragment_len = PluginClient::end - i; //printf("NormalizeMain::process_loop 5\n"); for(int j = 0; j < PluginClient::total_in_buffers; j++) { //printf("NormalizeMain::process_loop 6 %p\n", buffer); read_samples(buffer[j], j, i, fragment_len); //printf("NormalizeMain::process_loop 7\n"); for(int k = 0; k < fragment_len; k++) { if(peak[j] < fabs(buffer[j][k])) peak[j] = fabs(buffer[j][k]); } } //printf("NormalizeMain::process_loop 8\n"); result = progress->update(i - PluginClient::start); //printf("NormalizeMain::process_loop 9\n"); } // Normalize all tracks double max = 0; for(int i = 0; i < PluginClient::total_in_buffers; i++) { if(peak[i] > max) max = peak[i]; } if(!separate_tracks) { for(int i = 0; i < PluginClient::total_in_buffers; i++) { peak[i] = max; } } for(int i = 0; i < PluginClient::total_in_buffers; i++) { scale[i] = DB::fromdb(db_over) / peak[i]; } //printf("NormalizeMain::process_loop 10\n"); char string[BCTEXTLEN]; sprintf(string, "%s %.0f%%...", plugin_title(), (DB::fromdb(db_over) / max) * 100); progress->update_title(string); // Start writing on next iteration writing = 1; } return result; }