From: Good Guy Date: Sat, 14 Dec 2019 01:54:49 +0000 (-0700) Subject: compressors: added mkup_gain reset, fixed smooth_only X-Git-Tag: 2019-12~9 X-Git-Url: https://cinelerra-gg.org/git/?a=commitdiff_plain;h=033efab12586e8086014c814a5360f211d228ac3;p=goodguy%2Fcinelerra.git compressors: added mkup_gain reset, fixed smooth_only ported 7.2 synthesizer spectrogram, tweaked get_truncated_text add 6 profiles via olaf, audioscope rework, plugin synchronization improvements from 7.2 --- diff --git a/cinelerra-5.1/cinelerra/compressortools.C b/cinelerra-5.1/cinelerra/compressortools.C index fee76d3d..d876dbd7 100644 --- a/cinelerra-5.1/cinelerra/compressortools.C +++ b/cinelerra-5.1/cinelerra/compressortools.C @@ -33,12 +33,7 @@ BandConfig::BandConfig() { - freq = 0; - solo = 0; - bypass = 0; -// readahead_len = 1.0; - attack_len = 1.0; - release_len = 1.0; + reset(); } BandConfig::~BandConfig() @@ -56,14 +51,15 @@ void BandConfig::save_data(FileXML *xml, int number, int do_multiband) xml->tag.set_property("SOLO", solo); xml->tag.set_property("ATTACK_LEN", attack_len); xml->tag.set_property("RELEASE_LEN", release_len); + xml->tag.set_property("MKUP_GAIN", mkup_gain); } xml->append_tag(); xml->append_newline(); for( int i = 0; i < levels.total; i++ ) { xml->tag.set_title("LEVEL"); - xml->tag.set_property("X", levels.values[i].x); - xml->tag.set_property("Y", levels.values[i].y); + xml->tag.set_property("X", levels[i].x); + xml->tag.set_property("Y", levels[i].y); xml->append_tag(); xml->append_newline(); } @@ -81,6 +77,7 @@ void BandConfig::read_data(FileXML *xml, int do_multiband) solo = xml->tag.get_property("SOLO", solo); attack_len = xml->tag.get_property("ATTACK_LEN", attack_len); release_len = xml->tag.get_property("RELEASE_LEN", release_len); + mkup_gain = xml->tag.get_property("MKUP_GAIN", mkup_gain); } levels.remove_all(); @@ -107,7 +104,7 @@ void BandConfig::copy_from(BandConfig *src) { levels.remove_all(); for( int i = 0; i < src->levels.total; i++ ) { - levels.append(src->levels.values[i]); + levels.append(src->levels[i]); } // readahead_len = src->readahead_len; @@ -116,6 +113,7 @@ void BandConfig::copy_from(BandConfig *src) freq = src->freq; solo = src->solo; bypass = src->bypass; + mkup_gain = src->mkup_gain; } int BandConfig::equiv(BandConfig *src) @@ -124,6 +122,7 @@ int BandConfig::equiv(BandConfig *src) solo != src->solo || bypass != src->bypass || freq != src->freq || + mkup_gain != src->mkup_gain || // !EQUIV(readahead_len, src->readahead_len) || !EQUIV(attack_len, src->attack_len) || !EQUIV(release_len, src->release_len) ) { @@ -131,8 +130,8 @@ int BandConfig::equiv(BandConfig *src) } for( int i = 0; i < levels.total && i < src->levels.total; i++ ) { - compressor_point_t *this_level = &levels.values[i]; - compressor_point_t *that_level = &src->levels.values[i]; + compressor_point_t *this_level = &levels[i]; + compressor_point_t *that_level = &src->levels[i]; if( !EQUIV(this_level->x, that_level->x) || !EQUIV(this_level->y, that_level->y) ) { return 0; @@ -145,7 +144,7 @@ int BandConfig::equiv(BandConfig *src) void BandConfig::boundaries(CompressorConfigBase *base) { for( int i = 0; i < levels.size(); i++ ) { - compressor_point_t *level = &levels.values[i]; + compressor_point_t *level = &levels[i]; if( level->x < base->min_db ) level->x = base->min_db; if( level->y < base->min_db ) level->y = base->min_db; if( level->x > base->max_db ) level->x = base->max_db; @@ -153,6 +152,18 @@ void BandConfig::boundaries(CompressorConfigBase *base) } } +void BandConfig::reset() +{ + freq = 0; + solo = 0; + bypass = 0; +// readahead_len = 1.0; + attack_len = 1.0; + release_len = 1.0; + mkup_gain = 0.0; + levels.remove_all(); +} + CompressorConfigBase::CompressorConfigBase(int total_bands) { @@ -163,13 +174,7 @@ CompressorConfigBase::CompressorConfigBase(int total_bands) min_value = DB::fromdb(min_db) + 0.001; // min_x = min_db; max_x = 0; // min_y = min_db; max_y = 0; - smoothing_only = 0; - trigger = 0; - input = CompressorConfigBase::TRIGGER; - for( int i=0; i= sz ) i = sz-1; - return levels.values[i].y; + return levels[i].y; } double CompressorConfigBase::get_x(int band, int i) @@ -229,7 +251,7 @@ double CompressorConfigBase::get_x(int band, int i) int sz = levels.size(); if( !sz ) return 0.; if( i >= sz ) i = sz-1; - return levels.values[i].x; + return levels[i].x; } double CompressorConfigBase::calculate_db(int band, double x) @@ -239,27 +261,30 @@ double CompressorConfigBase::calculate_db(int band, double x) if( !sz ) return x; compressor_point_t &point0 = levels[0]; double px0 = point0.x, py0 = point0.y, dx0 = x - px0; -// the only point. Use slope from min_db - if( sz == 1 ) - return py0 + dx0 * (py0 - min_db) / (px0 - min_db); // before 1st point, use 1:1 gain double ret = py0 + dx0; + if( sz > 1 ) { // find point <= x - int k = sz; - while( --k >= 0 && levels[k].x > x ); - if( k >= 0 ) { - compressor_point_t &curr = levels[k]; - double cx = curr.x, cy = curr.y, dx = x - cx; + int k = sz; + while( --k >= 0 && levels[k].x > x ); + if( k >= 0 ) { + compressor_point_t &curr = levels[k]; + double cx = curr.x, cy = curr.y, dx = x - cx; // between 2 points. Use slope between 2 points // the last point. Use slope of last 2 points - if( k >= sz-1 ) --k; - compressor_point_t &prev = levels[k+0]; - compressor_point_t &next = levels[k+1]; - double px = prev.x, py = prev.y; - double nx = next.x, ny = next.y; - ret = cy + dx * (ny - py) / (nx - px); + if( k >= sz-1 ) --k; + compressor_point_t &prev = levels[k+0]; + compressor_point_t &next = levels[k+1]; + double px = prev.x, py = prev.y; + double nx = next.x, ny = next.y; + ret = cy + dx * (ny - py) / (nx - px); + } } + else +// the only point. Use slope from min_db + ret = py0 + dx0 * (py0 - min_db) / (px0 - min_db); + ret += bands[band].mkup_gain; return ret; } @@ -529,10 +554,10 @@ void CompressorCanvasBase::update() // draw the points if( band == config->current_band ) { ArrayList &levels = config->bands[band].levels; + double mkup_gain = config->bands[band].mkup_gain; for( int i = 0; i < levels.size(); i++ ) { double x_db = config->get_x(band, i); - double y_db = config->get_y(band, i); - + double y_db = config->get_y(band, i) + mkup_gain; int x = db_to_x(x_db); int y = db_to_y(y_db); @@ -553,36 +578,35 @@ void CompressorCanvasBase::update() int CompressorCanvasBase::button_press_event() { // Check existing points - if( is_event_win() && - cursor_inside() ) { + if( is_event_win() && cursor_inside() ) { if( get_buttonpress() == 3 ) { menu->activate_menu(); return 1; } + int x = get_cursor_x(), y = get_cursor_y(); int band = config->current_band; ArrayList &levels = config->bands[band].levels; + double mkup_gain = config->bands[band].mkup_gain; for( int i=0; iget_x(config->current_band, i); - double y_db = config->get_y(config->current_band, i); + double y_db = config->get_y(config->current_band, i) + mkup_gain; - int x = db_to_x(x_db); - int y = db_to_y(y_db); + int px = db_to_x(x_db); + int py = db_to_y(y_db); - if( get_cursor_x() <= x + POINT_W / 2 && get_cursor_x() >= x - POINT_W / 2 && - get_cursor_y() <= y + POINT_W / 2 && get_cursor_y() >= y - POINT_W / 2 ) { + if( x <= px + POINT_W / 2 && x >= px - POINT_W / 2 && + y <= py + POINT_W / 2 && y >= py - POINT_W / 2 ) { current_operation = DRAG; current_point = i; return 1; } } - if( get_cursor_x() >= graph_x && - get_cursor_x() < graph_x + graph_w && - get_cursor_y() >= graph_y && - get_cursor_y() < graph_y + graph_h ) { + if( x >= graph_x && x < graph_x + graph_w && + y >= graph_y && y < graph_y + graph_h ) { // Create new point - double x_db = x_to_db(get_cursor_x()); - double y_db = y_to_db(get_cursor_y()); + double x_db = x_to_db(x); + double y_db = y_to_db(y) + mkup_gain; current_point = config->set_point(config->current_band, x_db, y_db); current_operation = DRAG; @@ -625,17 +649,19 @@ int CompressorCanvasBase::cursor_motion_event() { int band = config->current_band; ArrayList &levels = config->bands[band].levels; + double mkup_gain = config->bands[band].mkup_gain; + int x = get_cursor_x(), y = get_cursor_y(); if( current_operation == DRAG ) { - int x = get_cursor_x(); - int y = get_cursor_y(); double x_db = x_to_db(x); - double y_db = y_to_db(y); + double y_db = y_to_db(y) - mkup_gain; if( shift_down() ) { const int grid_precision = 6; - x_db = config->max_db + (double)(grid_precision * (int)((x_db - config->max_db) / grid_precision - 0.5)); - y_db = config->max_db + (double)(grid_precision * (int)((y_db - config->max_db) / grid_precision - 0.5)); + x_db = config->max_db + (double)(grid_precision * + (int)((x_db - config->max_db) / grid_precision - 0.5)); + y_db = config->max_db + (double)(grid_precision * + (int)((y_db - config->max_db) / grid_precision - 0.5)); } @@ -654,24 +680,21 @@ int CompressorCanvasBase::cursor_motion_event() for( int i = 0; i < levels.size(); i++ ) { double x_db = config->get_x(config->current_band, i); - double y_db = config->get_y(config->current_band, i); + double y_db = config->get_y(config->current_band, i) + mkup_gain; + int px = db_to_x(x_db); + int py = db_to_y(y_db); - int x = db_to_x(x_db); - int y = db_to_y(y_db); - - if( get_cursor_x() <= x + POINT_W / 2 && get_cursor_x() >= x - POINT_W / 2 && - get_cursor_y() <= y + POINT_W / 2 && get_cursor_y() >= y - POINT_W / 2 ) { + if( x <= px + POINT_W / 2 && x >= px - POINT_W / 2 && + y <= py + POINT_W / 2 && y >= py - POINT_W / 2 ) { new_cursor = UPRIGHT_ARROW_CURSOR; break; } } // out of active area - if( get_cursor_x() >= graph_x + graph_w || - get_cursor_y() < graph_y ) { + if( x >= graph_x + graph_w || y < graph_y ) { new_cursor = ARROW_CURSOR; } - if( new_cursor != get_cursor() ) { set_cursor(new_cursor, 0, 1); } @@ -741,11 +764,9 @@ void CompressorEngine::reset() slope_samples = 0; slope_current_sample = 0; peak_samples = 0; - slope_value2 = 1.0; slope_value1 = 1.0; - slope_samples = 0; - slope_current_sample = 0; - current_value = 1.0; + slope_value2 = 1.0; + current_value = 0.5; gui_frame_samples = 2048; gui_max_gain = 1.0; gui_frame_counter = 0; @@ -918,33 +939,19 @@ __LINE__, start_position + i, attack_slope, release_slope, current_value); bug = slope_current_sample / slope_samples; - if( config->smoothing_only ) { - for( int j = 0; j < channels; j++ ) { - output_buffer[j]->get_data()[i] = current_value * 2 - 1; - } - } - else { - double gain = 1.0; - - if( band_config->bypass ) { - gain = 1.0; - } - else { + double gain = 1.0; + if( !config->smoothing_only ) { + if( !band_config->bypass ) gain = config->calculate_gain(band, current_value); - } - // update the GUI frames if( fabs(gain - 1.0) > fabs(gui_max_gain - 1.0) ) { gui_max_gain = gain; } -//if( !EQUIV(gain, 1.0) ) printf("CompressorEngine::process %d gain=%f\n", __LINE__, gain); - // calculate the input level to draw. Should it be the trigger or a channel? GET_TRIGGER(input_buffer[channel]->get_data(), i); if( sample > gui_max_level ) { gui_max_level = sample; } - gui_frame_counter++; if( gui_frame_counter > gui_frame_samples ) { //if( !EQUIV(gui_frame_max, 1.0) ) printf("CompressorEngine::process %d offset=%d gui_frame_max=%f\n", __LINE__, i, gui_frame_max); @@ -955,10 +962,12 @@ __LINE__, start_position + i, attack_slope, release_slope, current_value); bug = gui_max_level = 0.0; gui_frame_counter = 0; } - - for( int j = 0; j < channels; j++ ) { - output_buffer[j]->get_data()[i] = input_buffer[j]->get_data()[i] * gain; - } + } + else { + gain = current_value > 0.01 ? 0.5 / current_value : 50.; + } + for( int j = 0; j < channels; j++ ) { + output_buffer[j]->get_data()[i] = input_buffer[j]->get_data()[i] * gain; } } } diff --git a/cinelerra-5.1/cinelerra/compressortools.h b/cinelerra-5.1/cinelerra/compressortools.h index abfb098d..37589f8e 100644 --- a/cinelerra-5.1/cinelerra/compressortools.h +++ b/cinelerra-5.1/cinelerra/compressortools.h @@ -100,6 +100,7 @@ public: void boundaries(CompressorConfigBase *base); void save_data(FileXML *xml, int number, int do_multiband); void read_data(FileXML *xml, int do_multiband); + void reset(); ArrayList levels; int solo; @@ -108,6 +109,7 @@ public: // double readahead_len; double attack_len; double release_len; + double mkup_gain; // upper frequency in Hz int freq; @@ -123,6 +125,8 @@ public: virtual int equivalent(CompressorConfigBase &that); void boundaries(); + void reset_base(); + void reset_bands(); void remove_point(int band, int number); int set_point(int band, double x, double y); double calculate_db(int band, double x); @@ -315,13 +319,6 @@ public: CompressorCanvasBase *canvas; }; -#define GRAPH_BG_COLOR 0x559977 -#define GRAPH_BORDER1_COLOR 0xeeaa44 -#define GRAPH_BORDER2_COLOR 0xeeaaff -#define GRAPH_GRID_COLOR 0xeeffcc -#define GRAPH_ACTIVE_COLOR 0x99cc77 -#define GRAPH_INACTIVE_COLOR 0x666688 - #endif diff --git a/cinelerra-5.1/cinelerra/ctracking.C b/cinelerra-5.1/cinelerra/ctracking.C index 52549c3d..23c7d1b4 100644 --- a/cinelerra-5.1/cinelerra/ctracking.C +++ b/cinelerra-5.1/cinelerra/ctracking.C @@ -65,6 +65,7 @@ int CTracking::stop_playback() { mwindow->gui->set_playing_back(0); Tracking::stop_playback(); + mwindow->stop_plugin_guis(); mwindow->edl->local_session->set_playback_end(get_tracking_position()); return 0; } diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index e3bf6b62..d932f679 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -3446,6 +3446,20 @@ void MWindow::update_plugin_guis(int do_keyframe_guis) if(do_keyframe_guis) update_keyframe_guis(); } +void MWindow::stop_plugin_guis() +{ +// Send new configuration to plugin GUI's + plugin_gui_lock->lock("MWindow::stop_plugin_guis"); + + for( int i=0; isize(); ++i ) { + PluginServer *ptr = plugin_guis->get(i); + if( edl->tracks->plugin_exists(ptr->plugin) ) { + ptr->render_stop(); + } + } + plugin_gui_lock->unlock(); +} + int MWindow::plugin_gui_open(Plugin *plugin) { int gui_id = plugin->gui_id; diff --git a/cinelerra-5.1/cinelerra/mwindow.h b/cinelerra-5.1/cinelerra/mwindow.h index b0e78772..66b43626 100644 --- a/cinelerra-5.1/cinelerra/mwindow.h +++ b/cinelerra-5.1/cinelerra/mwindow.h @@ -314,6 +314,7 @@ public: // Returns 1 if a GUI for the plugin is open so OpenGL routines can determine if // they can run. int plugin_gui_open(Plugin *plugin); + void stop_plugin_guis(); void show_keyframe_gui(Plugin *plugin); void hide_keyframe_guis(); diff --git a/cinelerra-5.1/cinelerra/pluginaclient.C b/cinelerra-5.1/cinelerra/pluginaclient.C index b1434b02..2970ed5a 100644 --- a/cinelerra-5.1/cinelerra/pluginaclient.C +++ b/cinelerra-5.1/cinelerra/pluginaclient.C @@ -116,13 +116,13 @@ int PluginAClient::process_buffer(int64_t size, Samples *buffer, void PluginAClient::begin_process_buffer() { - frame_buffer.destroy(); + client_frames.destroy(); } void PluginAClient::end_process_buffer() { - if( !frame_buffer.first ) return; - server->render_gui_frames(&frame_buffer); + if( !client_frames.first ) return; + server->render_gui_frames(&client_frames); } diff --git a/cinelerra-5.1/cinelerra/pluginclient.C b/cinelerra-5.1/cinelerra/pluginclient.C index dcafd890..333e895a 100644 --- a/cinelerra-5.1/cinelerra/pluginclient.C +++ b/cinelerra-5.1/cinelerra/pluginclient.C @@ -653,11 +653,11 @@ PluginClientFrame* PluginClientFrames::get_gui_frame(double pos, int dir) PluginClientFrame* PluginClient::get_gui_frame(double pos, int dir) { - return frame_buffer.get_gui_frame(pos, dir); + return client_frames.get_gui_frame(pos, dir); } PluginClientFrame* PluginClient::next_gui_frame() { - return frame_buffer.first; + return client_frames.first; } @@ -670,9 +670,9 @@ void PluginClient::update_gui() { } -int PluginClient::pending_gui_frames() +int PluginClient::pending_gui_frame() { - PluginClientFrame *frame = frame_buffer.first; + PluginClientFrame *frame = client_frames.first; if( !frame ) return 0; double tracking_position = get_tracking_position(); int direction = get_tracking_direction(); @@ -682,9 +682,28 @@ int PluginClient::pending_gui_frames() return ret; } +int PluginClient::pending_gui_frames() +{ + PluginClientFrame *frame = client_frames.first; + if( !frame ) return 0; + double tracking_position = get_tracking_position(); + int direction = get_tracking_direction(); + int count = 0; + while( frame && !(direction == PLAY_REVERSE ? + frame->position < tracking_position : + frame->position > tracking_position) ) { + ++count; frame=frame->next; + } + return count; +} + void PluginClient::add_gui_frame(PluginClientFrame *frame) { - frame_buffer.add_gui_frame(frame); + client_frames.add_gui_frame(frame); +} +int PluginClient::get_gui_frames() +{ + return client_frames.total(); } double PluginClient::get_tracking_position() @@ -699,7 +718,7 @@ int PluginClient::get_tracking_direction() void PluginClient::send_render_gui() { - server->send_render_gui(&frame_buffer); + server->send_render_gui(&client_frames); } void PluginClient::send_render_gui(void *data) @@ -719,7 +738,7 @@ void PluginClient::plugin_reset_gui_frames() BC_WindowBase *window = thread->get_window(); if( !window ) return; window->lock_window("PluginClient::plugin_reset_gui_frames"); - frame_buffer.reset(); + client_frames.reset(); window->unlock_window(); } @@ -729,11 +748,11 @@ void PluginClient::plugin_render_gui_frames(PluginClientFrames *frames) BC_WindowBase *window = thread->get_window(); if( !window ) return; window->lock_window("PluginClient::render_gui"); - while( frame_buffer.count > MAX_FRAME_BUFFER ) + while( client_frames.count > MAX_FRAME_BUFFER ) delete get_gui_frame(0, 0); -// append client frames to gui frame_buffer, consumes frames - frame_buffer.concatenate(frames); - frame_buffer.sort_position(get_tracking_direction()); +// append client frames to gui client_frames, consumes frames + client_frames.concatenate(frames); + client_frames.sort_position(get_tracking_direction()); update_timer->update(); window->unlock_window(); } diff --git a/cinelerra-5.1/cinelerra/pluginclient.h b/cinelerra-5.1/cinelerra/pluginclient.h index 67a1148f..068f5eac 100644 --- a/cinelerra-5.1/cinelerra/pluginclient.h +++ b/cinelerra-5.1/cinelerra/pluginclient.h @@ -24,7 +24,7 @@ // Base class inherited by all the different types of plugins. -#define MAX_FRAME_BUFFER 1024 +#define MAX_FRAME_BUFFER 8192 class PluginClient; @@ -486,6 +486,7 @@ public: // GUI updating wrappers for realtime plugins // Append frame to queue for next send_frame_buffer void add_gui_frame(PluginClientFrame *frame); + int get_gui_frames(); virtual void render_gui(void *data); virtual void render_gui(void *data, int size); @@ -499,7 +500,8 @@ public: void reset_plugin_gui_frames(); void plugin_reset_gui_frames(); void plugin_render_gui_frames(PluginClientFrames *frames); - int get_gui_frames(); +// first frame ready + int pending_gui_frame(); // Called by client to get the total number of frames to draw in update_gui int pending_gui_frames(); // pop frames until buffer passes position=pos(-1 or seconds) in direction=dir(-1,0,1) @@ -577,7 +579,7 @@ public: PluginClientThread *thread; // Frames for updating GUI - PluginClientFrames frame_buffer; + PluginClientFrames client_frames; // Time of last GUI update Timer *update_timer; diff --git a/cinelerra-5.1/cinelerra/pluginserver.h b/cinelerra-5.1/cinelerra/pluginserver.h index 16c2c5cb..fd01f396 100644 --- a/cinelerra-5.1/cinelerra/pluginserver.h +++ b/cinelerra-5.1/cinelerra/pluginserver.h @@ -274,7 +274,7 @@ public: // Called by MWindow to cause GUI to display void render_gui(void *data); void render_gui(void *data, int size); -// PluginClientFrames queuing to gui frame_buffer +// PluginClientFrames queuing to gui client_frames void send_reset_gui_frames(); void reset_gui_frames(); void render_gui_frames(PluginClientFrames *frames); diff --git a/cinelerra-5.1/cinelerra/trackpopup.C b/cinelerra-5.1/cinelerra/trackpopup.C index e914bf74..224343b4 100644 --- a/cinelerra-5.1/cinelerra/trackpopup.C +++ b/cinelerra-5.1/cinelerra/trackpopup.C @@ -573,15 +573,16 @@ void TrackPopupShowWindow::create_objects() add_subwindow(title = new BC_Title(x, y, text)); int x1 = x + title->get_w() + xS(10); int tw = get_w() - x1 - xS(20); - truncate_text(text, track->title, tw); - add_subwindow(new BC_Title(x1, y, text)); + char *track_title = get_truncated_text(MEDIUMFONT, track->title, tw); + add_subwindow(new BC_Title(x1, y, track_title)); + delete [] track_title; y += title->get_h() + 5; sprintf(text, _("Edit %d:"), track->edits->number_of(edit)+1); add_subwindow(title = new BC_Title(x, y, text)); - char edit_title[BCTEXTLEN]; - edit->get_title(edit_title); - truncate_text(text, edit_title, tw); - add_subwindow(new BC_Title(x1, y, text)); + edit->get_title(text); + char *edit_title = get_truncated_text(MEDIUMFONT, text, tw); + add_subwindow(new BC_Title(x1, y, edit_title)); + delete [] edit_title; y += title->get_h() + 5; EDLSession *session = mwindow->edl->session; diff --git a/cinelerra-5.1/ffmpeg/audio/user_flac.flac b/cinelerra-5.1/ffmpeg/audio/user_flac.flac new file mode 100644 index 00000000..2925b6a9 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/audio/user_flac.flac @@ -0,0 +1,6 @@ +flac flac +# Flac is a lossless audio codec with good compression +# and relatively low CPU load. Flac is suitable for +# permanent archiving of audio. +# Compression: 0-8 (fast-high), where 5 is used as standard. +#compression_level 8 diff --git a/cinelerra-5.1/ffmpeg/audio/user_s24le.mkv b/cinelerra-5.1/ffmpeg/audio/user_s24le.mkv new file mode 100644 index 00000000..5bdc55ff --- /dev/null +++ b/cinelerra-5.1/ffmpeg/audio/user_s24le.mkv @@ -0,0 +1,5 @@ +matroska pcm_s24le +# Lossless PCM (pcm_s24le) in Matroska container. +# If onlyaudio is exported, the extension should +# be "mka". +# ffmpeg --help encoder=pcm_s24le diff --git a/cinelerra-5.1/ffmpeg/audio/user_s24le.wav b/cinelerra-5.1/ffmpeg/audio/user_s24le.wav new file mode 100644 index 00000000..5c680646 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/audio/user_s24le.wav @@ -0,0 +1,5 @@ +wav pcm_s24le +# PCM (pcm_s24le) in RIFF WAVE. +# ffmpeg --help muxer=wav +# Use RF64 header rather than RIFF for large files: +rf64 1 diff --git a/cinelerra-5.1/ffmpeg/audio/user_s32le.wav b/cinelerra-5.1/ffmpeg/audio/user_s32le.wav new file mode 100644 index 00000000..9b9433bf --- /dev/null +++ b/cinelerra-5.1/ffmpeg/audio/user_s32le.wav @@ -0,0 +1,5 @@ +wav pcm_s32le +# PCM (pcm_s32le) in RIFF WAVE. +# ffmpeg --help muxer=wav +# Use RF64 header rather than RIFF for large files: +rf64 1 diff --git a/cinelerra-5.1/ffmpeg/video/user_ffv1.mkv b/cinelerra-5.1/ffmpeg/video/user_ffv1.mkv new file mode 100644 index 00000000..4ffb0d47 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/user_ffv1.mkv @@ -0,0 +1,8 @@ +matroska ffv1 +# FFV1 works lossless and is suitable for the +# permanent archiving of videos. Flac is often +# used as audio codec for this purpose. +# ffmpeg --help encoder=ffv1 +#threads=8 +context=1 +slices=30 diff --git a/cinelerra-5.1/ffmpeg/video/user_ffvhuff.mkv b/cinelerra-5.1/ffmpeg/video/user_ffvhuff.mkv new file mode 100644 index 00000000..7f4d13f6 --- /dev/null +++ b/cinelerra-5.1/ffmpeg/video/user_ffvhuff.mkv @@ -0,0 +1,6 @@ +matroska ffvhuff +# FFvHuff is a further development of HuffYUV. +# Lossless, fast and smaller file sizes than +# HuffYUV. Lossless PCM is ideally suited as +# an audio codec. +# ffmpeg --help encoder=ffvhuff diff --git a/cinelerra-5.1/guicast/arraylist.h b/cinelerra-5.1/guicast/arraylist.h index 602557f5..2fade202 100644 --- a/cinelerra-5.1/guicast/arraylist.h +++ b/cinelerra-5.1/guicast/arraylist.h @@ -47,14 +47,14 @@ public: remove(); } void remove_block(int i, int n) { - if( i >= total ) return; - for( n+=i; n= total || !n ) return; + for( n+=i; n= total ) return; - for( n+=i; n= total || !n ) return; + for( int j=i,k=n; --k>=0 && jpixmap->draw_vframe(vicon, icon_x, icon_y); else if( item->icon ) gui->pixmap->draw_pixmap(item->icon, icon_x, icon_y); - char item_text[BCTEXTLEN]; - if( display_format == LISTBOX_ICONS_PACKED ) - gui->truncate_text(item_text, item->text, text_w); - else - strcpy(item_text, item->text); + char *item_text = display_format == LISTBOX_ICONS_PACKED ? + get_truncated_text(MEDIUMFONT, item->text, text_w) : + cstrdup(item->text); gui->draw_text(text_x, text_y + get_baseline(item), item_text); + delete [] item_text; } else item->set_in_view(0); diff --git a/cinelerra-5.1/guicast/bcpopupmenu.C b/cinelerra-5.1/guicast/bcpopupmenu.C index 62a2b403..a502ee08 100644 --- a/cinelerra-5.1/guicast/bcpopupmenu.C +++ b/cinelerra-5.1/guicast/bcpopupmenu.C @@ -216,13 +216,13 @@ int BC_PopupMenu::draw_face(int dx, int color) int available_w = get_w() - calculate_w(margin, 0, use_title); if( !icon ) { - char truncated[BCTEXTLEN]; - truncate_text(truncated, text, available_w); + char *truncated = get_truncated_text(MEDIUMFONT, text, available_w); set_font(MEDIUMFONT); BC_WindowBase::draw_center_text( dx + available_w/2 + margin + offset, (int)((float)get_h()/2 + get_text_ascent(MEDIUMFONT)/2 - 2) + offset, truncated); + delete [] truncated; } if( icon ) { diff --git a/cinelerra-5.1/guicast/bcwindowbase.C b/cinelerra-5.1/guicast/bcwindowbase.C index e979d5ca..e9047f29 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.C +++ b/cinelerra-5.1/guicast/bcwindowbase.C @@ -3060,6 +3060,39 @@ int BC_WindowBase::get_text_height(int font, const char *text) return h * rowh; } +// truncate the text with ... & return a new string +char *BC_WindowBase::get_truncated_text(int font, const char *text, int max_w) +{ + char *result = cstrdup(text); + int text_w = get_text_width(font, text); + int ci = -1, len = strlen(text); + if( text_w > max_w ) { +// get center of string + int cx = text_w/2, best = INT_MAX; + for( int i=1; i<=len; ++i ) { + int cw = get_text_width(font, text, i); + if( abs(cw-cx) < abs(best-cx) ) { + best = cw; ci = i; + } + } + } + if( ci > 0 && ci < len-1 ) { +// insert ... in the center + result[ci-1] = result[ci] = result[ci+1] = '.'; + + while( ci-2>=0 && ci+2<(int)strlen(result) && + get_text_width(font, result) > max_w ) { +// take away a character from the longer side + int left_w = get_text_width(font, result, ci-2); + int right_w = get_text_width(font, result + ci+3); + int i = left_w > right_w ? --ci-1 : ci+2; + while( (result[i]=result[i+1])!=0 ) ++i; + } + } + + return result; +} + BC_Bitmap* BC_WindowBase::new_bitmap(int w, int h, int color_model) { if(color_model < 0) color_model = top_level->get_color_model(); diff --git a/cinelerra-5.1/guicast/bcwindowbase.h b/cinelerra-5.1/guicast/bcwindowbase.h index 153aab37..6acffd1d 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.h +++ b/cinelerra-5.1/guicast/bcwindowbase.h @@ -342,6 +342,8 @@ public: int get_text_height(int font, const char *text = 0); int get_text_width(int font, const char *text, int length = -1); int get_text_width(int font, const wchar_t *text, int length = -1); +// truncate the text with ... & return a new string + char *get_truncated_text(int font, const char *text, int max_w); BC_Clipboard* get_clipboard(); void set_dragging(int value); int set_w(int w); @@ -407,8 +409,6 @@ public: int length, BC_Pixmap *pixmap); int draw_single_text(int draw, int font, int x, int y, const wchar_t *text, int length = -1, BC_Pixmap *pixmap = 0); -// truncate the text to a ... version that fits in the width, using the current_font - void truncate_text(char *result, const char *text, int w); void draw_center_text(int x, int y, const char *text, int length = -1); void draw_line(int x1, int y1, int x2, int y2, BC_Pixmap *pixmap = 0); void draw_polygon(ArrayList *x, ArrayList *y, BC_Pixmap *pixmap = 0); diff --git a/cinelerra-5.1/guicast/bcwindowdraw.C b/cinelerra-5.1/guicast/bcwindowdraw.C index 7164bab7..ab44e7cc 100644 --- a/cinelerra-5.1/guicast/bcwindowdraw.C +++ b/cinelerra-5.1/guicast/bcwindowdraw.C @@ -380,40 +380,6 @@ int BC_WindowBase::draw_single_text(int draw, int font, return x - x0; } -void BC_WindowBase::truncate_text(char *result, const char *text, int w) -{ - int new_w = get_text_width(current_font, text); - - if( new_w > w ) { - const char* separator = "..."; - int separator_w = get_text_width(current_font, separator); -// can't fit - if( separator_w >= w ) { - strcpy(result, separator); - return; - } - - int text_len = strlen(text); -// widen middle gap until it fits - for( int i=text_len/2; i>0; --i ) { - strncpy(result, text, i); - result[i] = 0; - strcat(result, separator); - strncat(result, text + text_len - i, i); - result[i + strlen(separator) + i] = 0; - new_w = get_text_width(current_font, result); -//printf("BC_WindowBase::truncate_text %d %d %d %s\n", __LINE__, new_w, w, result); - if(new_w < w) return; - } - -// Didn't fit - strcpy(result, separator); - return; - } - - strcpy(result, text); -} - void BC_WindowBase::draw_center_text(int x, int y, const char *text, int length) { if(length < 0) length = strlen(text); diff --git a/cinelerra-5.1/plugin_defs b/cinelerra-5.1/plugin_defs index faff9ee0..86fa7fce 100644 --- a/cinelerra-5.1/plugin_defs +++ b/cinelerra-5.1/plugin_defs @@ -129,6 +129,7 @@ audio := \ cdripper \ chorus \ compressor \ + compressormulti \ dcoffset \ delayaudio \ denoise \ diff --git a/cinelerra-5.1/plugins/audioscope/audioscope.C b/cinelerra-5.1/plugins/audioscope/audioscope.C index 356f8112..9a8da423 100644 --- a/cinelerra-5.1/plugins/audioscope/audioscope.C +++ b/cinelerra-5.1/plugins/audioscope/audioscope.C @@ -232,10 +232,7 @@ void AudioScopeCanvas::calculate_point() CLAMP(x, 0, get_w() - 1); CLAMP(y, 0, get_h() - 1); - ((AudioScopeWindow*)plugin->thread->window)->calculate_probe( - x, - y, - 1); + ((AudioScopeWindow*)plugin->thread->window)->calculate_probe(x, y, 1); //printf("AudioScopeCanvas::calculate_point %d %d\n", __LINE__, Freq::tofreq(freq_index)); } @@ -338,14 +335,11 @@ int AudioScopeMode::text_to_mode(const char *text) AudioScopeWindow::AudioScopeWindow(AudioScope *plugin) - : PluginClientWindow(plugin, - plugin->w, - plugin->h, - xS(320), - yS(320), - 1) + : PluginClientWindow(plugin, plugin->w, plugin->h, xS(320), yS(320), 1) { - this->plugin = plugin; + this->plugin = plugin; + probe_x = -1; + probe_y = -1; } AudioScopeWindow::~AudioScopeWindow() @@ -889,20 +883,15 @@ void AudioScope::update_gui() //printf("AudioScope::update_gui %d %d\n", __LINE__, total_frames); - +// expire old history frames + int new_frames = frame_history.size() + total_frames; + int expired = new_frames - config.history_size; + if( expired > 0 ) + frame_history.remove_object_block(0, expired); // Shift frames into history for(int frame = 0; frame < total_frames; frame++) - { - if(frame_history.size() >= config.history_size) - frame_history.remove_object_number(0); - - frame_history.append(frame_buffer.get(0)); - frame_buffer.remove_number(0); - } - -// Reduce history size - while(frame_history.size() > config.history_size) - frame_history.remove_object_number(0); + frame_history.append(frame_buffer.get(frame)); + frame_buffer.remove_block(0, total_frames); // Point probe data at history current_frame = frame_history.get(frame_history.size() - 1); diff --git a/cinelerra-5.1/plugins/compressor/compressor.C b/cinelerra-5.1/plugins/compressor/compressor.C index 956d2ae7..550f5c6a 100644 --- a/cinelerra-5.1/plugins/compressor/compressor.C +++ b/cinelerra-5.1/plugins/compressor/compressor.C @@ -214,8 +214,8 @@ int CompressorEffect::process_buffer(int64_t size, Samples **buffer, while( levels.size() < nbands ) levels.append(); for( int i=0; ilevels.total; ++i ) { - levels.values[i].x = DB::fromdb(band_config->levels.values[i].x); - levels.values[i].y = DB::fromdb(band_config->levels.values[i].y); + levels[i].x = DB::fromdb(band_config->levels[i].x); + levels[i].y = DB::fromdb(band_config->levels[i].y); } // min_x = DB::fromdb(config.min_db); // min_y = DB::fromdb(config.min_db); @@ -337,7 +337,6 @@ void CompressorConfig::copy_from(CompressorConfig &that) int CompressorConfig::equivalent(CompressorConfig &that) { return CompressorConfigBase::equivalent(that); - return 1; } void CompressorConfig::interpolate(CompressorConfig &prev, @@ -444,7 +443,19 @@ void CompressorWindow::create_objects() x_text->create_objects(); y += x_text->get_h() + margin; - add_subwindow(clear = new CompressorClear(plugin, x, y)); + add_subwindow(clear = new CompressorClear(plugin, this, x, y)); + y += clear->get_h() + margin; + + add_subwindow(title = new BC_Title(x, y, "Gain:")); + y += title->get_h() + margin; + BandConfig *band_config = &plugin->config.bands[0]; + add_subwindow(mkup_gain = new CompressorMkupGain(plugin, this, x, y, + &band_config->mkup_gain, -10., 10.)); + y += mkup_gain->get_h() + margin; + + add_subwindow(reset = new CompressorReset(plugin, this, x, y)); +// y += reset->get_h() + margin; + x = xS(10); y = get_h() - yS(40); @@ -457,6 +468,8 @@ void CompressorWindow::create_objects() void CompressorWindow::update() { update_textboxes(); + BandConfig *band_config = &plugin->config.bands[0]; + mkup_gain->update(band_config->mkup_gain); canvas->update(); } @@ -489,8 +502,8 @@ void CompressorWindow::update_textboxes() release->update((float)band_config->release_len); smooth->update(plugin->config.smoothing_only); if( canvas->current_operation == CompressorCanvas::DRAG ) { - x_text->update((float)band_config->levels.values[canvas->current_point].x); - y_text->update((float)band_config->levels.values[canvas->current_point].y); + x_text->update((float)band_config->levels[canvas->current_point].x); + y_text->update((float)band_config->levels[canvas->current_point].y); } } @@ -573,6 +586,7 @@ CompressorX::CompressorX(CompressorEffect *plugin, plugin->config.min_db, plugin->config.max_db, x, y, xS(100)) { this->plugin = plugin; + this->window = window; set_increment(0.1); set_precision(2); } @@ -581,8 +595,8 @@ int CompressorX::handle_event() BandConfig *band_config = &plugin->config.bands[0]; int current_point = ((CompressorWindow*)plugin->thread->window)->canvas->current_point; if( current_point < band_config->levels.total ) { - band_config->levels.values[current_point].x = atof(get_text()); - ((CompressorWindow*)plugin->thread->window)->canvas->update(); + band_config->levels[current_point].x = atof(get_text()); + window->canvas->update(); plugin->send_configure_change(); } return 1; @@ -594,6 +608,7 @@ CompressorY::CompressorY(CompressorEffect *plugin, plugin->config.min_db, plugin->config.max_db, x, y, xS(100)) { this->plugin = plugin; + this->window = window; set_increment(0.1); set_precision(2); } @@ -602,8 +617,8 @@ int CompressorY::handle_event() BandConfig *band_config = &plugin->config.bands[0]; int current_point = ((CompressorWindow*)plugin->thread->window)->canvas->current_point; if( current_point < band_config->levels.total ) { - band_config->levels.values[current_point].y = atof(get_text()); - ((CompressorWindow*)plugin->thread->window)->canvas->update(); + band_config->levels[current_point].y = atof(get_text()); + window->canvas->update(); plugin->send_configure_change(); } return 1; @@ -668,22 +683,63 @@ int CompressorInput::text_to_value(char *text) return CompressorConfig::TRIGGER; } -CompressorClear::CompressorClear(CompressorEffect *plugin, int x, int y) +CompressorClear::CompressorClear(CompressorEffect *plugin, + CompressorWindow *window, int x, int y) : BC_GenericButton(x, y, _("Clear")) { this->plugin = plugin; + this->window = window; } int CompressorClear::handle_event() { BandConfig *band_config = &plugin->config.bands[0]; - band_config->levels.remove_all(); + band_config->reset(); //plugin->config.dump(); - ((CompressorWindow*)plugin->thread->window)->update(); + window->update(); + plugin->send_configure_change(); + return 1; +} + +CompressorReset::CompressorReset(CompressorEffect *plugin, + CompressorWindow *window, int x, int y) + : BC_GenericButton(x, y, _("Reset")) +{ + this->plugin = plugin; + this->window = window; +} + +int CompressorReset::handle_event() +{ + plugin->config.reset_bands(); + plugin->config.reset_base(); +//plugin->config.dump(); + window->update(); plugin->send_configure_change(); return 1; } + +CompressorMkupGain::CompressorMkupGain(CompressorEffect *plugin, + CompressorWindow *window, int x, int y, + double *output, double min, double max) + : BC_FPot(x, y, *output, min, max) +{ + this->plugin = plugin; + this->window = window; + this->output = output; + set_precision(0.01); +} + +int CompressorMkupGain::handle_event() +{ + *output = get_value(); + plugin->send_configure_change(); + window->canvas->update(); + return 1; +} + + CompressorSmooth::CompressorSmooth(CompressorEffect *plugin, int x, int y) : BC_CheckBox(x, y, plugin->config.smoothing_only, _("Smooth only")) { diff --git a/cinelerra-5.1/plugins/compressor/compressor.h b/cinelerra-5.1/plugins/compressor/compressor.h index dc9c54ad..ec26cfb3 100644 --- a/cinelerra-5.1/plugins/compressor/compressor.h +++ b/cinelerra-5.1/plugins/compressor/compressor.h @@ -76,9 +76,32 @@ public: class CompressorClear : public BC_GenericButton { public: - CompressorClear(CompressorEffect *plugin, int x, int y); + CompressorClear(CompressorEffect *plugin, CompressorWindow *window, + int x, int y); + int handle_event(); + CompressorEffect *plugin; + CompressorWindow *window; +}; + +class CompressorReset : public BC_GenericButton +{ +public: + CompressorReset(CompressorEffect *plugin, + CompressorWindow *window, int x, int y); + int handle_event(); + CompressorEffect *plugin; + CompressorWindow *window; +}; + +class CompressorMkupGain : public BC_FPot +{ +public: + CompressorMkupGain(CompressorEffect *plugin, CompressorWindow *window, + int x, int y, double *output, double min, double max); int handle_event(); + CompressorWindow *window; CompressorEffect *plugin; + double *output; }; class CompressorX : public BC_TumbleTextBox @@ -88,6 +111,7 @@ public: int x, int y); int handle_event(); CompressorEffect *plugin; + CompressorWindow *window; }; class CompressorY : public BC_TumbleTextBox @@ -97,6 +121,7 @@ public: int x, int y); int handle_event(); CompressorEffect *plugin; + CompressorWindow *window; }; class CompressorTrigger : public BC_TumbleTextBox @@ -146,6 +171,8 @@ public: CompressorLookAhead *readahead; CompressorAttack *attack; CompressorClear *clear; + CompressorReset *reset; + CompressorMkupGain *mkup_gain; CompressorX *x_text; CompressorY *y_text; CompressorTrigger *trigger; diff --git a/cinelerra-5.1/plugins/compressormulti/comprmulti.C b/cinelerra-5.1/plugins/compressormulti/comprmulti.C index 2207ba08..0e7a1852 100644 --- a/cinelerra-5.1/plugins/compressormulti/comprmulti.C +++ b/cinelerra-5.1/plugins/compressormulti/comprmulti.C @@ -212,7 +212,7 @@ void ComprMultiEffect::save_data(KeyFrame *keyframe) void ComprMultiEffect::dump_frames() { printf("tracking %f, direction %d\n", get_tracking_position(), get_tracking_direction()); - CompressorClientFrame *cfp = (CompressorClientFrame *)frame_buffer.first; + CompressorClientFrame *cfp = (CompressorClientFrame *)client_frames.first; for( int n=0; cfp; cfp=(CompressorClientFrame *)cfp->next,++n ) { switch( cfp->type ) { case GAIN_COMPRESSORFRAME: { @@ -244,7 +244,7 @@ void ComprMultiEffect::update_gui() //printf("ComprMultiEffect::update_gui %d %d %d\n", __LINE__, reconfigured, total_frames); if( reconfigured ) window->update(); - if( pending_gui_frames() ) + if( pending_gui_frame() ) window->update_eqcanvas(); window->unlock_window(); } @@ -632,7 +632,7 @@ void BandState::calculate_envelope() } } - +#if 0 void BandState::process_readbehind(int size, int reaction_samples, int decay_samples, int trigger) { @@ -819,7 +819,7 @@ void BandState::process_readahead(int size, int preview_samples, } } } - +#endif ComprMultiFFT::ComprMultiFFT(ComprMultiEffect *plugin, int channel) { diff --git a/cinelerra-5.1/plugins/compressormulti/comprmulti.h b/cinelerra-5.1/plugins/compressormulti/comprmulti.h index bc542670..d334ba5e 100644 --- a/cinelerra-5.1/plugins/compressormulti/comprmulti.h +++ b/cinelerra-5.1/plugins/compressormulti/comprmulti.h @@ -77,10 +77,10 @@ public: void reconfigure(); // calculate the envelope for only this band void calculate_envelope(); - void process_readbehind(int size, - int reaction_samples, int decay_samples, int trigger); - void process_readahead(int size, int preview_samples, - int reaction_samples, int decay_samples, int trigger); +// void process_readbehind(int size, +// int reaction_samples, int decay_samples, int trigger); +// void process_readahead(int size, int preview_samples, +// int reaction_samples, int decay_samples, int trigger); void allocate_filtered(int new_size); // bandpass filter for this band diff --git a/cinelerra-5.1/plugins/compressormulti/comprmultigui.C b/cinelerra-5.1/plugins/compressormulti/comprmultigui.C index 95b4c5d9..24aea81b 100644 --- a/cinelerra-5.1/plugins/compressormulti/comprmultigui.C +++ b/cinelerra-5.1/plugins/compressormulti/comprmultigui.C @@ -72,12 +72,6 @@ void ComprMultiWindow::create_objects() int control_margin = xS(150); int canvas_y2 = get_h() * 2 / 3; BC_Title *title; - BandConfig *band_config = &plugin->config.bands[plugin->config.current_band]; - BandConfig *prev_band = 0; - if( plugin->config.current_band > 0 ) { - prev_band = &plugin->config.bands[plugin->config.current_band - 1]; - } - add_subwindow(title = new BC_Title(x, y, "In:")); int y2 = y + title->get_h() + margin; EDL *edl = plugin->get_edl(); @@ -161,35 +155,27 @@ void ComprMultiWindow::create_objects() x_text->create_objects(); y += x_text->get_h() + margin; - add_subwindow(clear = new ComprMultiClear(plugin, x, y)); + add_subwindow(clear = new ComprMultiClear(plugin, this, x, y)); y += clear->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Freq range:"))); - y += title->get_h(); + add_subwindow(title = new BC_Title(x, y, _("Gain:"))); + + int x2 = get_w() - (margin + BC_Pot::calculate_w()) * 2; + int x3 = get_w() - (margin + BC_Pot::calculate_w()); + add_subwindow(title = new BC_Title(x2, y, _("Freq range:"))); + y += title->get_h() + margin; + add_subwindow(mkup_gain = new ComprMultiMkupGain(plugin, this, x, y, + &plugin->config.bands[plugin->config.current_band].mkup_gain, + -10., 10.)); // the previous high frequency - int *ptr = 0; - if( prev_band ) { - ptr = &prev_band->freq; - } - - add_subwindow(freq1 = new ComprMultiQPot(this, - plugin, - get_w() - (margin + BC_Pot::calculate_w()) * 2, - y, - ptr)); - + add_subwindow(freq1 = new ComprMultiQPot(this, plugin, x2, y, + plugin->config.current_band == 0 ? 0 : + &plugin->config.bands[plugin->config.current_band-1].freq)); // the current high frequency - ptr = &band_config->freq; - if( plugin->config.current_band == TOTAL_BANDS - 1 ) { - ptr = 0; - } - - add_subwindow(freq2 = new ComprMultiQPot(this, - plugin, - get_w() - margin - BC_Pot::calculate_w(), - y, - ptr)); + add_subwindow(freq2 = new ComprMultiQPot(this, plugin, x3, y, + plugin->config.current_band!=TOTAL_BANDS-1 ? 0 : + &plugin->config.bands[plugin->config.current_band].freq)); y += freq1->get_h() + margin; BC_Bar *bar; @@ -198,10 +184,10 @@ void ComprMultiWindow::create_objects() add_subwindow(title = new BC_Title(x, y, _("Trigger Type:"))); y += title->get_h(); - add_subwindow(input = new ComprMultiInput(plugin, x, y)); + add_subwindow(input = new ComprMultiInput(plugin, this, x, y)); input->create_objects(); y += input->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Trigger:"))); + add_subwindow(title = new BC_Title(x, y, _("Channel:"))); y += title->get_h(); trigger = new ComprMultiTrigger(plugin, this, x, y); @@ -220,14 +206,13 @@ void ComprMultiWindow::create_objects() add_subwindow(title = new BC_Title(x, y, _("Window size:"))); y += title->get_h(); - add_subwindow(size = new ComprMultiSize(this, - plugin, - x, - y)); + add_subwindow(size = new ComprMultiSize(this, plugin, x, y)); size->create_objects(); size->update(plugin->config.window_size); y += size->get_h() + margin; + add_subwindow(reset = new ComprMultiReset(plugin, this, x, y)); + canvas->create_objects(); update_eqcanvas(); show_window(); @@ -236,28 +221,15 @@ void ComprMultiWindow::create_objects() // called when the user selects a different band void ComprMultiWindow::update() { - BandConfig *band_config = &plugin->config.bands[plugin->config.current_band]; - - for( int i = 0; i < TOTAL_BANDS; i++ ) { - if( plugin->config.current_band == i ) { - band[i]->update(1); - } - else { - band[i]->update(0); - } - } + int curr_band = plugin->config.current_band; + for( int i = 0; i < TOTAL_BANDS; i++ ) + band[i]->update(curr_band == i); - int *ptr = 0; - if( plugin->config.current_band > 0 ) { - ptr = &plugin->config.bands[plugin->config.current_band - 1].freq; - } - else { - ptr = 0; - } - - freq1->output = ptr; - if( ptr ) { - freq1->update(*ptr); + int *ptr1 = !curr_band ? 0 : + &plugin->config.bands[curr_band-1].freq; + freq1->output = ptr1; + if( ptr1 ) { + freq1->update(*ptr1); freq1->enable(); } else { @@ -266,16 +238,11 @@ void ComprMultiWindow::update() } // top band edits the penultimate band - if( plugin->config.current_band < TOTAL_BANDS - 1 ) { - ptr = &band_config->freq; - } - else { - ptr = 0; - } - - freq2->output = ptr; - if( ptr ) { - freq2->update(*ptr); + int *ptr2 = curr_band == TOTAL_BANDS-1 ? 0 : + &plugin->config.bands[curr_band].freq; + freq2->output = ptr2; + if( ptr2 ) { + freq2->update(*ptr2); freq2->enable(); } else { @@ -284,6 +251,10 @@ void ComprMultiWindow::update() } q->update(plugin->config.q); + BandConfig *band_config = &plugin->config.bands[curr_band]; + double *ptr3 = &band_config->mkup_gain; + mkup_gain->output = ptr3; + mkup_gain->update(*ptr3); solo->update(band_config->solo); bypass->update(band_config->bypass); size->update(plugin->config.window_size); @@ -448,7 +419,6 @@ int ComprMultiSize::handle_event() return 1; } - void ComprMultiSize::create_objects() { add_item(new BC_MenuItem("2048")); @@ -461,7 +431,6 @@ void ComprMultiSize::create_objects() add_item(new BC_MenuItem("262144")); } - void ComprMultiSize::update(int size) { char string[BCTEXTLEN]; @@ -470,6 +439,26 @@ void ComprMultiSize::update(int size) } +ComprMultiMkupGain::ComprMultiMkupGain(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y, + double *output, double min, double max) + : BC_FPot(x, y, *output, min, max) +{ + this->window = window; + this->plugin = plugin; + this->output = output; + set_precision(0.01); +} + +int ComprMultiMkupGain::handle_event() +{ + *output = get_value(); + plugin->send_configure_change(); + window->canvas->update(); + return 1; +} + + ComprMultiCanvas::ComprMultiCanvas(ComprMultiEffect *plugin, ComprMultiWindow *window, int x, int y, int w, int h) : CompressorCanvasBase(&plugin->config, plugin, window, x, y, w, h) @@ -483,7 +472,7 @@ void ComprMultiCanvas::update_window() ComprMultiReaction::ComprMultiReaction(ComprMultiEffect *plugin, - ComprMultiWindow *window, int x, int y) + ComprMultiWindow *window, int x, int y) : BC_TumbleTextBox(window, (float)plugin->config.bands[plugin->config.current_band].attack_len, (float)MIN_ATTACK, (float)MAX_ATTACK, x, y, xS(100)) @@ -503,7 +492,7 @@ int ComprMultiReaction::handle_event() ComprMultiDecay::ComprMultiDecay(ComprMultiEffect *plugin, - ComprMultiWindow *window, int x, int y) + ComprMultiWindow *window, int x, int y) : BC_TumbleTextBox(window, (float)plugin->config.bands[plugin->config.current_band].release_len, (float)MIN_DECAY, (float)MAX_DECAY, x, y, xS(100)) @@ -521,11 +510,12 @@ int ComprMultiDecay::handle_event() ComprMultiX::ComprMultiX(ComprMultiEffect *plugin, - ComprMultiWindow *window, int x, int y) + ComprMultiWindow *window, int x, int y) : BC_TumbleTextBox(window, (float)0.0, plugin->config.min_db, plugin->config.max_db, x, y, xS(100)) { this->plugin = plugin; + this->window = window; set_increment(0.1); set_precision(2); } @@ -533,10 +523,10 @@ int ComprMultiX::handle_event() { BandConfig *band_config = &plugin->config.bands[plugin->config.current_band]; - int current_point = ((ComprMultiWindow*)plugin->thread->window)->canvas->current_point; + int current_point = window->canvas->current_point; if( current_point < band_config->levels.total ) { band_config->levels.values[current_point].x = atof(get_text()); - ((ComprMultiWindow*)plugin->thread->window)->canvas->update(); + window->canvas->update(); plugin->send_configure_change(); } return 1; @@ -544,13 +534,12 @@ int ComprMultiX::handle_event() ComprMultiY::ComprMultiY(ComprMultiEffect *plugin, - ComprMultiWindow *window, - int x, - int y) + ComprMultiWindow *window, int x, int y) : BC_TumbleTextBox(window, (float)0.0, plugin->config.min_db, plugin->config.max_db, x, y, xS(100)) { this->plugin = plugin; + this->window = window; set_increment(0.1); set_precision(2); } @@ -558,10 +547,10 @@ int ComprMultiY::handle_event() { BandConfig *band_config = &plugin->config.bands[plugin->config.current_band]; - int current_point = ((ComprMultiWindow*)plugin->thread->window)->canvas->current_point; + int current_point = window->canvas->current_point; if( current_point < band_config->levels.total ) { band_config->levels.values[current_point].y = atof(get_text()); - ((ComprMultiWindow*)plugin->thread->window)->canvas->update(); + window->canvas->update(); plugin->send_configure_change(); } return 1; @@ -569,9 +558,7 @@ int ComprMultiY::handle_event() ComprMultiTrigger::ComprMultiTrigger(ComprMultiEffect *plugin, - ComprMultiWindow *window, - int x, - int y) + ComprMultiWindow *window, int x, int y) : BC_TumbleTextBox(window, (int)plugin->config.trigger, MIN_TRIGGER, MAX_TRIGGER, x, y, xS(100)) { @@ -585,16 +572,18 @@ int ComprMultiTrigger::handle_event() } -ComprMultiInput::ComprMultiInput(ComprMultiEffect *plugin, int x, int y) +ComprMultiInput::ComprMultiInput(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y) : BC_PopupMenu(x, y, xS(100), ComprMultiInput::value_to_text(plugin->config.input), 1) { this->plugin = plugin; + this->window = window; } int ComprMultiInput::handle_event() { plugin->config.input = text_to_value(get_text()); - ((ComprMultiWindow*)plugin->thread->window)->update(); + window->update(); plugin->send_configure_change(); return 1; } @@ -627,19 +616,41 @@ int ComprMultiInput::text_to_value(char *text) } -ComprMultiClear::ComprMultiClear(ComprMultiEffect *plugin, int x, int y) +ComprMultiClear::ComprMultiClear(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y) : BC_GenericButton(x, y, _("Clear")) { this->plugin = plugin; + this->window = window; } int ComprMultiClear::handle_event() { BandConfig *band_config = &plugin->config.bands[plugin->config.current_band]; - + band_config->mkup_gain = 0.0; band_config->levels.remove_all(); //plugin->config.dump(); - ((ComprMultiWindow*)plugin->thread->window)->update(); + window->update(); + plugin->send_configure_change(); + return 1; +} + +ComprMultiReset::ComprMultiReset(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y) + : BC_GenericButton(x, y, _("Reset")) +{ + this->plugin = plugin; + this->window = window; +} + +int ComprMultiReset::handle_event() +{ + plugin->config.q = 1.0; + plugin->config.window_size = 4096; + plugin->config.reset_bands(); + plugin->config.reset_base(); +//plugin->config.dump(); + window->update(); plugin->send_configure_change(); return 1; } diff --git a/cinelerra-5.1/plugins/compressormulti/comprmultigui.h b/cinelerra-5.1/plugins/compressormulti/comprmultigui.h index b7722163..e0fa8661 100644 --- a/cinelerra-5.1/plugins/compressormulti/comprmultigui.h +++ b/cinelerra-5.1/plugins/compressormulti/comprmultigui.h @@ -58,7 +58,7 @@ class ComprMultiReaction : public BC_TumbleTextBox { public: ComprMultiReaction(ComprMultiEffect *plugin, - ComprMultiWindow *window, int x, int y); + ComprMultiWindow *window, int x, int y); int handle_event(); ComprMultiEffect *plugin; }; @@ -66,23 +66,28 @@ public: class ComprMultiX : public BC_TumbleTextBox { public: - ComprMultiX(ComprMultiEffect *plugin, ComprMultiWindow *window, int x, int y); + ComprMultiX(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y); int handle_event(); ComprMultiEffect *plugin; + ComprMultiWindow *window; }; class ComprMultiY : public BC_TumbleTextBox { public: - ComprMultiY(ComprMultiEffect *plugin, ComprMultiWindow *window, int x, int y); + ComprMultiY(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y); int handle_event(); ComprMultiEffect *plugin; + ComprMultiWindow *window; }; class ComprMultiTrigger : public BC_TumbleTextBox { public: - ComprMultiTrigger(ComprMultiEffect *plugin, ComprMultiWindow *window, int x, int y); + ComprMultiTrigger(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y); int handle_event(); ComprMultiEffect *plugin; }; @@ -90,7 +95,8 @@ public: class ComprMultiDecay : public BC_TumbleTextBox { public: - ComprMultiDecay(ComprMultiEffect *plugin, ComprMultiWindow *window, int x, int y); + ComprMultiDecay(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y); int handle_event(); ComprMultiEffect *plugin; }; @@ -99,9 +105,21 @@ public: class ComprMultiClear : public BC_GenericButton { public: - ComprMultiClear(ComprMultiEffect *plugin, int x, int y); + ComprMultiClear(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y); + int handle_event(); + ComprMultiEffect *plugin; + ComprMultiWindow *window; +}; + +class ComprMultiReset : public BC_GenericButton +{ +public: + ComprMultiReset(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y); int handle_event(); ComprMultiEffect *plugin; + ComprMultiWindow *window; }; class ComprMultiSmooth : public BC_CheckBox @@ -131,12 +149,14 @@ public: class ComprMultiInput : public BC_PopupMenu { public: - ComprMultiInput(ComprMultiEffect *plugin, int x, int y); + ComprMultiInput(ComprMultiEffect *plugin, + ComprMultiWindow *window, int x, int y); void create_objects(); int handle_event(); static const char* value_to_text(int value); static int text_to_value(char *text); ComprMultiEffect *plugin; + ComprMultiWindow *window; }; @@ -167,7 +187,7 @@ class ComprMultiSize : public BC_PopupMenu { public: ComprMultiSize(ComprMultiWindow *gui, - ComprMultiEffect *plugin, int x, int y); + ComprMultiEffect *plugin, int x, int y); int handle_event(); void create_objects(); // add initial items void update(int size); @@ -175,6 +195,17 @@ public: ComprMultiEffect *plugin; }; +class ComprMultiMkupGain : public BC_FPot +{ +public: + ComprMultiMkupGain(ComprMultiEffect *plugin, ComprMultiWindow *window, + int x, int y, double *output, double min, double max); + int handle_event(); + ComprMultiWindow *window; + ComprMultiEffect *plugin; + double *output; +}; + class ComprMultiWindow : public PluginClientWindow { @@ -192,6 +223,7 @@ public: ComprMultiCanvas *canvas; ComprMultiReaction *reaction; ComprMultiClear *clear; + ComprMultiReset *reset; ComprMultiX *x_text; ComprMultiY *y_text; ComprMultiTrigger *trigger; @@ -209,6 +241,7 @@ public: ComprMultiQPot *freq1; ComprMultiQPot *freq2; ComprMultiFPot *q; + ComprMultiMkupGain *mkup_gain; ComprMultiSize *size; EQCanvas *eqcanvas; diff --git a/cinelerra-5.1/plugins/graphic/graphic.C b/cinelerra-5.1/plugins/graphic/graphic.C index b7cf0722..7a99221d 100644 --- a/cinelerra-5.1/plugins/graphic/graphic.C +++ b/cinelerra-5.1/plugins/graphic/graphic.C @@ -977,23 +977,6 @@ void GraphicGUI::update_textboxes() } - - - - - - - - - - - - - - - - - GraphicEQ::GraphicEQ(PluginServer *server) : PluginAClient(server) { @@ -1036,32 +1019,21 @@ void GraphicEQ::read_data(KeyFrame *keyframe) input.set_shared_input(keyframe->xbuf); config.points.remove_all_objects(); - while(!result) - { - result = input.read_tag(); - - if(!result) - { - if(input.tag.title_is("GRAPHICEQ")) - { - config.window_size = input.tag.get_property("WINDOW_SIZE", config.window_size); - if(is_defaults()) - { - w = input.tag.get_property("W", w); - h = input.tag.get_property("H", h); - } - } - else - if(input.tag.title_is("POINT")) - { - GraphicPoint *point; - config.points.append(point = new GraphicPoint); - point->freq = input.tag.get_property("X", 0); - point->value = input.tag.get_property("Y", 0.0); + while( !(result = input.read_tag()) ) { + if(input.tag.title_is("GRAPHICEQ")) { + config.window_size = input.tag.get_property("WINDOW_SIZE", config.window_size); + if(is_defaults()) { + w = input.tag.get_property("W", w); + h = input.tag.get_property("H", h); } } + else if(input.tag.title_is("POINT")) { + GraphicPoint *point; + config.points.append(point = new GraphicPoint); + point->freq = input.tag.get_property("X", 0); + point->value = input.tag.get_property("Y", 0.0); + } } - // if(!active_point_exists()) active_point = -1; } @@ -1082,8 +1054,7 @@ void GraphicEQ::save_data(KeyFrame *keyframe) output.append_tag(); output.append_newline(); - for(int i = 0; i < config.points.total; i++) - { + for(int i = 0; i < config.points.total; i++) { output.tag.set_title("POINT"); output.tag.set_property("X", config.points.values[i]->freq); output.tag.set_property("Y", config.points.values[i]->value); @@ -1109,30 +1080,27 @@ void GraphicEQ::update_gui() window->update_canvas(); window->update_textboxes(); } - else if( pending_gui_frames() ) { - window->update_canvas(); + else if( pending_gui_frame() ) { + window->update_canvas(); } window->unlock_window(); } void GraphicEQ::reconfigure() { - if(fft && fft->window_size != config.window_size) - { + if(fft && fft->window_size != config.window_size) { delete fft; fft = 0; } - if(!fft) - { + if(!fft) { fft = new GraphicFFT(this); fft->initialize(config.window_size); } calculate_envelope(&config.points, envelope); - for(int i = 0; i < config.window_size / 2; i++) - { + for(int i = 0; i < config.window_size / 2; i++) { if(envelope[i] < 0) envelope[i] = 0; } diff --git a/cinelerra-5.1/plugins/parametric/parametric.C b/cinelerra-5.1/plugins/parametric/parametric.C index 59bd8e5e..67ff6ade 100644 --- a/cinelerra-5.1/plugins/parametric/parametric.C +++ b/cinelerra-5.1/plugins/parametric/parametric.C @@ -995,7 +995,7 @@ void ParametricEQ::update_gui() calculate_envelope(); window->update_gui(); } - else if(pending_gui_frames()) { + else if( pending_gui_frame() ) { window->update_canvas(); } window->unlock_window(); diff --git a/cinelerra-5.1/plugins/reverb/reverb.C b/cinelerra-5.1/plugins/reverb/reverb.C index 4248a3cd..7d38fe5f 100644 --- a/cinelerra-5.1/plugins/reverb/reverb.C +++ b/cinelerra-5.1/plugins/reverb/reverb.C @@ -359,12 +359,12 @@ void Reverb::update_gui() ReverbWindow *window = (ReverbWindow *)thread->window; if( !window ) return; int reconfigured = load_configuration(); - int total_frames = pending_gui_frames(); - if( !reconfigured && !total_frames ) return; + int pending = pending_gui_frame(); + if( !reconfigured && !pending ) return; window->lock_window("Reverb::update_gui 1"); if( reconfigured ) window->update(); - if( total_frames ) + if( pending ) window->update_canvas(); window->unlock_window(); } diff --git a/cinelerra-5.1/plugins/spectrogram/Makefile b/cinelerra-5.1/plugins/spectrogram/Makefile index 64b4d6a1..0edc1519 100644 --- a/cinelerra-5.1/plugins/spectrogram/Makefile +++ b/cinelerra-5.1/plugins/spectrogram/Makefile @@ -1,13 +1,9 @@ include ../../plugin_defs -OBJS = \ - $(OBJDIR)/spectrogram.o +OBJS = $(OBJDIR)/spectrogram.o PLUGIN = spectrogram include ../../plugin_config - - - $(OBJDIR)/spectrogram.o: spectrogram.C diff --git a/cinelerra-5.1/plugins/spectrogram/spectrogram.C b/cinelerra-5.1/plugins/spectrogram/spectrogram.C index 15730e64..47825309 100644 --- a/cinelerra-5.1/plugins/spectrogram/spectrogram.C +++ b/cinelerra-5.1/plugins/spectrogram/spectrogram.C @@ -1,7 +1,6 @@ - /* * CINELERRA - * Copyright (C) 1997-2011 Adam Williams + * Copyright (C) 1997-2019 Adam Williams * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -92,10 +91,11 @@ void SpectrogramConfig::interpolate(SpectrogramConfig &prev, SpectrogramFrame::SpectrogramFrame(int data_size) + : PluginClientFrame() { this->data_size = data_size; data = new float[data_size]; - force = 0; +// force = 0; } SpectrogramFrame::~SpectrogramFrame() @@ -139,8 +139,7 @@ void SpectrogramMode::create_objects() int SpectrogramMode::handle_event() { - if(plugin->config.mode != text_to_mode(get_text())) - { + if( plugin->config.mode != text_to_mode(get_text()) ) { SpectrogramWindow *window = (SpectrogramWindow*)plugin->thread->window; window->probe_x = -1; window->probe_y = -1; @@ -153,7 +152,7 @@ int SpectrogramMode::handle_event() const char* SpectrogramMode::mode_to_text(int mode) { - switch(mode) + switch( mode ) { case VERTICAL: return _("Vertical"); @@ -165,7 +164,7 @@ const char* SpectrogramMode::mode_to_text(int mode) int SpectrogramMode::text_to_mode(const char *text) { - if(!strcmp(mode_to_text(VERTICAL), text)) return VERTICAL; + if( !strcmp(mode_to_text(VERTICAL), text) ) return VERTICAL; return HORIZONTAL; } @@ -217,7 +216,7 @@ SpectrogramWindowSizeTumbler::SpectrogramWindowSizeTumbler(Spectrogram *plugin, int SpectrogramWindowSizeTumbler::handle_up_event() { plugin->config.window_size *= 2; - if(plugin->config.window_size > MAX_WINDOW) + if( plugin->config.window_size > MAX_WINDOW ) plugin->config.window_size = MAX_WINDOW; char string[BCTEXTLEN]; sprintf(string, "%d", plugin->config.window_size); @@ -229,7 +228,7 @@ int SpectrogramWindowSizeTumbler::handle_up_event() int SpectrogramWindowSizeTumbler::handle_down_event() { plugin->config.window_size /= 2; - if(plugin->config.window_size < MIN_WINDOW) + if( plugin->config.window_size < MIN_WINDOW ) plugin->config.window_size = MIN_WINDOW; char string[BCTEXTLEN]; sprintf(string, "%d", plugin->config.window_size); @@ -301,8 +300,7 @@ SpectrogramCanvas::SpectrogramCanvas(Spectrogram *plugin, int x, int y, int w, i int SpectrogramCanvas::button_press_event() { - if(is_event_win() && cursor_inside()) - { + if( is_event_win() && cursor_inside() ) { calculate_point(); current_operation = DRAG; plugin->send_configure_change(); @@ -313,8 +311,7 @@ int SpectrogramCanvas::button_press_event() int SpectrogramCanvas::button_release_event() { - if(current_operation == DRAG) - { + if( current_operation == DRAG ) { current_operation = NONE; return 1; } @@ -323,8 +320,7 @@ int SpectrogramCanvas::button_release_event() int SpectrogramCanvas::cursor_motion_event() { - if(current_operation == DRAG) - { + if( current_operation == DRAG ) { calculate_point(); } return 0; @@ -349,11 +345,10 @@ void SpectrogramCanvas::calculate_point() void SpectrogramCanvas::draw_overlay() { SpectrogramWindow *window = (SpectrogramWindow*)plugin->thread->window; - if(window->probe_x >= 0 || window->probe_y >= 0) - { + if( window->probe_x >= 0 || window->probe_y >= 0 ) { set_color(GREEN); set_inverse(); - if(plugin->config.mode == HORIZONTAL) draw_line(0, window->probe_y, get_w(), window->probe_y); + if( plugin->config.mode == HORIZONTAL ) draw_line(0, window->probe_y, get_w(), window->probe_y); draw_line(window->probe_x, 0, window->probe_x, get_h()); set_opaque(); } @@ -418,8 +413,7 @@ void SpectrogramWindow::create_objects() x += window_size->get_w(); add_subwindow(window_size_tumbler = new SpectrogramWindowSizeTumbler(plugin, x, y)); - for(int i = MIN_WINDOW; i <= MAX_WINDOW; i *= 2) - { + for( int i = MIN_WINDOW; i <= MAX_WINDOW; i *= 2 ) { sprintf(string, "%d", i); window_size->add_item(new BC_MenuItem(string)); } @@ -486,7 +480,7 @@ int SpectrogramWindow::resize_event(int w, int h) int y_diff = -canvas_h + canvas->get_h(); // Remove all columns which may be a different size. - plugin->frame_buffer.remove_all_objects(); +// plugin->frame_buffer.remove_all_objects(); plugin->frame_history.remove_all_objects(); level_title->reposition_window( @@ -539,10 +533,10 @@ int SpectrogramWindow::resize_event(int w, int h) void SpectrogramWindow::calculate_frequency(int x, int y, int do_overlay) { - if(x < 0 && y < 0) return; + if( x < 0 && y < 0 ) return; // Clear previous overlay - if(do_overlay) canvas->draw_overlay(); + if( do_overlay ) canvas->draw_overlay(); // New probe position probe_x = x; @@ -550,32 +544,27 @@ void SpectrogramWindow::calculate_frequency(int x, int y, int do_overlay) // Convert to coordinates in frame history int freq_pixel, time_pixel; - if(plugin->config.mode == VERTICAL) - { + if( plugin->config.mode == VERTICAL ) { freq_pixel = get_w() - x; time_pixel = 0; } - else - { + else { freq_pixel = y; time_pixel = get_w() - x; } CLAMP(time_pixel, 0, plugin->frame_history.size() - 1); - if(plugin->frame_history.size()) - { + if( plugin->frame_history.size() ) { SpectrogramFrame *ptr = plugin->frame_history.get( plugin->frame_history.size() - time_pixel - 1); int pixels; int freq_index; - if(plugin->config.mode == VERTICAL) - { + if( plugin->config.mode == VERTICAL ) { pixels = canvas->get_w(); freq_index = (pixels - freq_pixel) * TOTALFREQS / pixels; } - else - { + else { pixels = canvas->get_h(); freq_index = (pixels - freq_pixel) * TOTALFREQS / pixels; } @@ -594,8 +583,7 @@ void SpectrogramWindow::calculate_frequency(int x, int y, int do_overlay) amplitude_title->update(string); } - if(do_overlay) - { + if( do_overlay ) { canvas->draw_overlay(); canvas->flash(); } @@ -647,7 +635,6 @@ Spectrogram::Spectrogram(PluginServer *server) : PluginAClient(server) { reset(); - timer = new Timer; w = xS(640); h = yS(480); } @@ -655,12 +642,9 @@ Spectrogram::Spectrogram(PluginServer *server) Spectrogram::~Spectrogram() { delete fft; - delete [] data; delete audio_buffer; delete [] freq_real; delete [] freq_imag; - delete timer; - frame_buffer.remove_all_objects(); frame_history.remove_all_objects(); } @@ -670,14 +654,11 @@ void Spectrogram::reset() thread = 0; fft = 0; done = 0; - data = 0; audio_buffer = 0; audio_buffer_start = -MAX_WINDOW * 2; freq_real = 0; freq_imag = 0; allocated_data = 0; - total_windows = 0; - bzero(&header, sizeof(data_header_t)); } @@ -689,54 +670,34 @@ int Spectrogram::process_buffer(int64_t size, int64_t start_position, int sample_rate) { -// Pass through - read_samples(buffer, - 0, - sample_rate, - start_position, - size); + int dir = get_direction() == PLAY_REVERSE ? -1 : 1; + double start_pos = (double)start_position / sample_rate; +// Pass through + read_samples(buffer, 0, sample_rate, start_position, size); load_configuration(); - // Reset audio buffer - if(window_size != config.window_size) - { + if( window_size != config.window_size ) { render_stop(); window_size = config.window_size; } - - - - - if(!fft) - { + if( !fft ) fft = new FFT; - } - - if(!data) - { - data = new unsigned char[sizeof(data_header_t)]; - allocated_data = 0; - } - if(!freq_real) - { + if( !freq_real ) { freq_real = new double[MAX_WINDOW]; freq_imag = new double[MAX_WINDOW]; } - if(!audio_buffer) - { + if( !audio_buffer ) audio_buffer = new Samples(MAX_WINDOW); - } -// Accumulate audio +// Allocate more audio buffer int needed = buffer_size + size; - if(audio_buffer->get_allocated() < needed) - { + if( audio_buffer->get_allocated() < needed ) { Samples *new_samples = new Samples(needed); memcpy(new_samples->get_data(), audio_buffer->get_data(), @@ -747,80 +708,49 @@ int Spectrogram::process_buffer(int64_t size, double *audio_samples = audio_buffer->get_data(); memcpy(audio_samples + buffer_size, - buffer->get_data(), - sizeof(double) * size); + buffer->get_data(), sizeof(double) * size); buffer_size += size; - -//printf("Spectrogram::process_buffer %d %d\n", __LINE__, buffer_size); - // Append a windows to end of GUI buffer - total_windows = 0; - while(buffer_size >= window_size) - { + while(buffer_size >= window_size) { // Process FFT fft->do_fft(window_size, // must be a power of 2 - 0, // 0 = forward FFT, 1 = inverse - audio_samples, // array of input's real samples - 0, // array of input's imag samples - freq_real, // array of output's reals - freq_imag); + 0, // 0 = forward FFT, 1 = inverse + audio_samples, // array of input's real samples + 0, // array of input's imag samples + freq_real, // array of output's reals + freq_imag); // Get peak in waveform double max = 0; - for(int i = 0; i < window_size; i++) - { + for( int i = 0; i < window_size; i++ ) { double sample = fabs(audio_samples[i]); - if(sample > max) max = sample; + if( sample > max ) max = sample; } -// Append to end of data buffer - if(allocated_data < (total_windows + 1) * (HALF_WINDOW + 1)) - { - int new_allocation = (total_windows + 1) * (HALF_WINDOW + 1); - unsigned char *new_data = new unsigned char[sizeof(data_header_t) + - sizeof(float) * new_allocation]; - data_header_t *new_header = (data_header_t*)new_data; - data_header_t *old_header = (data_header_t*)data; - memcpy(new_header->samples, - old_header->samples, - sizeof(float) * allocated_data); - delete [] data; - data = new_data; - allocated_data = new_allocation; - } - data_header_t *header = (data_header_t*)data; - float *sample_output = header->samples + total_windows * (HALF_WINDOW + 1); -// 1st sample is maximum - sample_output[0] = max; - for(int i = 0; i < HALF_WINDOW; i++) - { - sample_output[i + 1] = sqrt(freq_real[i] * freq_real[i] + - freq_imag[i] * freq_imag[i]); -// sample_output[i + 1] = freq_real[i]; +// send to the GUI + SpectrogramFrame *frame = new SpectrogramFrame(HALF_WINDOW + 1); + double widx = get_gui_frames(); + frame->position = start_pos + dir * window_size * widx / get_samplerate(); + frame->data[0] = max; + for( int i = 0; i < HALF_WINDOW; i++ ) { + frame->data[i + 1] = hypot(freq_real[i], freq_imag[i]); } + frame->window_size = window_size; + frame->sample_rate = sample_rate; + frame->level = DB::fromdb(config.level); + add_gui_frame(frame); // Shift audio buffer out memcpy(audio_samples, audio_samples + window_size, (buffer_size - window_size) * sizeof(double)); - total_windows++; buffer_size -= window_size; } - data_header_t *header = (data_header_t*)data; - header->window_size = window_size; - header->sample_rate = sample_rate; - header->total_windows = total_windows; -// Linear output level - header->level = DB::fromdb(config.level); - - send_render_gui(data, - sizeof(data_header_t) + - sizeof(float) * total_windows * (HALF_WINDOW + 1)); - + last_position = start_position + dir * size; return 0; } @@ -828,389 +758,277 @@ void Spectrogram::render_stop() { buffer_size = 0; audio_buffer_start = -MAX_WINDOW * 2; - frame_buffer.remove_all_objects(); +// frame_buffer.remove_all_objects(); frame_history.remove_all_objects(); } - - - NEW_WINDOW_MACRO(Spectrogram, SpectrogramWindow) void Spectrogram::update_gui() { - if(thread) - { - int result = load_configuration(); - SpectrogramWindow *window = (SpectrogramWindow*)thread->get_window(); - window->lock_window("Spectrogram::update_gui"); - if(result) window->update_gui(); - - -//printf("Spectrogram::update_gui %d\n", __LINE__); -// Shift in accumulated canvas columns - if(frame_buffer.size()) - { - SpectrogramCanvas *canvas = (SpectrogramCanvas*)window->canvas; - canvas->draw_overlay(); -// Z to draw in this iteration - int total_frames = timer->get_difference() * - header.sample_rate / - header.window_size / - 1000; - -//printf("Spectrogram::update_gui %d %d %ld\n", __LINE__, frame_buffer.size(), timer->get_difference()); - if(total_frames) timer->subtract(total_frames * - header.window_size * - 1000 / - header.sample_rate); - -// Add forced column drawing - for(int i = 0; i < frame_buffer.size(); i++) - if(frame_buffer.get(i)->force) total_frames++; - total_frames = MIN(frame_buffer.size(), total_frames); - -// Limit to canvas width - if(config.mode == HORIZONTAL) - total_frames = MIN(canvas->get_w(), total_frames); - - - - if(config.mode == HORIZONTAL) - { + if( !thread ) return; + SpectrogramWindow *window = (SpectrogramWindow*)thread->get_window(); + if( !window ) return; + int result = load_configuration(); + int total_frames = pending_gui_frames(); + if( !result && !total_frames ) return; + + window->lock_window("Spectrogram::update_gui"); + if( result ) // widgets + window->update_gui(); + if( total_frames ) { // spectrogram + SpectrogramCanvas *canvas = (SpectrogramCanvas*)window->canvas; + canvas->draw_overlay(); + + if( config.mode == HORIZONTAL ) { // Shift left - int pixels = canvas->get_h(); - canvas->copy_area(total_frames * config.xzoom, - 0, - 0, - 0, - canvas->get_w() - total_frames * config.xzoom, - canvas->get_h()); + int pixels = canvas->get_h(); + canvas->copy_area(total_frames * config.xzoom, + 0, 0, 0, + canvas->get_w() - total_frames * config.xzoom, + canvas->get_h()); // Draw new columns - for(int frame = 0; - frame < total_frames; - frame++) - { - int x = canvas->get_w() - (total_frames - frame) * config.xzoom; - SpectrogramFrame *ptr = frame_buffer.get(0); - - for(int i = 0; i < pixels; i++) - { - float db = ptr->data[ - MIN(i, ptr->data_size - 1)]; - float h, s, v; - float r_out, g_out, b_out; - int r, g, b; - + for( int frame = 0; frame < total_frames; frame++ ) { + int x = canvas->get_w() - (total_frames - frame) * config.xzoom; + SpectrogramFrame *ptr = (SpectrogramFrame*)get_gui_frame(-1, 0); + fix_gui_frame(ptr); + + for( int i = 0; i < pixels; i++ ) { + float db = ptr->data[MIN(i, ptr->data_size - 1)]; + float h, s, v; + float r_out, g_out, b_out; + int r, g, b; #define DIVISION1 0.0 #define DIVISION2 -20.0 #define DIVISION3 INFINITYGAIN - if(db > DIVISION2) - { - h = 240 - (float)(db - DIVISION2) / (DIVISION1 - DIVISION2) * - 240; - CLAMP(h, 0, 240); - s = 1.0; - v = 1.0; - HSV::hsv_to_rgb(r_out, g_out, b_out, h, s, v); - r = (int)(r_out * 0xff); - g = (int)(g_out * 0xff); - b = (int)(b_out * 0xff); - } - else - if(db > DIVISION3) - { - h = 0.0; - s = 0.0; - v = (float)(db - DIVISION3) / (DIVISION2 - DIVISION3); - HSV::hsv_to_rgb(r_out, g_out, b_out, h, s, v); - r = (int)(r_out * 0xff); - g = (int)(g_out * 0xff); - b = (int)(b_out * 0xff); - } - else - { - r = g = b = 0; - } - - canvas->set_color((r << 16) | - (g << 8) | - (b)); - if(config.xzoom == 1) - canvas->draw_pixel(x, i); - else - canvas->draw_line(x, - i, - x + config.xzoom, - i); + if( db > DIVISION2 ) { + h = 240 - (float)(db - DIVISION2) / (DIVISION1 - DIVISION2) * + 240; + CLAMP(h, 0, 240); + s = 1.0; + v = 1.0; + HSV::hsv_to_rgb(r_out, g_out, b_out, h, s, v); + r = (int)(r_out * 0xff); + g = (int)(g_out * 0xff); + b = (int)(b_out * 0xff); } - -// Push frames onto history - for(int i = 0; i < config.xzoom; i++) - { - SpectrogramFrame *new_frame = new SpectrogramFrame( - ptr->data_size); - frame_history.append(new_frame); - memcpy(new_frame->data, ptr->data, sizeof(float) * ptr->data_size); + else if( db > DIVISION3 ) { + h = 0.0; + s = 0.0; + v = (float)(db - DIVISION3) / (DIVISION2 - DIVISION3); + HSV::hsv_to_rgb(r_out, g_out, b_out, h, s, v); + r = (int)(r_out * 0xff); + g = (int)(g_out * 0xff); + b = (int)(b_out * 0xff); + } + else { + r = g = b = 0; } -// Clip history to canvas size - while(frame_history.size() > canvas->get_w()) - frame_history.remove_object_number(0); + canvas->set_color((r << 16) | (g << 8) | (b)); + if( config.xzoom == 1 ) + canvas->draw_pixel(x, i); + else + canvas->draw_line(x, i, x + config.xzoom, i); + } - frame_buffer.remove_object_number(0); +// Copy a frame into history for each pixel + for( int i = 0; i < config.xzoom; i++ ) { + SpectrogramFrame *new_frame = new SpectrogramFrame( + ptr->data_size); + frame_history.append(new_frame); + memcpy(new_frame->data, ptr->data, + sizeof(float) * ptr->data_size); } +// Clip history to canvas size + while(frame_history.size() > canvas->get_w()) + frame_history.remove_object_number(0); + + delete ptr; } - else + } + else { // mode == VERTICAL - { -// Shift frames into history - for(int frame = 0; frame < total_frames; frame++) - { - if(frame_history.size() >= config.history_size) - frame_history.remove_object_number(0); - - frame_history.append(frame_buffer.get(0)); - frame_buffer.remove_number(0); - } - +// Shift frames into history buffer + for( int frame = 0; frame < total_frames; frame++ ) { + SpectrogramFrame *ptr = (SpectrogramFrame*)get_gui_frame(-1, 0); + fix_gui_frame(ptr); + frame_history.append(ptr); + } // Reduce history size - while(frame_history.size() > config.history_size) - frame_history.remove_object_number(0); + while(frame_history.size() > config.history_size) + frame_history.remove_object_number(0); // Draw frames from history - canvas->clear_box(0, 0, canvas->get_w(), canvas->get_h()); - for(int frame = 0; frame < frame_history.size(); frame++) - { - SpectrogramFrame *ptr = frame_history.get(frame); + canvas->clear_box(0, 0, canvas->get_w(), canvas->get_h()); + for( int frame = 0; frame < frame_history.size(); frame++ ) { + SpectrogramFrame *ptr = frame_history.get(frame); //printf("%d %d\n", canvas->get_w(), ptr->data_size); - int luma = (frame + 1) * 0x80 / frame_history.size(); - if(frame == frame_history.size() - 1) - { - canvas->set_color(WHITE); - canvas->set_line_width(2); - } - else - canvas->set_color((luma << 16) | - (luma << 8) | - luma); - - - int x1 = 0; - int y1 = 0; - int w = canvas->get_w(); - int h = canvas->get_h(); - int number = 0; + int luma = (frame + 1) * 0x80 / frame_history.size(); + if( frame == frame_history.size() - 1 ) { + canvas->set_color(WHITE); + canvas->set_line_width(2); + } + else + canvas->set_color((luma << 16) | (luma << 8) | luma); + int x1 = 0, y1 = 0; + int w = canvas->get_w(); + int h = canvas->get_h(); + int number = 0; //printf("Spectrogram::update_gui %d ", __LINE__); - for(int x2 = 0; x2 < w; x2++) - { - float db = ptr->data[ - MIN((w - x2), ptr->data_size - 1)]; -//if(x2 > w - 10) printf("%.02f ", ptr->data[x2]); - int y2 = h-1 - (int)((db - INFINITYGAIN) / - (0 - INFINITYGAIN) * - h); - CLAMP(y2, 0, h-1); - - if(number) - { - canvas->draw_line(x1, y1, x2, y2); - } - else - { - number++; - } - - x1 = x2; - y1 = y2; + for( int x2 = 0; x2 < w; x2++ ) { + float db = ptr->data[ + MIN((w - x2), ptr->data_size - 1)]; +//if( x2 > w - 10 ) printf("%.02f ", ptr->data[x2]); + int y2 = h - 1 - (int)((db - INFINITYGAIN) / + (0 - INFINITYGAIN) * + h); + CLAMP(y2, 0, h - 1); + + if( number ) { + canvas->draw_line(x1, y1, x2, y2); } - - canvas->set_line_width(1); -//printf("\n"); + else { + number++; + } + x1 = x2; + y1 = y2; } + canvas->set_line_width(1); +//printf("\n"); } - -// Recompute probe level - window->calculate_frequency(window->probe_x, window->probe_y, 0); - - canvas->draw_overlay(); - canvas->flash(); } +// Recompute probe level + window->calculate_frequency(window->probe_x, window->probe_y, 0); - while(frame_buffer.size() > MAX_COLUMNS) - frame_buffer.remove_object_number(0); - - window->unlock_window(); + canvas->draw_overlay(); + canvas->flash(); } + + window->unlock_window(); } -void Spectrogram::render_gui(void *data, int size) + +// convert GUI frame to canvas dimensions & normalized DB +void Spectrogram::fix_gui_frame(SpectrogramFrame *frame) { - if(thread) - { - thread->get_window()->lock_window("Spectrogram::render_gui"); - data_header_t *header = (data_header_t*)data; - memcpy(&this->header, header, sizeof(data_header_t)); - BC_SubWindow *canvas = ((SpectrogramWindow*)thread->get_window())->canvas; - int pixels = canvas->get_w(); - if(config.mode == HORIZONTAL) pixels = canvas->get_h(); - -// Set all previous columns to draw immediately - for(int i = 0; i < frame_buffer.size(); i++) - frame_buffer.get(i)->force = 1; - - - for(int current_window = 0; - current_window < header->total_windows; - current_window++) - { - float *frame = header->samples + - current_window * (header->window_size / 2 + 1); - float frame_max = *frame; - frame++; - int niquist = get_project_samplerate() / 2; - int total_slots = header->window_size / 2; - int max_slot = total_slots - 1; -// int slot1 = total_slots - 1; - SpectrogramFrame *ptr = - new SpectrogramFrame( - pixels); + int niquist = get_project_samplerate() / 2; + int total_slots = frame->window_size / 2; + int max_slot = total_slots - 1; + BC_SubWindow *canvas = ((SpectrogramWindow*)thread->get_window())->canvas; + int pixels = canvas->get_w(); + if( config.mode == HORIZONTAL ) pixels = canvas->get_h(); + +// allocate new frame + float *out_data = new float[pixels]; + float *in_data = frame->data; // Scale slots to pixels - for(int i = 0; i < pixels; i++) - { + for( int i = 0; i < pixels; i++ ) { // Low frequency of row - int freq_index1 = (int)((pixels - i) * TOTALFREQS / pixels); + int freq_index1 = (int)((pixels - i) * TOTALFREQS / pixels); // High frequency of row - int freq_index2 = (int)((pixels - i + 1) * TOTALFREQS / pixels); - int freq1 = Freq::tofreq(freq_index1); - int freq2 = Freq::tofreq(freq_index2); - float slot1_f = (float)freq1 * max_slot / niquist; - float slot2_f = (float)freq2 * max_slot / niquist; - int slot1 = (int)(slot1_f); - int slot2 = (int)(slot2_f); - slot1 = MIN(slot1, max_slot); - slot2 = MIN(slot2, max_slot); - double sum = 0; + int freq_index2 = (int)((pixels - i + 1) * TOTALFREQS / pixels); + int freq1 = Freq::tofreq(freq_index1); + int freq2 = Freq::tofreq(freq_index2); + float slot1_f = (float)freq1 * max_slot / niquist; + float slot2_f = (float)freq2 * max_slot / niquist; + int slot1 = (int)(slot1_f); + int slot2 = (int)(slot2_f); + slot1 = MIN(slot1, max_slot); + slot2 = MIN(slot2, max_slot); + double sum = 0; // Accumulate multiple slots in the same pixel - if(slot2 > slot1 + 1) - { - for(int j = slot1; j <= slot2; j++) - sum += frame[j]; + if( slot2 > slot1 + 1 ) { + for( int j = slot1; j <= slot2; j++ ) + sum += in_data[j]; - sum /= slot2 - slot1 + 1; - } - else + sum /= slot2 - slot1 + 1; + } + else { // Blend 2 slots to create pixel - { - float weight = slot1_f - floor(slot1_f); - int slot3 = MIN(slot1 + 1, max_slot); - sum = frame[slot1] * (1.0 - weight) + - frame[slot3] * weight; - } + float weight = slot1_f - floor(slot1_f); + int slot3 = MIN(slot1 + 1, max_slot); + sum = in_data[slot1] * (1.0 - weight) + + in_data[slot3] * weight; + } + + out_data[i] = sum; + } - ptr->data[i] = sum; -// slot1 = slot2; - } // Normalize - if(config.normalize) - { + if( config.normalize ) { // Get the maximum level in the spectrogram - float max = 0; - for(int i = 0; i < pixels; i++) - { - if(ptr->data[i] > max) max = ptr->data[i]; - } + float max = 0; + for( int i = 0; i < pixels; i++ ) { + if( out_data[i] > max ) max = out_data[i]; + } // Scale all levels - for(int i = 0; i < pixels; i++) - { - ptr->data[i] = header->level * - ptr->data[i] / - max; - } - } - else - { + for( int i = 0; i < pixels; i++ ) { + out_data[i] = frame->level * + out_data[i] / + max; + } + } + else { // Get the maximum level in the spectrogram - float max = 0; - for(int i = 0; i < pixels; i++) - { - if(ptr->data[i] > max) max = ptr->data[i]; - } + float max = 0; + for( int i = 0; i < pixels; i++ ) { + if( out_data[i] > max ) max = out_data[i]; + } // Maximum level in spectrogram is the maximum waveform level - for(int i = 0; i < pixels; i++) - { - ptr->data[i] = header->level * - frame_max * - ptr->data[i] / - max; - } - - -// for(int i = 0; i < pixels; i++) -// { -// ptr->data[i] = header->level * ptr->data[i]; -// } - } + float frame_max = in_data[0]; + for( int i = 0; i < pixels; i++ ) { + out_data[i] = frame->level * + frame_max * out_data[i] / max; + } + } // DB conversion //printf("Spectrogram::render_gui %d ", __LINE__); - for(int i = 0; i < pixels; i++) - { - ptr->data[i] = DB::todb(ptr->data[i]); -//if(i > pixels - 10) printf("%.02f ", ptr->data[i]); + for( int i = 0; i < pixels; i++ ) { + out_data[i] = DB::todb(out_data[i]); +//if( i > pixels - 10 ) printf("%.02f ", ptr->data[i]); - } -//printf("\n"); - - - frame_buffer.append(ptr); - total_windows++; - } - - timer->update(); - thread->get_window()->unlock_window(); } + + delete [] in_data; + frame->data = out_data; + frame->data_size = pixels; } + LOAD_CONFIGURATION_MACRO(Spectrogram, SpectrogramConfig) void Spectrogram::read_data(KeyFrame *keyframe) { +//printf("Spectrogram::read_data %d this=%p\n", __LINE__, this); FileXML input; input.set_shared_input(keyframe->xbuf); int result = 0; - while(!result) - { - result = input.read_tag(); - - if(!result) - { - if(input.tag.title_is("SPECTROGRAM")) - { - config.level = input.tag.get_property("LEVEL", config.level); - config.normalize = input.tag.get_property("NORMALIZE", config.normalize); - config.window_size = input.tag.get_property("WINDOW_SIZE", config.window_size); - config.xzoom = input.tag.get_property("XZOOM", config.xzoom); - config.mode = input.tag.get_property("MODE", config.mode); - config.history_size = input.tag.get_property("HISTORY_SIZE", config.history_size); - if(is_defaults()) - { - w = input.tag.get_property("W", w); - h = input.tag.get_property("H", h); - } + while( !(result = input.read_tag()) ) { + if( input.tag.title_is("SPECTROGRAM") ) { + config.level = input.tag.get_property("LEVEL", config.level); + config.normalize = input.tag.get_property("NORMALIZE", config.normalize); + config.window_size = input.tag.get_property("WINDOW_SIZE", config.window_size); + config.xzoom = input.tag.get_property("XZOOM", config.xzoom); + config.mode = input.tag.get_property("MODE", config.mode); + config.history_size = input.tag.get_property("HISTORY_SIZE", config.history_size); + if( is_defaults() ) { + w = input.tag.get_property("W", w); + h = input.tag.get_property("H", h); } } } @@ -1237,7 +1055,3 @@ void Spectrogram::save_data(KeyFrame *keyframe) output.terminate_string(); } - - - - diff --git a/cinelerra-5.1/plugins/spectrogram/spectrogram.h b/cinelerra-5.1/plugins/spectrogram/spectrogram.h index 0a103cf6..6d1b927c 100644 --- a/cinelerra-5.1/plugins/spectrogram/spectrogram.h +++ b/cinelerra-5.1/plugins/spectrogram/spectrogram.h @@ -239,33 +239,18 @@ public: int history_size; }; -// Header for data buffer -typedef struct -{ - int window_size; -// Total windows in this buffer - int total_windows; -// Samples per fragment - int window_fragment; -// Samplerate - int sample_rate; -// Linearized user level - float level; -// Nothing goes after this -// 1st sample in each window is the max - float samples[1]; -} data_header_t; - -class SpectrogramFrame +class SpectrogramFrame : public PluginClientFrame { public: SpectrogramFrame(int data_size); ~SpectrogramFrame(); - int data_size; float *data; -// Draw immediately - int force; + int data_size; + int window_size; + int sample_rate; +// Linearized user level + float level; }; class Spectrogram : public PluginAClient @@ -283,16 +268,17 @@ public: void read_data(KeyFrame *keyframe); void save_data(KeyFrame *keyframe); void update_gui(); - void render_gui(void *data, int size); void render_stop(); + void fix_gui_frame(SpectrogramFrame *frame); void reset(); int done; int need_reconfigure; + int64_t last_position; FFT *fft; // Data buffer for frequency & magnitude - unsigned char *data; +// unsigned char *data; // Accumulate data for windowing Samples *audio_buffer; // Total samples in the buffer @@ -302,21 +288,19 @@ public: // Temporaries for the FFT double *freq_real; double *freq_imag; -// Total windows sent to current GUI - int total_windows; // Starting sample in audio_buffer. int64_t audio_buffer_start; // Total floats allocated in data buffer int allocated_data; // Accumulates canvas pixels until the next update_gui - ArrayList frame_buffer; -// History for vertical mode +// ArrayList frame_buffer; +// Layers for vertical mode // Probing data for horizontal mode ArrayList frame_history; // Header from last data buffer - data_header_t header; +// data_header_t header; // Time of last GUI update - Timer *timer; +// Timer *timer; // Window dimensions int w, h; }; diff --git a/cinelerra-5.1/plugins/synthesizer/black_checked_png.h b/cinelerra-5.1/plugins/synthesizer/black_checked_png.h index 348dff2e..3dd143dd 100644 --- a/cinelerra-5.1/plugins/synthesizer/black_checked_png.h +++ b/cinelerra-5.1/plugins/synthesizer/black_checked_png.h @@ -2,43 +2,43 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef BLACK_CHECKED_PNG_H #define BLACK_CHECKED_PNG_H -static unsigned char black_checked_png[] = +static unsigned char black_checked_png[] = { - 0x00, 0x00, 0x00, 0xe2, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, - 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, - 0x07, 0x09, 0x11, 0x02, 0x20, 0xe9, 0x2d, 0x2c, 0x75, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x00, 0x58, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0xda, 0xd1, 0x09, - 0x80, 0x30, 0x00, 0x43, 0xc1, 0xd4, 0xe9, 0x02, 0xce, 0x2b, 0x74, 0x3b, 0xfd, 0xea, 0x08, 0x45, - 0x91, 0x7b, 0x0b, 0x1c, 0xf9, 0xcf, 0x68, 0x7b, 0x27, 0xc9, 0x39, 0x67, 0x76, 0x77, 0xb5, 0x49, - 0x92, 0x23, 0x2f, 0x04, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, - 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, - 0x85, 0x42, 0xa1, 0x50, 0xe8, 0xa7, 0xd0, 0xb1, 0x2e, 0x7c, 0xbf, 0x5f, 0xfa, 0x00, 0x3b, 0xd9, - 0x07, 0x5f, 0x2e, 0x73, 0x08, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x00, 0x00, 0x00, 0xe2, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, + 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, + 0x07, 0x09, 0x11, 0x02, 0x20, 0xe9, 0x2d, 0x2c, 0x75, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x00, 0x58, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0xda, 0xd1, 0x09, + 0x80, 0x30, 0x00, 0x43, 0xc1, 0xd4, 0xe9, 0x02, 0xce, 0x2b, 0x74, 0x3b, 0xfd, 0xea, 0x08, 0x45, + 0x91, 0x7b, 0x0b, 0x1c, 0xf9, 0xcf, 0x68, 0x7b, 0x27, 0xc9, 0x39, 0x67, 0x76, 0x77, 0xb5, 0x49, + 0x92, 0x23, 0x2f, 0x04, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, + 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, + 0x85, 0x42, 0xa1, 0x50, 0xe8, 0xa7, 0xd0, 0xb1, 0x2e, 0x7c, 0xbf, 0x5f, 0xfa, 0x00, 0x3b, 0xd9, + 0x07, 0x5f, 0x2e, 0x73, 0x08, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/black_checkedhi_png.h b/cinelerra-5.1/plugins/synthesizer/black_checkedhi_png.h index 56f40de8..54bfaafe 100644 --- a/cinelerra-5.1/plugins/synthesizer/black_checkedhi_png.h +++ b/cinelerra-5.1/plugins/synthesizer/black_checkedhi_png.h @@ -2,65 +2,65 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef BLACK_CHECKEDHI_PNG_H #define BLACK_CHECKEDHI_PNG_H -static unsigned char black_checkedhi_png[] = +static unsigned char black_checkedhi_png[] = { - 0x00, 0x00, 0x02, 0x4b, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, - 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, - 0x07, 0x09, 0x11, 0x04, 0x16, 0x70, 0xcd, 0x1e, 0x6a, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x01, 0xc1, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0x9a, 0x61, 0x6e, - 0xc3, 0x20, 0x0c, 0x85, 0x9f, 0x49, 0x7a, 0xb7, 0x48, 0x3b, 0xef, 0xa4, 0x1e, 0xae, 0xc1, 0xfb, - 0x13, 0x34, 0xe7, 0xd5, 0x04, 0xc8, 0x34, 0xa5, 0xad, 0x1c, 0x09, 0x41, 0x53, 0x8b, 0x2f, 0xcf, - 0x18, 0xa7, 0xaa, 0x91, 0x65, 0x59, 0x14, 0x00, 0xbe, 0xee, 0x77, 0xfc, 0xf7, 0xf5, 0xbd, 0x2c, - 0x00, 0x80, 0x84, 0x0b, 0xae, 0x4b, 0xa0, 0x73, 0xcb, 0x40, 0x4e, 0x4c, 0xaa, 0x67, 0xa1, 0xe2, - 0x8c, 0xa5, 0x03, 0xa4, 0xc6, 0x4e, 0x47, 0xa0, 0x16, 0xc2, 0x63, 0xa9, 0x00, 0x95, 0xc6, 0x05, - 0xae, 0x3d, 0x50, 0x86, 0x24, 0x02, 0x32, 0x58, 0x9d, 0x96, 0x49, 0xb5, 0xf6, 0x2a, 0x2d, 0xc0, - 0xd2, 0x26, 0x73, 0x0f, 0x34, 0x59, 0xde, 0xc6, 0xab, 0x01, 0xe6, 0x03, 0x17, 0xcf, 0x1e, 0x4c, - 0x08, 0x66, 0x5b, 0x72, 0x94, 0xe6, 0x0d, 0x28, 0x5b, 0x0f, 0x02, 0x33, 0xbc, 0xa9, 0x74, 0xda, - 0x8c, 0x4a, 0xb3, 0xee, 0xb6, 0xee, 0x7c, 0x50, 0x00, 0x0d, 0xad, 0xa9, 0xdd, 0xc0, 0x16, 0x7a, - 0xdb, 0x7a, 0xab, 0x96, 0x55, 0x7a, 0x6b, 0x8c, 0xde, 0x40, 0xaa, 0x29, 0xbd, 0x55, 0xa0, 0xa9, - 0xe2, 0x6a, 0x8c, 0x06, 0x12, 0x9c, 0x40, 0x9a, 0xc8, 0xc5, 0x4a, 0x81, 0xb3, 0x1a, 0xfb, 0xa3, - 0xfd, 0x3d, 0xc3, 0xd9, 0x93, 0xad, 0xa0, 0xb2, 0x50, 0x31, 0x91, 0x9b, 0x1a, 0xfb, 0xb9, 0x3b, - 0x23, 0x79, 0xfb, 0x35, 0x51, 0x20, 0xf1, 0xf7, 0x38, 0x0b, 0x3d, 0x7a, 0x00, 0x39, 0xc8, 0x5a, - 0x3d, 0xf9, 0x3a, 0xb5, 0x60, 0xad, 0x34, 0x28, 0x03, 0x0a, 0x2f, 0x7d, 0xb5, 0xbd, 0xe6, 0xfb, - 0xb4, 0xe5, 0xf6, 0xb7, 0x51, 0x1a, 0xd0, 0x80, 0x06, 0x34, 0xa0, 0x01, 0x0d, 0x68, 0x40, 0x03, - 0x1a, 0xd0, 0x80, 0x06, 0x34, 0xa0, 0x01, 0x0d, 0x68, 0x40, 0x03, 0x1a, 0xd0, 0x80, 0x06, 0x34, - 0xa0, 0x01, 0xfd, 0x0c, 0xe8, 0xa9, 0x7f, 0xb6, 0x95, 0xfa, 0xf7, 0x77, 0x6f, 0xad, 0x02, 0xec, - 0xd9, 0x8c, 0xa8, 0x9f, 0xcf, 0xb8, 0xb3, 0xb7, 0x1f, 0x86, 0xb2, 0xc2, 0x8c, 0x7d, 0x41, 0x4f, - 0x9c, 0xfb, 0xbd, 0x8a, 0x67, 0x86, 0x78, 0x75, 0xd0, 0x8c, 0x7d, 0x89, 0x52, 0xf1, 0x5c, 0x3f, - 0xcd, 0x04, 0xd6, 0x51, 0xa5, 0xb6, 0xd6, 0x6d, 0x81, 0x25, 0x00, 0x26, 0x63, 0xbb, 0x9a, 0x66, - 0xed, 0x3d, 0x6f, 0x55, 0xa1, 0xac, 0x70, 0xc5, 0xbe, 0xf4, 0xcc, 0x8a, 0xad, 0xcd, 0x63, 0x1b, - 0xb7, 0xdc, 0x5c, 0x5d, 0xd3, 0x8c, 0xdf, 0xc2, 0xba, 0x75, 0x79, 0xf9, 0xec, 0xd5, 0xc4, 0x1f, - 0xa4, 0x5a, 0x47, 0xdd, 0x6b, 0x55, 0x00, 0xfb, 0x52, 0x74, 0xad, 0xfa, 0xcf, 0xc0, 0x2e, 0xa8, - 0x92, 0x52, 0x7e, 0x08, 0xbb, 0xae, 0x47, 0xe7, 0x1c, 0x5a, 0x41, 0xd5, 0x0c, 0x24, 0x0b, 0xf5, - 0x6a, 0xa4, 0x4a, 0x8a, 0x75, 0x54, 0x29, 0xf0, 0x7c, 0x3e, 0x21, 0xd3, 0x1a, 0xcb, 0x60, 0xe6, - 0xd2, 0x91, 0x35, 0xe5, 0x9a, 0xb7, 0xa2, 0xff, 0x94, 0x0e, 0x1a, 0x09, 0xa2, 0x99, 0x91, 0x04, - 0xfe, 0xb1, 0x1f, 0x1c, 0x4c, 0xae, 0x7f, 0xcd, 0xbd, 0xa3, 0x13, 0xc6, 0x2f, 0x07, 0x7b, 0x49, - 0x39, 0xc2, 0xf7, 0xf1, 0x4a, 0x7f, 0x00, 0x2b, 0xce, 0xde, 0x4e, 0xbd, 0x3f, 0x51, 0x65, 0x00, + 0x00, 0x00, 0x02, 0x4b, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, + 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, + 0x07, 0x09, 0x11, 0x04, 0x16, 0x70, 0xcd, 0x1e, 0x6a, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x01, 0xc1, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0x9a, 0x61, 0x6e, + 0xc3, 0x20, 0x0c, 0x85, 0x9f, 0x49, 0x7a, 0xb7, 0x48, 0x3b, 0xef, 0xa4, 0x1e, 0xae, 0xc1, 0xfb, + 0x13, 0x34, 0xe7, 0xd5, 0x04, 0xc8, 0x34, 0xa5, 0xad, 0x1c, 0x09, 0x41, 0x53, 0x8b, 0x2f, 0xcf, + 0x18, 0xa7, 0xaa, 0x91, 0x65, 0x59, 0x14, 0x00, 0xbe, 0xee, 0x77, 0xfc, 0xf7, 0xf5, 0xbd, 0x2c, + 0x00, 0x80, 0x84, 0x0b, 0xae, 0x4b, 0xa0, 0x73, 0xcb, 0x40, 0x4e, 0x4c, 0xaa, 0x67, 0xa1, 0xe2, + 0x8c, 0xa5, 0x03, 0xa4, 0xc6, 0x4e, 0x47, 0xa0, 0x16, 0xc2, 0x63, 0xa9, 0x00, 0x95, 0xc6, 0x05, + 0xae, 0x3d, 0x50, 0x86, 0x24, 0x02, 0x32, 0x58, 0x9d, 0x96, 0x49, 0xb5, 0xf6, 0x2a, 0x2d, 0xc0, + 0xd2, 0x26, 0x73, 0x0f, 0x34, 0x59, 0xde, 0xc6, 0xab, 0x01, 0xe6, 0x03, 0x17, 0xcf, 0x1e, 0x4c, + 0x08, 0x66, 0x5b, 0x72, 0x94, 0xe6, 0x0d, 0x28, 0x5b, 0x0f, 0x02, 0x33, 0xbc, 0xa9, 0x74, 0xda, + 0x8c, 0x4a, 0xb3, 0xee, 0xb6, 0xee, 0x7c, 0x50, 0x00, 0x0d, 0xad, 0xa9, 0xdd, 0xc0, 0x16, 0x7a, + 0xdb, 0x7a, 0xab, 0x96, 0x55, 0x7a, 0x6b, 0x8c, 0xde, 0x40, 0xaa, 0x29, 0xbd, 0x55, 0xa0, 0xa9, + 0xe2, 0x6a, 0x8c, 0x06, 0x12, 0x9c, 0x40, 0x9a, 0xc8, 0xc5, 0x4a, 0x81, 0xb3, 0x1a, 0xfb, 0xa3, + 0xfd, 0x3d, 0xc3, 0xd9, 0x93, 0xad, 0xa0, 0xb2, 0x50, 0x31, 0x91, 0x9b, 0x1a, 0xfb, 0xb9, 0x3b, + 0x23, 0x79, 0xfb, 0x35, 0x51, 0x20, 0xf1, 0xf7, 0x38, 0x0b, 0x3d, 0x7a, 0x00, 0x39, 0xc8, 0x5a, + 0x3d, 0xf9, 0x3a, 0xb5, 0x60, 0xad, 0x34, 0x28, 0x03, 0x0a, 0x2f, 0x7d, 0xb5, 0xbd, 0xe6, 0xfb, + 0xb4, 0xe5, 0xf6, 0xb7, 0x51, 0x1a, 0xd0, 0x80, 0x06, 0x34, 0xa0, 0x01, 0x0d, 0x68, 0x40, 0x03, + 0x1a, 0xd0, 0x80, 0x06, 0x34, 0xa0, 0x01, 0x0d, 0x68, 0x40, 0x03, 0x1a, 0xd0, 0x80, 0x06, 0x34, + 0xa0, 0x01, 0xfd, 0x0c, 0xe8, 0xa9, 0x7f, 0xb6, 0x95, 0xfa, 0xf7, 0x77, 0x6f, 0xad, 0x02, 0xec, + 0xd9, 0x8c, 0xa8, 0x9f, 0xcf, 0xb8, 0xb3, 0xb7, 0x1f, 0x86, 0xb2, 0xc2, 0x8c, 0x7d, 0x41, 0x4f, + 0x9c, 0xfb, 0xbd, 0x8a, 0x67, 0x86, 0x78, 0x75, 0xd0, 0x8c, 0x7d, 0x89, 0x52, 0xf1, 0x5c, 0x3f, + 0xcd, 0x04, 0xd6, 0x51, 0xa5, 0xb6, 0xd6, 0x6d, 0x81, 0x25, 0x00, 0x26, 0x63, 0xbb, 0x9a, 0x66, + 0xed, 0x3d, 0x6f, 0x55, 0xa1, 0xac, 0x70, 0xc5, 0xbe, 0xf4, 0xcc, 0x8a, 0xad, 0xcd, 0x63, 0x1b, + 0xb7, 0xdc, 0x5c, 0x5d, 0xd3, 0x8c, 0xdf, 0xc2, 0xba, 0x75, 0x79, 0xf9, 0xec, 0xd5, 0xc4, 0x1f, + 0xa4, 0x5a, 0x47, 0xdd, 0x6b, 0x55, 0x00, 0xfb, 0x52, 0x74, 0xad, 0xfa, 0xcf, 0xc0, 0x2e, 0xa8, + 0x92, 0x52, 0x7e, 0x08, 0xbb, 0xae, 0x47, 0xe7, 0x1c, 0x5a, 0x41, 0xd5, 0x0c, 0x24, 0x0b, 0xf5, + 0x6a, 0xa4, 0x4a, 0x8a, 0x75, 0x54, 0x29, 0xf0, 0x7c, 0x3e, 0x21, 0xd3, 0x1a, 0xcb, 0x60, 0xe6, + 0xd2, 0x91, 0x35, 0xe5, 0x9a, 0xb7, 0xa2, 0xff, 0x94, 0x0e, 0x1a, 0x09, 0xa2, 0x99, 0x91, 0x04, + 0xfe, 0xb1, 0x1f, 0x1c, 0x4c, 0xae, 0x7f, 0xcd, 0xbd, 0xa3, 0x13, 0xc6, 0x2f, 0x07, 0x7b, 0x49, + 0x39, 0xc2, 0xf7, 0xf1, 0x4a, 0x7f, 0x00, 0x2b, 0xce, 0xde, 0x4e, 0xbd, 0x3f, 0x51, 0x65, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/black_dn_png.h b/cinelerra-5.1/plugins/synthesizer/black_dn_png.h index 925d946d..128474b9 100644 --- a/cinelerra-5.1/plugins/synthesizer/black_dn_png.h +++ b/cinelerra-5.1/plugins/synthesizer/black_dn_png.h @@ -2,43 +2,43 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef BLACK_DN_PNG_H #define BLACK_DN_PNG_H -static unsigned char black_dn_png[] = +static unsigned char black_dn_png[] = { - 0x00, 0x00, 0x00, 0xe2, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, - 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, - 0x02, 0x0b, 0x07, 0x2b, 0x03, 0x84, 0x18, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x00, 0x58, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0xda, 0xb1, 0x11, - 0x80, 0x30, 0x10, 0x03, 0xc1, 0xb7, 0x87, 0xe2, 0x54, 0xf2, 0x77, 0x67, 0x52, 0x28, 0xc0, 0x86, - 0x60, 0x2f, 0x53, 0xb4, 0x0d, 0x68, 0x24, 0x59, 0x75, 0xb8, 0xeb, 0x39, 0xba, 0x7b, 0x3b, 0x98, - 0xa4, 0x66, 0x7d, 0x10, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, - 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, - 0x14, 0x0a, 0x85, 0x42, 0xa1, 0xbf, 0x42, 0x5f, 0x17, 0xbe, 0x24, 0x47, 0xd0, 0x1b, 0xfb, 0x92, - 0x06, 0x65, 0x61, 0x5b, 0x43, 0x51, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x00, 0x00, 0x00, 0xe2, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, + 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, + 0x02, 0x0b, 0x07, 0x2b, 0x03, 0x84, 0x18, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x00, 0x58, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0xda, 0xb1, 0x11, + 0x80, 0x30, 0x10, 0x03, 0xc1, 0xb7, 0x87, 0xe2, 0x54, 0xf2, 0x77, 0x67, 0x52, 0x28, 0xc0, 0x86, + 0x60, 0x2f, 0x53, 0xb4, 0x0d, 0x68, 0x24, 0x59, 0x75, 0xb8, 0xeb, 0x39, 0xba, 0x7b, 0x3b, 0x98, + 0xa4, 0x66, 0x7d, 0x10, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, + 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, + 0x14, 0x0a, 0x85, 0x42, 0xa1, 0xbf, 0x42, 0x5f, 0x17, 0xbe, 0x24, 0x47, 0xd0, 0x1b, 0xfb, 0x92, + 0x06, 0x65, 0x61, 0x5b, 0x43, 0x51, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/black_hi_png.h b/cinelerra-5.1/plugins/synthesizer/black_hi_png.h index cfedeced..bb6cbaa0 100644 --- a/cinelerra-5.1/plugins/synthesizer/black_hi_png.h +++ b/cinelerra-5.1/plugins/synthesizer/black_hi_png.h @@ -2,66 +2,66 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef BLACK_HI_PNG_H #define BLACK_HI_PNG_H -static unsigned char black_hi_png[] = +static unsigned char black_hi_png[] = { - 0x00, 0x00, 0x02, 0x5f, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, - 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, - 0x02, 0x0b, 0x07, 0x2a, 0x2b, 0xa8, 0xb6, 0x71, 0xbb, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x01, 0xd5, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0x9a, 0x59, 0x6e, - 0xc3, 0x30, 0x0c, 0x44, 0x47, 0x74, 0xef, 0x94, 0x2b, 0xe4, 0xe8, 0xbe, 0x94, 0xe5, 0x7e, 0x51, - 0x60, 0x69, 0x6e, 0x71, 0xd1, 0x05, 0x2d, 0x09, 0x08, 0x0a, 0x1c, 0x29, 0x4f, 0x33, 0xb4, 0x93, - 0x8f, 0xcc, 0x78, 0x3e, 0x9f, 0x27, 0x00, 0xec, 0xfb, 0x8e, 0x6d, 0xdb, 0x40, 0x44, 0x20, 0x22, - 0x8c, 0x31, 0xd6, 0x2c, 0x07, 0x80, 0x35, 0x03, 0xc0, 0x79, 0x9e, 0x6b, 0x96, 0x63, 0xce, 0xb9, - 0x66, 0x1e, 0x8f, 0xc7, 0x03, 0x00, 0xf0, 0xc6, 0x9b, 0x25, 0x70, 0xdb, 0xb6, 0x05, 0xd5, 0x60, - 0xaf, 0x34, 0x70, 0x8c, 0xb1, 0x0e, 0xa4, 0x6b, 0x41, 0x25, 0x50, 0xce, 0x5a, 0xa9, 0x05, 0xd6, - 0x2a, 0x89, 0x08, 0x73, 0x4e, 0x1c, 0xc7, 0x91, 0x43, 0x35, 0xd0, 0xb2, 0x3a, 0xb2, 0x57, 0x5a, - 0x1a, 0x55, 0xaa, 0x54, 0x5b, 0x1c, 0x41, 0x59, 0xa1, 0xe5, 0x88, 0xb4, 0x7a, 0x41, 0x79, 0xa1, - 0x04, 0xc9, 0xfe, 0x7a, 0x16, 0x6b, 0x6b, 0xad, 0x03, 0xf1, 0x41, 0x4c, 0xa8, 0xb4, 0x52, 0x5b, - 0x5b, 0xb5, 0x77, 0xce, 0x09, 0x22, 0xfa, 0x70, 0x20, 0x76, 0xc0, 0x55, 0x6a, 0xa9, 0xad, 0x42, - 0xbd, 0x1b, 0x2c, 0x54, 0xaa, 0x9f, 0x4d, 0xab, 0xa7, 0x9e, 0xbd, 0x7c, 0x5f, 0xc8, 0xeb, 0xde, - 0x9e, 0x0b, 0x54, 0xab, 0xf6, 0x86, 0x57, 0xde, 0x97, 0x89, 0x0b, 0xcd, 0x80, 0xac, 0x44, 0x43, - 0xc7, 0x18, 0xab, 0x67, 0xde, 0x01, 0xe5, 0x1e, 0xb2, 0x4e, 0xe9, 0x29, 0xa8, 0xcc, 0x9e, 0x72, - 0x59, 0x54, 0xb1, 0xc8, 0x3b, 0x75, 0xc5, 0x1d, 0xab, 0x48, 0x2b, 0xc9, 0xaa, 0xaa, 0x30, 0x52, - 0x4b, 0xd6, 0x07, 0x66, 0xf6, 0x78, 0xc0, 0xec, 0x26, 0x0b, 0xed, 0xfd, 0xea, 0x22, 0xcf, 0xbe, - 0xc8, 0xda, 0xcf, 0xee, 0xf9, 0x1d, 0x4a, 0xff, 0x1f, 0xb4, 0xda, 0xbf, 0x3b, 0x7d, 0x6e, 0x7b, - 0x1b, 0xda, 0xd0, 0x86, 0x36, 0xb4, 0xa1, 0x0d, 0x6d, 0x68, 0x43, 0x1b, 0xda, 0xd0, 0x86, 0x36, - 0xb4, 0xa1, 0x0d, 0x6d, 0x68, 0x43, 0x1b, 0xda, 0xd0, 0x86, 0x36, 0xf4, 0xfb, 0xa0, 0xde, 0x5f, - 0xcb, 0xfa, 0x7a, 0x75, 0x5d, 0xdb, 0xfb, 0x73, 0xd0, 0xa8, 0x17, 0x77, 0xfa, 0x67, 0xbd, 0x47, - 0xd9, 0x02, 0xf9, 0xa7, 0xac, 0x5e, 0x67, 0x5d, 0x8f, 0x0e, 0x70, 0x81, 0x56, 0x16, 0x5b, 0xc0, - 0xca, 0x3e, 0x7d, 0x18, 0x8a, 0x16, 0x59, 0xc3, 0x03, 0x47, 0xeb, 0x53, 0x7b, 0xb3, 0xbe, 0x65, - 0x73, 0xa5, 0x3d, 0xa6, 0xbd, 0x15, 0x85, 0xd9, 0x75, 0x0d, 0x33, 0xc3, 0x15, 0x91, 0x45, 0x32, - 0x36, 0x90, 0x85, 0x2b, 0x2a, 0x56, 0x5f, 0xa0, 0x1c, 0x8e, 0xd0, 0x19, 0x14, 0x19, 0x98, 0xc8, - 0xc2, 0x15, 0x9c, 0x61, 0x29, 0x43, 0xad, 0x30, 0x04, 0x57, 0x35, 0xd1, 0xa1, 0x47, 0x08, 0x65, - 0x95, 0x12, 0xca, 0x71, 0x02, 0x1d, 0x96, 0x88, 0xec, 0xd5, 0x40, 0x9e, 0x43, 0x7b, 0xb5, 0x9a, - 0x6a, 0x4a, 0xc7, 0x53, 0xeb, 0x2a, 0xb5, 0x2c, 0xd5, 0x7d, 0x7e, 0x25, 0x8f, 0xc4, 0xe3, 0x38, - 0x8e, 0xf5, 0xda, 0x84, 0x7a, 0xcf, 0x19, 0x5b, 0x5c, 0x4d, 0x5e, 0x31, 0x98, 0x81, 0x3c, 0xa7, - 0x50, 0x8e, 0xf4, 0xdc, 0xcd, 0x98, 0xb1, 0xea, 0x97, 0x94, 0xca, 0xc7, 0xe6, 0x4e, 0x9a, 0xce, - 0xea, 0xef, 0x05, 0xca, 0xf1, 0xba, 0x3f, 0xfb, 0x23, 0xfe, 0x0e, 0x85, 0xb6, 0xe5, 0x4d, 0xf2, + 0x00, 0x00, 0x02, 0x5f, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, + 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, + 0x02, 0x0b, 0x07, 0x2a, 0x2b, 0xa8, 0xb6, 0x71, 0xbb, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x01, 0xd5, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0x9a, 0x59, 0x6e, + 0xc3, 0x30, 0x0c, 0x44, 0x47, 0x74, 0xef, 0x94, 0x2b, 0xe4, 0xe8, 0xbe, 0x94, 0xe5, 0x7e, 0x51, + 0x60, 0x69, 0x6e, 0x71, 0xd1, 0x05, 0x2d, 0x09, 0x08, 0x0a, 0x1c, 0x29, 0x4f, 0x33, 0xb4, 0x93, + 0x8f, 0xcc, 0x78, 0x3e, 0x9f, 0x27, 0x00, 0xec, 0xfb, 0x8e, 0x6d, 0xdb, 0x40, 0x44, 0x20, 0x22, + 0x8c, 0x31, 0xd6, 0x2c, 0x07, 0x80, 0x35, 0x03, 0xc0, 0x79, 0x9e, 0x6b, 0x96, 0x63, 0xce, 0xb9, + 0x66, 0x1e, 0x8f, 0xc7, 0x03, 0x00, 0xf0, 0xc6, 0x9b, 0x25, 0x70, 0xdb, 0xb6, 0x05, 0xd5, 0x60, + 0xaf, 0x34, 0x70, 0x8c, 0xb1, 0x0e, 0xa4, 0x6b, 0x41, 0x25, 0x50, 0xce, 0x5a, 0xa9, 0x05, 0xd6, + 0x2a, 0x89, 0x08, 0x73, 0x4e, 0x1c, 0xc7, 0x91, 0x43, 0x35, 0xd0, 0xb2, 0x3a, 0xb2, 0x57, 0x5a, + 0x1a, 0x55, 0xaa, 0x54, 0x5b, 0x1c, 0x41, 0x59, 0xa1, 0xe5, 0x88, 0xb4, 0x7a, 0x41, 0x79, 0xa1, + 0x04, 0xc9, 0xfe, 0x7a, 0x16, 0x6b, 0x6b, 0xad, 0x03, 0xf1, 0x41, 0x4c, 0xa8, 0xb4, 0x52, 0x5b, + 0x5b, 0xb5, 0x77, 0xce, 0x09, 0x22, 0xfa, 0x70, 0x20, 0x76, 0xc0, 0x55, 0x6a, 0xa9, 0xad, 0x42, + 0xbd, 0x1b, 0x2c, 0x54, 0xaa, 0x9f, 0x4d, 0xab, 0xa7, 0x9e, 0xbd, 0x7c, 0x5f, 0xc8, 0xeb, 0xde, + 0x9e, 0x0b, 0x54, 0xab, 0xf6, 0x86, 0x57, 0xde, 0x97, 0x89, 0x0b, 0xcd, 0x80, 0xac, 0x44, 0x43, + 0xc7, 0x18, 0xab, 0x67, 0xde, 0x01, 0xe5, 0x1e, 0xb2, 0x4e, 0xe9, 0x29, 0xa8, 0xcc, 0x9e, 0x72, + 0x59, 0x54, 0xb1, 0xc8, 0x3b, 0x75, 0xc5, 0x1d, 0xab, 0x48, 0x2b, 0xc9, 0xaa, 0xaa, 0x30, 0x52, + 0x4b, 0xd6, 0x07, 0x66, 0xf6, 0x78, 0xc0, 0xec, 0x26, 0x0b, 0xed, 0xfd, 0xea, 0x22, 0xcf, 0xbe, + 0xc8, 0xda, 0xcf, 0xee, 0xf9, 0x1d, 0x4a, 0xff, 0x1f, 0xb4, 0xda, 0xbf, 0x3b, 0x7d, 0x6e, 0x7b, + 0x1b, 0xda, 0xd0, 0x86, 0x36, 0xb4, 0xa1, 0x0d, 0x6d, 0x68, 0x43, 0x1b, 0xda, 0xd0, 0x86, 0x36, + 0xb4, 0xa1, 0x0d, 0x6d, 0x68, 0x43, 0x1b, 0xda, 0xd0, 0x86, 0x36, 0xf4, 0xfb, 0xa0, 0xde, 0x5f, + 0xcb, 0xfa, 0x7a, 0x75, 0x5d, 0xdb, 0xfb, 0x73, 0xd0, 0xa8, 0x17, 0x77, 0xfa, 0x67, 0xbd, 0x47, + 0xd9, 0x02, 0xf9, 0xa7, 0xac, 0x5e, 0x67, 0x5d, 0x8f, 0x0e, 0x70, 0x81, 0x56, 0x16, 0x5b, 0xc0, + 0xca, 0x3e, 0x7d, 0x18, 0x8a, 0x16, 0x59, 0xc3, 0x03, 0x47, 0xeb, 0x53, 0x7b, 0xb3, 0xbe, 0x65, + 0x73, 0xa5, 0x3d, 0xa6, 0xbd, 0x15, 0x85, 0xd9, 0x75, 0x0d, 0x33, 0xc3, 0x15, 0x91, 0x45, 0x32, + 0x36, 0x90, 0x85, 0x2b, 0x2a, 0x56, 0x5f, 0xa0, 0x1c, 0x8e, 0xd0, 0x19, 0x14, 0x19, 0x98, 0xc8, + 0xc2, 0x15, 0x9c, 0x61, 0x29, 0x43, 0xad, 0x30, 0x04, 0x57, 0x35, 0xd1, 0xa1, 0x47, 0x08, 0x65, + 0x95, 0x12, 0xca, 0x71, 0x02, 0x1d, 0x96, 0x88, 0xec, 0xd5, 0x40, 0x9e, 0x43, 0x7b, 0xb5, 0x9a, + 0x6a, 0x4a, 0xc7, 0x53, 0xeb, 0x2a, 0xb5, 0x2c, 0xd5, 0x7d, 0x7e, 0x25, 0x8f, 0xc4, 0xe3, 0x38, + 0x8e, 0xf5, 0xda, 0x84, 0x7a, 0xcf, 0x19, 0x5b, 0x5c, 0x4d, 0x5e, 0x31, 0x98, 0x81, 0x3c, 0xa7, + 0x50, 0x8e, 0xf4, 0xdc, 0xcd, 0x98, 0xb1, 0xea, 0x97, 0x94, 0xca, 0xc7, 0xe6, 0x4e, 0x9a, 0xce, + 0xea, 0xef, 0x05, 0xca, 0xf1, 0xba, 0x3f, 0xfb, 0x23, 0xfe, 0x0e, 0x85, 0xb6, 0xe5, 0x4d, 0xf2, 0x31, 0x44, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/black_up_png.h b/cinelerra-5.1/plugins/synthesizer/black_up_png.h index 09a544f1..19467a36 100644 --- a/cinelerra-5.1/plugins/synthesizer/black_up_png.h +++ b/cinelerra-5.1/plugins/synthesizer/black_up_png.h @@ -2,43 +2,43 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef BLACK_UP_PNG_H #define BLACK_UP_PNG_H -static unsigned char black_up_png[] = +static unsigned char black_up_png[] = { - 0x00, 0x00, 0x00, 0xe2, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, - 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, - 0x02, 0x0b, 0x07, 0x2a, 0x18, 0x17, 0x66, 0x10, 0xad, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x00, 0x58, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0xda, 0xb1, 0x0d, - 0x80, 0x50, 0x14, 0x02, 0x40, 0x34, 0x0e, 0xc7, 0xc8, 0x6f, 0x3b, 0x7f, 0xf5, 0x47, 0x30, 0x1a, - 0x73, 0x54, 0x74, 0x17, 0x7a, 0x8e, 0xb6, 0x77, 0x92, 0xcc, 0x4c, 0x9e, 0x4e, 0xdb, 0x24, 0xc9, - 0x99, 0x17, 0x02, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, - 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, - 0x42, 0xa1, 0x50, 0xe8, 0xa7, 0xd0, 0x6b, 0x97, 0x7d, 0xaf, 0xfb, 0xed, 0xd2, 0x05, 0x7d, 0x42, - 0x06, 0x63, 0x11, 0xb3, 0x8c, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x00, 0x00, 0x00, 0xe2, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x59, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x5a, 0x2f, + 0x75, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, + 0x02, 0x0b, 0x07, 0x2a, 0x18, 0x17, 0x66, 0x10, 0xad, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x00, 0x58, 0x49, 0x44, 0x41, 0x54, 0x68, 0xde, 0xed, 0xda, 0xb1, 0x0d, + 0x80, 0x50, 0x14, 0x02, 0x40, 0x34, 0x0e, 0xc7, 0xc8, 0x6f, 0x3b, 0x7f, 0xf5, 0x47, 0x30, 0x1a, + 0x73, 0x54, 0x74, 0x17, 0x7a, 0x8e, 0xb6, 0x77, 0x92, 0xcc, 0x4c, 0x9e, 0x4e, 0xdb, 0x24, 0xc9, + 0x99, 0x17, 0x02, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, + 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, 0x42, 0xa1, 0x50, 0x28, 0x14, 0x0a, 0x85, + 0x42, 0xa1, 0x50, 0xe8, 0xa7, 0xd0, 0x6b, 0x97, 0x7d, 0xaf, 0xfb, 0xed, 0xd2, 0x05, 0x7d, 0x42, + 0x06, 0x63, 0x11, 0xb3, 0x8c, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/synthesizer.C b/cinelerra-5.1/plugins/synthesizer/synthesizer.C index 72ead069..01a49738 100644 --- a/cinelerra-5.1/plugins/synthesizer/synthesizer.C +++ b/cinelerra-5.1/plugins/synthesizer/synthesizer.C @@ -1,7 +1,7 @@ /* * CINELERRA - * Copyright (C) 1997-2011 Adam Williams + * Copyright (C) 1997-2017 Adam Williams * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -86,7 +86,6 @@ void Synth::read_data(KeyFrame *keyframe) //printf("Synth::read_data %s\n", keyframe->get_data()); int result = 0, current_osc = 0; - //int total_oscillators = 0; while(!result) { result = input.read_tag(); @@ -112,7 +111,7 @@ void Synth::read_data(KeyFrame *keyframe) } config.wavefunction = input.tag.get_property("WAVEFUNCTION", config.wavefunction); - //total_oscillators = input.tag.get_property("OSCILLATORS", 0); + // int total_oscillators = input.tag.get_property("OSCILLATORS", 0); } else if(input.tag.title_is("OSCILLATOR")) @@ -164,9 +163,6 @@ void Synth::save_data(KeyFrame *keyframe) config.oscillator_config.values[i]->save_data(&output); } - output.tag.set_title("/SYNTH"); - output.append_tag(); - output.append_newline(); output.terminate_string(); //printf("Synth::save_data %d %s\n", __LINE__, output.string); // data is now in *text @@ -176,19 +172,21 @@ void Synth::save_data(KeyFrame *keyframe) void Synth::update_gui() { - if( !thread ) return; - SynthWindow *window = (SynthWindow*)thread->window; -// load_configuration,read_data deletes oscillator_config - window->lock_window("Synth::update_gui"); - if( load_configuration() ) - window->update_gui(); - window->unlock_window(); + if(thread) + { + if(load_configuration()) + { + thread->window->lock_window(); + ((SynthWindow*)thread->window)->update_gui(); + thread->window->unlock_window(); + } + } } void Synth::add_oscillator() { - if(config.oscillator_config.total > 20) return; + if(config.oscillator_config.total > MAX_OSCILLATORS) return; config.oscillator_config.append(new SynthOscillatorConfig(config.oscillator_config.total - 1)); } @@ -234,8 +232,8 @@ double Synth::solve_eqn(double *output, freq; // Starting sample in waveform double x = waveform_sample; - double phase_offset = config->phase * orig_period; //printf("Synth::solve_eqn %d %f\n", __LINE__, config->phase); + double phase_offset = config->phase * orig_period; // Period of current oscillator double period = orig_period / config->freq_factor; int sample; @@ -325,18 +323,25 @@ double Synth::get_oscillator_point(float x, { case DC: return power; + break; case SINE: return sin((x + config->phase) * config->freq_factor * 2 * M_PI) * power; + break; case SAWTOOTH: return function_sawtooth((x + config->phase) * config->freq_factor) * power; + break; case SQUARE: return function_square((x + config->phase) * config->freq_factor) * power; + break; case TRIANGLE: return function_triangle((x + config->phase) * config->freq_factor) * power; + break; case PULSE: return function_pulse((x + config->phase) * config->freq_factor) * power; + break; case NOISE: return function_noise() * power; + break; } return 0; } @@ -521,6 +526,8 @@ static const char *keyboard_map[] = void SynthWindow::create_objects() { + int margin = client->get_theme()->widget_border; + BC_MenuBar *menu; add_subwindow(menu = new BC_MenuBar(0, 0, get_w())); @@ -541,6 +548,7 @@ void SynthWindow::create_objects() phasemenu->add_item(new SynthPhaseSine(synth)); phasemenu->add_item(new SynthPhaseZero(synth)); + harmonicmenu->add_item(new SynthFreqMin(synth)); harmonicmenu->add_item(new SynthFreqEnum(synth)); harmonicmenu->add_item(new SynthFreqEven(synth)); harmonicmenu->add_item(new SynthFreqFibonacci(synth)); @@ -566,7 +574,7 @@ void SynthWindow::create_objects() add_subwindow(waveform = new SynthWaveForm(synth, x, y, string)); waveform->create_objects(); y += ys30; - int x1 = x + waveform->get_w() + xs10; + int x1 = x + waveform->get_w() + xs50; add_subwindow(new BC_Title(x, y, _("Base Frequency:"))); @@ -633,24 +641,21 @@ void SynthWindow::create_objects() add_subwindow(note_subwindow = new BC_SubWindow(x1+xS(20), - y, - get_w() - (x1+xS(20)), - white_key[0]->get_h() + MARGIN + - get_text_height(MEDIUMFONT) + MARGIN + - get_text_height(MEDIUMFONT) + MARGIN)); - add_subwindow(note_scroll = new NoteScroll(synth, - this, - x1, + y, get_w() - (x1+xS(20)), + white_key[0]->get_h() + margin + + get_text_height(MEDIUMFONT) + margin + + get_text_height(MEDIUMFONT) + margin)); + add_subwindow(note_scroll = new NoteScroll(synth, this, x1, note_subwindow->get_y() + note_subwindow->get_h(), note_subwindow->get_w())); add_subwindow(momentary = new SynthMomentary(this, x1, - note_scroll->get_y() + note_scroll->get_h() + MARGIN, + note_scroll->get_y() + note_scroll->get_h() + margin, _("Momentary notes"))); add_subwindow(note_instructions = new BC_Title( x1, - momentary->get_y() + momentary->get_h() + MARGIN, + momentary->get_y() + momentary->get_h() + margin, _("Ctrl or Shift to select multiple notes."))); update_scrollbar(); @@ -740,8 +745,7 @@ void SynthWindow::update_whitekey(int number, if(number >= FIRST_TITLE && number < LAST_TITLE) note_subwindow->add_subwindow( note_titles[(*current_title)++] = new BC_Title( - x + text_white_margin, - y2, + x + text_white_margin, y2, keyboard_map[number - FIRST_TITLE])); //printf("SynthWindow::update_whitekey %d\n", __LINE__); } @@ -767,15 +771,13 @@ void SynthWindow::update_blackkey(int number, if(number >= FIRST_TITLE && number < LAST_TITLE) note_subwindow->add_subwindow( note_titles[(*current_title)++] = new BC_Title(x + text_black_margin, - y1, - keyboard_map[number - FIRST_TITLE])); + y1, keyboard_map[number - FIRST_TITLE])); } else { notes[number]->reposition_window(x, y); if(number >= FIRST_TITLE && number < LAST_TITLE) - note_titles[(*current_title)++]->reposition_window(x + text_black_margin, - y1); + note_titles[(*current_title)++]->reposition_window(x + text_black_margin, y1); } } @@ -787,11 +789,10 @@ void SynthWindow::update_notes() int white_w1 = white_w - black_w / 2 - 2; int white_w2 = white_w / 2; int white_w3 = white_w * 2 / 3; - int y = 0; - int x = 0; - y1 = y + white_key[0]->get_h() + 10; - y2 = y1 + get_text_height(MEDIUMFONT) + 10; - y3 = y2 + get_text_height(MEDIUMFONT) + 10; + int x = 0, y = 0, ys5 = yS(5); + y1 = y + white_key[0]->get_h() + ys5; + y2 = y1 + get_text_height(MEDIUMFONT) + ys5; + y3 = y2 + get_text_height(MEDIUMFONT) + ys5; text_black_margin = black_w / 2 - get_text_width(MEDIUMFONT, "O") / 2; text_white_margin = white_w / 2 - get_text_width(MEDIUMFONT, "O") / 2; @@ -951,7 +952,7 @@ void SynthWindow::update_oscillators() gui->phase->update((int64_t)(config->phase * 360)); gui->freq->reposition_window(gui->freq->get_x(), y); - gui->freq->update((int64_t)(config->freq_factor)); + gui->freq->update(config->freq_factor); } y += OSCILLATORHEIGHT; } @@ -1182,6 +1183,11 @@ int SynthNote::draw_face(int flash, int flush) } + + + + + SynthOscGUI::SynthOscGUI(SynthWindow *window, int number) { this->window = window; @@ -1259,7 +1265,7 @@ int SynthOscGUIPhase::handle_event() SynthOscGUIFreq::SynthOscGUIFreq(Synth *synth, SynthOscGUI *gui, int y) - : BC_IPot(xS(200), y, + : BC_FPot(xS(200), y, (int64_t)(synth->config.oscillator_config.values[gui->number]->freq_factor), 1, 100) { @@ -1381,6 +1387,10 @@ int SynthClear::handle_event() } + + + + SynthWaveForm::SynthWaveForm(Synth *synth, int x, int y, char *text) : BC_PopupMenu(x, y, xS(120), text) { @@ -1817,6 +1827,74 @@ int SynthFreqRandom::handle_event() return 1; } +SynthFreqPow1::SynthFreqPow1(Synth *synth) + : BC_MenuItem(_("Powers of 1.4")) +{ + this->synth = synth; +} +SynthFreqPow1::~SynthFreqPow1() +{ +} + +int SynthFreqPow1::handle_event() +{ + for(int i = 0; i < synth->config.oscillator_config.total; i++) + { + synth->config.oscillator_config.values[i]->freq_factor = pow(sqrt(2), i); + } + + ((SynthWindow*)synth->thread->window)->update_gui(); + synth->send_configure_change(); + return 1; +} + + +SynthFreqPow2::SynthFreqPow2(Synth *synth) + : BC_MenuItem(_("Powers of 2")) +{ + this->synth = synth; +} +SynthFreqPow2::~SynthFreqPow2() +{ +} + +int SynthFreqPow2::handle_event() +{ + for(int i = 0; i < synth->config.oscillator_config.total; i++) + { + synth->config.oscillator_config.values[i]->freq_factor = pow(2, i); + } + + ((SynthWindow*)synth->thread->window)->update_gui(); + synth->send_configure_change(); + return 1; +} + + + + +SynthFreqMin::SynthFreqMin(Synth *synth) + : BC_MenuItem(_("Minimum")) +{ + this->synth = synth; +} +SynthFreqMin::~SynthFreqMin() +{ +} + +int SynthFreqMin::handle_event() +{ + for(int i = 0; i < synth->config.oscillator_config.total; i++) + { + synth->config.oscillator_config.values[i]->freq_factor = 1; + } + + ((SynthWindow*)synth->thread->window)->update_gui(); + synth->send_configure_change(); + return 1; +} + + SynthFreqEnum::SynthFreqEnum(Synth *synth) : BC_MenuItem(_("Enumerate")) { diff --git a/cinelerra-5.1/plugins/synthesizer/synthesizer.h b/cinelerra-5.1/plugins/synthesizer/synthesizer.h index d8d10bd3..79bc0356 100644 --- a/cinelerra-5.1/plugins/synthesizer/synthesizer.h +++ b/cinelerra-5.1/plugins/synthesizer/synthesizer.h @@ -28,10 +28,12 @@ #include "guicast.h" #include "mutex.h" #include "pluginaclient.h" -#include "synthesizer.inc" #include "vframe.inc" +class Synth; +class SynthWindow; + // Frequency table for piano float keyboard_freqs[] = { @@ -106,12 +108,13 @@ float keyboard_freqs[] = }; #define MAX_FREQS 16 -#define TOTALOSCILLATORS 1 +#define MAX_OSCILLATORS 256 +#define OSCILLATORHEIGHT yS(40) #define TOTALNOTES ((int)(sizeof(keyboard_freqs) / sizeof(float))) #define MIDDLE_C 24 #define FIRST_TITLE (MIDDLE_C - 12) #define LAST_TITLE (MIDDLE_C + 12) -#define MARGIN yS(10) +#define YMARGIN yS(10) #define SINE 0 #define SAWTOOTH 1 @@ -251,7 +254,7 @@ public: SynthOscGUI *gui; }; -class SynthOscGUIFreq : public BC_IPot +class SynthOscGUIFreq : public BC_FPot { public: SynthOscGUIFreq(Synth *synth, SynthOscGUI *gui, int y); @@ -507,6 +510,24 @@ public: Synth *synth; }; +class SynthFreqPow1 : public BC_MenuItem +{ +public: + SynthFreqPow1(Synth *synth); + ~SynthFreqPow1(); + int handle_event(); + Synth *synth; +}; + +class SynthFreqPow2 : public BC_MenuItem +{ +public: + SynthFreqPow2(Synth *synth); + ~SynthFreqPow2(); + int handle_event(); + Synth *synth; +}; + class SynthFreqEnum : public BC_MenuItem { public: @@ -516,6 +537,15 @@ public: Synth *synth; }; +class SynthFreqMin : public BC_MenuItem +{ +public: + SynthFreqMin(Synth *synth); + ~SynthFreqMin(); + int handle_event(); + Synth *synth; +}; + class SynthFreqEven : public BC_MenuItem { public: diff --git a/cinelerra-5.1/plugins/synthesizer/synthesizer.inc b/cinelerra-5.1/plugins/synthesizer/synthesizer.inc index 024c704a..d1cddf89 100644 --- a/cinelerra-5.1/plugins/synthesizer/synthesizer.inc +++ b/cinelerra-5.1/plugins/synthesizer/synthesizer.inc @@ -2,21 +2,21 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef SYNTHESIZER_INC @@ -27,6 +27,6 @@ class Synth; class SynthOscillator; -#define OSCILLATORHEIGHT yS(40) + #endif diff --git a/cinelerra-5.1/plugins/synthesizer/synthwindow.inc b/cinelerra-5.1/plugins/synthesizer/synthwindow.inc index cddf8077..a4b4e7f7 100644 --- a/cinelerra-5.1/plugins/synthesizer/synthwindow.inc +++ b/cinelerra-5.1/plugins/synthesizer/synthwindow.inc @@ -2,26 +2,28 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef SYNTHWINDOW_INC #define SYNTHWINDOW_INC + + class SynthThread; class SynthOscGUI; class SynthOscGUILevel; @@ -38,4 +40,7 @@ class SynthSubWindow; class SynthScroll; class SynthClear; +#define OSCILLATORHEIGHT 40 + + #endif diff --git a/cinelerra-5.1/plugins/synthesizer/white_checked_png.h b/cinelerra-5.1/plugins/synthesizer/white_checked_png.h index 161515b8..9ccc8b51 100644 --- a/cinelerra-5.1/plugins/synthesizer/white_checked_png.h +++ b/cinelerra-5.1/plugins/synthesizer/white_checked_png.h @@ -2,44 +2,44 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef WHITE_CHECKED_PNG_H #define WHITE_CHECKED_PNG_H -static unsigned char white_checked_png[] = +static unsigned char white_checked_png[] = { - 0x00, 0x00, 0x00, 0xfb, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, - 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, - 0x07, 0x09, 0x11, 0x02, 0x01, 0xa5, 0x44, 0x3c, 0x2b, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x00, 0x71, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xdc, 0x31, 0x0d, - 0x00, 0x20, 0x10, 0x04, 0xc1, 0x87, 0xa0, 0x19, 0x0f, 0xa8, 0xc2, 0x03, 0x8a, 0xe8, 0x08, 0x06, - 0xf8, 0x82, 0xcc, 0x56, 0xd7, 0x8d, 0x83, 0x2b, 0xb3, 0xf7, 0x78, 0xdf, 0x58, 0xeb, 0xec, 0x1a, - 0xe9, 0x21, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, - 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, - 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, - 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0xfc, - 0x82, 0x6c, 0xf7, 0xa5, 0x51, 0x4e, 0x1b, 0xcd, 0x2e, 0x07, 0x4f, 0xa7, 0x42, 0x67, 0xd0, 0x00, + 0x00, 0x00, 0x00, 0xfb, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, + 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, + 0x07, 0x09, 0x11, 0x02, 0x01, 0xa5, 0x44, 0x3c, 0x2b, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x00, 0x71, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xdc, 0x31, 0x0d, + 0x00, 0x20, 0x10, 0x04, 0xc1, 0x87, 0xa0, 0x19, 0x0f, 0xa8, 0xc2, 0x03, 0x8a, 0xe8, 0x08, 0x06, + 0xf8, 0x82, 0xcc, 0x56, 0xd7, 0x8d, 0x83, 0x2b, 0xb3, 0xf7, 0x78, 0xdf, 0x58, 0xeb, 0xec, 0x1a, + 0xe9, 0x21, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, + 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, + 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, + 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0xfc, + 0x82, 0x6c, 0xf7, 0xa5, 0x51, 0x4e, 0x1b, 0xcd, 0x2e, 0x07, 0x4f, 0xa7, 0x42, 0x67, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/white_checkedhi_png.h b/cinelerra-5.1/plugins/synthesizer/white_checkedhi_png.h index 9deb264a..b8377165 100644 --- a/cinelerra-5.1/plugins/synthesizer/white_checkedhi_png.h +++ b/cinelerra-5.1/plugins/synthesizer/white_checkedhi_png.h @@ -2,74 +2,74 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef WHITE_CHECKEDHI_PNG_H #define WHITE_CHECKEDHI_PNG_H -static unsigned char white_checkedhi_png[] = +static unsigned char white_checkedhi_png[] = { - 0x00, 0x00, 0x02, 0xd3, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, - 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, - 0x07, 0x09, 0x11, 0x04, 0x0f, 0x14, 0xa6, 0xb6, 0xaa, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x02, 0x49, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xdc, 0xcd, 0x75, - 0xc3, 0x20, 0x10, 0x04, 0xe0, 0x1d, 0x4c, 0xcd, 0xe9, 0x21, 0x55, 0xa5, 0x87, 0xf4, 0x93, 0x9d, - 0x1c, 0x16, 0x10, 0xc2, 0xfa, 0x41, 0x8e, 0xed, 0x4b, 0x86, 0x97, 0x03, 0x91, 0xf5, 0xf8, 0xb2, - 0x80, 0x51, 0x2e, 0x23, 0x7c, 0x7d, 0x7c, 0xd8, 0xeb, 0xdb, 0xe7, 0xf7, 0x77, 0xeb, 0x27, 0x7b, - 0x7b, 0x13, 0xf9, 0xa2, 0x96, 0x4f, 0xef, 0xc0, 0xc4, 0x28, 0x7c, 0x0a, 0x59, 0x24, 0xe0, 0x54, - 0x65, 0xdc, 0x40, 0x4e, 0xda, 0x79, 0xd7, 0x03, 0x50, 0x50, 0xec, 0x95, 0xcb, 0x7a, 0x9d, 0xa4, - 0x01, 0x34, 0x03, 0xc9, 0x07, 0xc8, 0xe6, 0x21, 0xb4, 0xda, 0xdf, 0x2e, 0x91, 0x8c, 0x2a, 0x19, - 0xbf, 0x00, 0xa7, 0x6a, 0x3e, 0xf2, 0x80, 0xd4, 0xf5, 0x87, 0x42, 0xd9, 0x48, 0x92, 0x80, 0x07, - 0x34, 0xa1, 0xde, 0x55, 0xb9, 0xf6, 0xe2, 0x07, 0xd5, 0xec, 0x6b, 0x8d, 0xfa, 0x42, 0x0c, 0xcf, - 0xdb, 0x07, 0x80, 0xed, 0xa3, 0x79, 0x73, 0x73, 0xc2, 0xac, 0x78, 0x29, 0xdd, 0xd6, 0x6a, 0x6c, - 0x28, 0x1b, 0x3c, 0xd2, 0xdc, 0xcd, 0xcc, 0x6b, 0x7d, 0xd8, 0xdf, 0x4a, 0x5b, 0x6b, 0x59, 0x47, - 0x4f, 0xc0, 0x0d, 0xb8, 0xa5, 0x94, 0x52, 0x4a, 0x8d, 0xec, 0x26, 0x36, 0x3c, 0xb8, 0x9b, 0xbb, - 0x01, 0x31, 0xa9, 0x65, 0x37, 0x5d, 0x5b, 0xcb, 0x0e, 0x5e, 0x0a, 0x0d, 0xb4, 0xde, 0xc0, 0x4a, - 0xc2, 0xdd, 0x52, 0x22, 0xe9, 0xf1, 0x27, 0x91, 0xc7, 0x25, 0xee, 0x7f, 0x49, 0xba, 0x16, 0x6a, - 0x5b, 0xd4, 0x7e, 0x2d, 0xdd, 0xcc, 0x52, 0xa2, 0xbb, 0x03, 0x09, 0xe8, 0x55, 0xdb, 0x5f, 0xce, - 0x3c, 0x50, 0xc3, 0x8a, 0xde, 0xef, 0xa3, 0xfb, 0x13, 0xc7, 0xd7, 0xd7, 0x71, 0x76, 0x20, 0x1c, - 0x9d, 0x3e, 0xfd, 0x4c, 0xf6, 0x1b, 0x68, 0xb5, 0x0a, 0x24, 0xba, 0x9b, 0x9f, 0x71, 0xac, 0xd7, - 0xba, 0x57, 0xa5, 0xaf, 0xfb, 0xcb, 0x36, 0x7e, 0x0a, 0xd9, 0x8f, 0xb8, 0x0d, 0x4f, 0x1c, 0xc2, - 0x7f, 0x78, 0x78, 0x45, 0x29, 0xc0, 0xd2, 0xf9, 0xa7, 0x8f, 0x68, 0xfc, 0x8b, 0x2a, 0x45, 0x8a, - 0x14, 0x29, 0x52, 0xa4, 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52, 0xa4, 0x48, 0x91, 0x22, - 0x45, 0x8a, 0x14, 0x29, 0x52, 0xa4, 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52, 0xa4, 0x48, - 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52, 0xa4, 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52, - 0xa4, 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x72, 0xb2, 0xf1, 0xc9, 0x64, 0x4d, 0xcb, 0x2e, - 0x9d, 0x57, 0x54, 0xc9, 0x1a, 0x05, 0x5e, 0xfa, 0xfd, 0x75, 0xbb, 0x10, 0x87, 0x9e, 0xae, 0xf2, - 0x00, 0x6b, 0x59, 0xd3, 0x8b, 0x55, 0xe6, 0xa3, 0xfa, 0x22, 0xa3, 0x5b, 0xe8, 0x71, 0x1e, 0x23, - 0xbb, 0xbb, 0xdc, 0xc9, 0xd9, 0x89, 0xce, 0x63, 0x4d, 0x00, 0x07, 0xb5, 0x66, 0x90, 0x6d, 0xc8, - 0x45, 0x93, 0x4e, 0x3a, 0x47, 0x8e, 0x8f, 0x55, 0xc9, 0xae, 0x79, 0xcd, 0xe8, 0xc6, 0x07, 0xe8, - 0xc6, 0x75, 0xd2, 0xdd, 0xbd, 0xde, 0xb6, 0xb2, 0x27, 0x73, 0xd1, 0xd6, 0x32, 0xf2, 0x5d, 0x7d, - 0x25, 0x13, 0xec, 0xee, 0x3b, 0x21, 0xe5, 0xa6, 0x36, 0xef, 0x72, 0x96, 0xb6, 0x2c, 0x61, 0x64, - 0xc8, 0x49, 0x73, 0x6f, 0x19, 0xe4, 0xbd, 0x28, 0xf6, 0x4f, 0x54, 0xd9, 0x2d, 0xf0, 0x2c, 0xc9, - 0x2e, 0xf6, 0x5c, 0xd6, 0xcf, 0xdd, 0x6a, 0xfa, 0xf8, 0x38, 0x70, 0xee, 0x55, 0x3d, 0x2d, 0x34, - 0x6f, 0xd4, 0x58, 0x23, 0xcd, 0xbe, 0x5c, 0x38, 0x8b, 0xd5, 0x47, 0xd4, 0x7c, 0xd9, 0xc4, 0x57, - 0xd2, 0xdf, 0xe5, 0x9d, 0x03, 0x4d, 0x25, 0x23, 0x5d, 0x7d, 0xf0, 0xf2, 0x80, 0x55, 0xc5, 0x76, - 0x16, 0x37, 0xdf, 0x5e, 0xcb, 0x4e, 0x6d, 0x53, 0xdd, 0xf6, 0xea, 0xe6, 0x89, 0xda, 0xbe, 0xa0, - 0xf6, 0xd8, 0x2b, 0x12, 0x16, 0xd5, 0xac, 0x84, 0xe5, 0x0f, 0x97, 0xe7, 0xea, 0xc9, 0x97, 0x8f, - 0x9f, 0x09, 0x68, 0x03, 0xed, 0x45, 0x92, 0xe7, 0xbe, 0x18, 0x53, 0xe4, 0x38, 0xd0, 0xa3, 0xcf, - 0x0d, 0xfd, 0x57, 0x20, 0x52, 0xe4, 0xe5, 0x96, 0xfb, 0x57, 0x1a, 0xbd, 0xa7, 0xfd, 0x02, 0x43, - 0x72, 0xcd, 0x31, 0x9b, 0x48, 0xbe, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x00, 0x00, 0x02, 0xd3, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, + 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, + 0x07, 0x09, 0x11, 0x04, 0x0f, 0x14, 0xa6, 0xb6, 0xaa, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x02, 0x49, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xdc, 0xcd, 0x75, + 0xc3, 0x20, 0x10, 0x04, 0xe0, 0x1d, 0x4c, 0xcd, 0xe9, 0x21, 0x55, 0xa5, 0x87, 0xf4, 0x93, 0x9d, + 0x1c, 0x16, 0x10, 0xc2, 0xfa, 0x41, 0x8e, 0xed, 0x4b, 0x86, 0x97, 0x03, 0x91, 0xf5, 0xf8, 0xb2, + 0x80, 0x51, 0x2e, 0x23, 0x7c, 0x7d, 0x7c, 0xd8, 0xeb, 0xdb, 0xe7, 0xf7, 0x77, 0xeb, 0x27, 0x7b, + 0x7b, 0x13, 0xf9, 0xa2, 0x96, 0x4f, 0xef, 0xc0, 0xc4, 0x28, 0x7c, 0x0a, 0x59, 0x24, 0xe0, 0x54, + 0x65, 0xdc, 0x40, 0x4e, 0xda, 0x79, 0xd7, 0x03, 0x50, 0x50, 0xec, 0x95, 0xcb, 0x7a, 0x9d, 0xa4, + 0x01, 0x34, 0x03, 0xc9, 0x07, 0xc8, 0xe6, 0x21, 0xb4, 0xda, 0xdf, 0x2e, 0x91, 0x8c, 0x2a, 0x19, + 0xbf, 0x00, 0xa7, 0x6a, 0x3e, 0xf2, 0x80, 0xd4, 0xf5, 0x87, 0x42, 0xd9, 0x48, 0x92, 0x80, 0x07, + 0x34, 0xa1, 0xde, 0x55, 0xb9, 0xf6, 0xe2, 0x07, 0xd5, 0xec, 0x6b, 0x8d, 0xfa, 0x42, 0x0c, 0xcf, + 0xdb, 0x07, 0x80, 0xed, 0xa3, 0x79, 0x73, 0x73, 0xc2, 0xac, 0x78, 0x29, 0xdd, 0xd6, 0x6a, 0x6c, + 0x28, 0x1b, 0x3c, 0xd2, 0xdc, 0xcd, 0xcc, 0x6b, 0x7d, 0xd8, 0xdf, 0x4a, 0x5b, 0x6b, 0x59, 0x47, + 0x4f, 0xc0, 0x0d, 0xb8, 0xa5, 0x94, 0x52, 0x4a, 0x8d, 0xec, 0x26, 0x36, 0x3c, 0xb8, 0x9b, 0xbb, + 0x01, 0x31, 0xa9, 0x65, 0x37, 0x5d, 0x5b, 0xcb, 0x0e, 0x5e, 0x0a, 0x0d, 0xb4, 0xde, 0xc0, 0x4a, + 0xc2, 0xdd, 0x52, 0x22, 0xe9, 0xf1, 0x27, 0x91, 0xc7, 0x25, 0xee, 0x7f, 0x49, 0xba, 0x16, 0x6a, + 0x5b, 0xd4, 0x7e, 0x2d, 0xdd, 0xcc, 0x52, 0xa2, 0xbb, 0x03, 0x09, 0xe8, 0x55, 0xdb, 0x5f, 0xce, + 0x3c, 0x50, 0xc3, 0x8a, 0xde, 0xef, 0xa3, 0xfb, 0x13, 0xc7, 0xd7, 0xd7, 0x71, 0x76, 0x20, 0x1c, + 0x9d, 0x3e, 0xfd, 0x4c, 0xf6, 0x1b, 0x68, 0xb5, 0x0a, 0x24, 0xba, 0x9b, 0x9f, 0x71, 0xac, 0xd7, + 0xba, 0x57, 0xa5, 0xaf, 0xfb, 0xcb, 0x36, 0x7e, 0x0a, 0xd9, 0x8f, 0xb8, 0x0d, 0x4f, 0x1c, 0xc2, + 0x7f, 0x78, 0x78, 0x45, 0x29, 0xc0, 0xd2, 0xf9, 0xa7, 0x8f, 0x68, 0xfc, 0x8b, 0x2a, 0x45, 0x8a, + 0x14, 0x29, 0x52, 0xa4, 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52, 0xa4, 0x48, 0x91, 0x22, + 0x45, 0x8a, 0x14, 0x29, 0x52, 0xa4, 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52, 0xa4, 0x48, + 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52, 0xa4, 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x52, + 0xa4, 0x48, 0x91, 0x22, 0x45, 0x8a, 0x14, 0x29, 0x72, 0xb2, 0xf1, 0xc9, 0x64, 0x4d, 0xcb, 0x2e, + 0x9d, 0x57, 0x54, 0xc9, 0x1a, 0x05, 0x5e, 0xfa, 0xfd, 0x75, 0xbb, 0x10, 0x87, 0x9e, 0xae, 0xf2, + 0x00, 0x6b, 0x59, 0xd3, 0x8b, 0x55, 0xe6, 0xa3, 0xfa, 0x22, 0xa3, 0x5b, 0xe8, 0x71, 0x1e, 0x23, + 0xbb, 0xbb, 0xdc, 0xc9, 0xd9, 0x89, 0xce, 0x63, 0x4d, 0x00, 0x07, 0xb5, 0x66, 0x90, 0x6d, 0xc8, + 0x45, 0x93, 0x4e, 0x3a, 0x47, 0x8e, 0x8f, 0x55, 0xc9, 0xae, 0x79, 0xcd, 0xe8, 0xc6, 0x07, 0xe8, + 0xc6, 0x75, 0xd2, 0xdd, 0xbd, 0xde, 0xb6, 0xb2, 0x27, 0x73, 0xd1, 0xd6, 0x32, 0xf2, 0x5d, 0x7d, + 0x25, 0x13, 0xec, 0xee, 0x3b, 0x21, 0xe5, 0xa6, 0x36, 0xef, 0x72, 0x96, 0xb6, 0x2c, 0x61, 0x64, + 0xc8, 0x49, 0x73, 0x6f, 0x19, 0xe4, 0xbd, 0x28, 0xf6, 0x4f, 0x54, 0xd9, 0x2d, 0xf0, 0x2c, 0xc9, + 0x2e, 0xf6, 0x5c, 0xd6, 0xcf, 0xdd, 0x6a, 0xfa, 0xf8, 0x38, 0x70, 0xee, 0x55, 0x3d, 0x2d, 0x34, + 0x6f, 0xd4, 0x58, 0x23, 0xcd, 0xbe, 0x5c, 0x38, 0x8b, 0xd5, 0x47, 0xd4, 0x7c, 0xd9, 0xc4, 0x57, + 0xd2, 0xdf, 0xe5, 0x9d, 0x03, 0x4d, 0x25, 0x23, 0x5d, 0x7d, 0xf0, 0xf2, 0x80, 0x55, 0xc5, 0x76, + 0x16, 0x37, 0xdf, 0x5e, 0xcb, 0x4e, 0x6d, 0x53, 0xdd, 0xf6, 0xea, 0xe6, 0x89, 0xda, 0xbe, 0xa0, + 0xf6, 0xd8, 0x2b, 0x12, 0x16, 0xd5, 0xac, 0x84, 0xe5, 0x0f, 0x97, 0xe7, 0xea, 0xc9, 0x97, 0x8f, + 0x9f, 0x09, 0x68, 0x03, 0xed, 0x45, 0x92, 0xe7, 0xbe, 0x18, 0x53, 0xe4, 0x38, 0xd0, 0xa3, 0xcf, + 0x0d, 0xfd, 0x57, 0x20, 0x52, 0xe4, 0xe5, 0x96, 0xfb, 0x57, 0x1a, 0xbd, 0xa7, 0xfd, 0x02, 0x43, + 0x72, 0xcd, 0x31, 0x9b, 0x48, 0xbe, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/white_dn_png.h b/cinelerra-5.1/plugins/synthesizer/white_dn_png.h index d1f924f6..f43e9ae3 100644 --- a/cinelerra-5.1/plugins/synthesizer/white_dn_png.h +++ b/cinelerra-5.1/plugins/synthesizer/white_dn_png.h @@ -2,75 +2,75 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef WHITE_DN_PNG_H #define WHITE_DN_PNG_H -static unsigned char white_dn_png[] = +static unsigned char white_dn_png[] = { - 0x00, 0x00, 0x02, 0xe2, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, - 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, - 0x02, 0x0b, 0x07, 0x29, 0x28, 0x1a, 0x92, 0x73, 0xc2, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x02, 0x58, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9c, 0x4b, 0x92, - 0xc3, 0x20, 0x0c, 0x44, 0x6d, 0x15, 0x87, 0xcb, 0x89, 0x72, 0x89, 0xdc, 0x19, 0xcf, 0x82, 0x29, - 0x47, 0xa3, 0x96, 0x1a, 0x9c, 0xf9, 0x65, 0xd1, 0x2c, 0xa6, 0x08, 0x89, 0xfc, 0x68, 0xfd, 0xc6, - 0x1b, 0xd8, 0x6f, 0xb7, 0xdb, 0xf6, 0xb7, 0xa3, 0x6d, 0xdb, 0x76, 0xbf, 0xdf, 0x8f, 0xe3, 0x18, - 0x9f, 0xcf, 0x89, 0x9f, 0xfb, 0x45, 0x32, 0xf6, 0x7d, 0x0f, 0x13, 0x3f, 0x7f, 0x3c, 0x1e, 0x4f, - 0x24, 0x3e, 0x7a, 0x4c, 0xfc, 0x5f, 0xdc, 0x07, 0x3e, 0xfd, 0x38, 0x0e, 0x84, 0x85, 0xc5, 0x4f, - 0x64, 0x85, 0x09, 0xc8, 0x54, 0xeb, 0x58, 0x0c, 0x0f, 0x0d, 0x7b, 0x0a, 0xd4, 0x96, 0xf2, 0xc2, - 0x84, 0x80, 0x83, 0x14, 0x14, 0x3a, 0x56, 0xbc, 0x55, 0x4b, 0x79, 0xc8, 0x9e, 0xaa, 0x44, 0x07, - 0x4e, 0x54, 0x9e, 0xf6, 0x88, 0x9c, 0x52, 0xbd, 0x94, 0x8a, 0x9a, 0xc4, 0xf2, 0xa8, 0x47, 0xe5, - 0x61, 0xcf, 0x1b, 0x93, 0x93, 0x3a, 0x06, 0x2b, 0x12, 0xdc, 0x7b, 0x05, 0xae, 0x62, 0xe9, 0x61, - 0x95, 0xb8, 0x0b, 0x2a, 0x91, 0x8a, 0xf9, 0x92, 0xba, 0xb4, 0xaa, 0xe6, 0x36, 0xd5, 0xd7, 0x7b, - 0x27, 0x35, 0x13, 0x02, 0x69, 0x66, 0xd3, 0xfa, 0x89, 0x2a, 0x43, 0xea, 0x0e, 0x5e, 0xe5, 0x5b, - 0x4c, 0x9c, 0xde, 0xfb, 0xa0, 0xa6, 0xe5, 0x91, 0xc7, 0x72, 0xdd, 0xb7, 0x95, 0x57, 0xc3, 0xe6, - 0x4a, 0x95, 0xbc, 0xe1, 0x55, 0xc8, 0x95, 0x82, 0x59, 0x6a, 0x78, 0x48, 0x5a, 0x47, 0x7a, 0x71, - 0xc3, 0x04, 0xdd, 0x60, 0xc4, 0xb2, 0xea, 0xe9, 0x64, 0x07, 0x2b, 0xff, 0x7c, 0x92, 0x1e, 0x8b, - 0xc6, 0x41, 0x28, 0x29, 0x03, 0x74, 0x26, 0x26, 0x91, 0x91, 0x62, 0x42, 0x06, 0xa6, 0x77, 0xfa, - 0x15, 0x2f, 0x4d, 0x4b, 0x9d, 0x93, 0xae, 0x54, 0x9e, 0xa8, 0x1c, 0x50, 0xf9, 0xd6, 0x2e, 0xbd, - 0x43, 0xa4, 0xad, 0xf1, 0xea, 0x8b, 0x88, 0x4d, 0x9f, 0x4e, 0x3a, 0xf0, 0xba, 0xc9, 0xeb, 0x2a, - 0x7f, 0x64, 0xbc, 0x19, 0xf2, 0x85, 0x38, 0xad, 0x58, 0xc9, 0xb1, 0xbf, 0x8e, 0x5c, 0x8c, 0xdc, - 0xb4, 0xb9, 0x4c, 0xa3, 0xab, 0x58, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, - 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, - 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, - 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, - 0x90, 0x42, 0xbe, 0x05, 0x92, 0x9c, 0x7e, 0xf5, 0x63, 0xe5, 0xe8, 0x2a, 0x31, 0x51, 0x2c, 0xff, - 0x07, 0xb9, 0x18, 0xaa, 0xab, 0x56, 0xef, 0xa4, 0x32, 0xbd, 0x7c, 0xe0, 0x5c, 0x49, 0xcf, 0x77, - 0x13, 0x93, 0xd7, 0x55, 0x12, 0xcc, 0x35, 0x95, 0xc1, 0x0c, 0x15, 0x78, 0x59, 0x58, 0x97, 0xa9, - 0x68, 0x72, 0xcc, 0xdd, 0xf8, 0xae, 0xab, 0x93, 0xf9, 0xd5, 0x13, 0x57, 0xcc, 0xdb, 0xf9, 0x5d, - 0x38, 0x67, 0xeb, 0x4f, 0xe6, 0x07, 0x1b, 0xff, 0x1b, 0xbf, 0x03, 0xff, 0x11, 0x3d, 0x31, 0x89, - 0x65, 0x95, 0x08, 0xe8, 0xc9, 0x4a, 0xd6, 0xe4, 0xf2, 0x80, 0x20, 0x34, 0xdc, 0x04, 0xc0, 0x13, - 0x04, 0x85, 0xa2, 0xdc, 0xf2, 0xf4, 0xf7, 0xf6, 0xf5, 0xbe, 0x03, 0x7e, 0xd1, 0xc2, 0x54, 0x37, - 0x91, 0xdb, 0x3c, 0x09, 0xb7, 0xc6, 0xef, 0xae, 0x08, 0xbf, 0x4c, 0x07, 0x4b, 0x9f, 0x33, 0x35, - 0xbc, 0x38, 0x33, 0xeb, 0xbd, 0x13, 0xdd, 0x81, 0x6a, 0x66, 0xb8, 0xe9, 0xc0, 0x6e, 0x95, 0xa3, - 0x9e, 0x09, 0x66, 0x86, 0x07, 0xe4, 0x3d, 0xf8, 0xbb, 0x2a, 0x49, 0x97, 0xf1, 0x5e, 0x45, 0x1e, - 0xa1, 0x26, 0x2a, 0xf1, 0xee, 0x04, 0x0c, 0x21, 0xc9, 0x26, 0xcc, 0xcf, 0xf9, 0x0d, 0x1b, 0xa4, - 0xcb, 0x9c, 0xa7, 0xbc, 0x79, 0xf6, 0xa6, 0x79, 0xcb, 0x54, 0x12, 0x71, 0x7e, 0x42, 0x4e, 0xce, - 0xa2, 0x7b, 0x89, 0xdc, 0xb6, 0xad, 0x5d, 0x77, 0xe2, 0x13, 0x87, 0xb7, 0x9b, 0xd5, 0x56, 0x40, - 0x6a, 0x20, 0x68, 0xe5, 0xdd, 0x1c, 0x6b, 0x1a, 0xa9, 0x2d, 0x95, 0x42, 0xbc, 0x47, 0x12, 0xad, - 0xc2, 0x24, 0x2a, 0xb9, 0x94, 0x90, 0xcf, 0xd3, 0x3d, 0x4d, 0xdf, 0x75, 0x3f, 0x00, 0x14, 0xfc, - 0x3e, 0xb1, 0xa5, 0x99, 0xf4, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x00, 0x00, 0x02, 0xe2, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, + 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, + 0x02, 0x0b, 0x07, 0x29, 0x28, 0x1a, 0x92, 0x73, 0xc2, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x02, 0x58, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9c, 0x4b, 0x92, + 0xc3, 0x20, 0x0c, 0x44, 0x6d, 0x15, 0x87, 0xcb, 0x89, 0x72, 0x89, 0xdc, 0x19, 0xcf, 0x82, 0x29, + 0x47, 0xa3, 0x96, 0x1a, 0x9c, 0xf9, 0x65, 0xd1, 0x2c, 0xa6, 0x08, 0x89, 0xfc, 0x68, 0xfd, 0xc6, + 0x1b, 0xd8, 0x6f, 0xb7, 0xdb, 0xf6, 0xb7, 0xa3, 0x6d, 0xdb, 0x76, 0xbf, 0xdf, 0x8f, 0xe3, 0x18, + 0x9f, 0xcf, 0x89, 0x9f, 0xfb, 0x45, 0x32, 0xf6, 0x7d, 0x0f, 0x13, 0x3f, 0x7f, 0x3c, 0x1e, 0x4f, + 0x24, 0x3e, 0x7a, 0x4c, 0xfc, 0x5f, 0xdc, 0x07, 0x3e, 0xfd, 0x38, 0x0e, 0x84, 0x85, 0xc5, 0x4f, + 0x64, 0x85, 0x09, 0xc8, 0x54, 0xeb, 0x58, 0x0c, 0x0f, 0x0d, 0x7b, 0x0a, 0xd4, 0x96, 0xf2, 0xc2, + 0x84, 0x80, 0x83, 0x14, 0x14, 0x3a, 0x56, 0xbc, 0x55, 0x4b, 0x79, 0xc8, 0x9e, 0xaa, 0x44, 0x07, + 0x4e, 0x54, 0x9e, 0xf6, 0x88, 0x9c, 0x52, 0xbd, 0x94, 0x8a, 0x9a, 0xc4, 0xf2, 0xa8, 0x47, 0xe5, + 0x61, 0xcf, 0x1b, 0x93, 0x93, 0x3a, 0x06, 0x2b, 0x12, 0xdc, 0x7b, 0x05, 0xae, 0x62, 0xe9, 0x61, + 0x95, 0xb8, 0x0b, 0x2a, 0x91, 0x8a, 0xf9, 0x92, 0xba, 0xb4, 0xaa, 0xe6, 0x36, 0xd5, 0xd7, 0x7b, + 0x27, 0x35, 0x13, 0x02, 0x69, 0x66, 0xd3, 0xfa, 0x89, 0x2a, 0x43, 0xea, 0x0e, 0x5e, 0xe5, 0x5b, + 0x4c, 0x9c, 0xde, 0xfb, 0xa0, 0xa6, 0xe5, 0x91, 0xc7, 0x72, 0xdd, 0xb7, 0x95, 0x57, 0xc3, 0xe6, + 0x4a, 0x95, 0xbc, 0xe1, 0x55, 0xc8, 0x95, 0x82, 0x59, 0x6a, 0x78, 0x48, 0x5a, 0x47, 0x7a, 0x71, + 0xc3, 0x04, 0xdd, 0x60, 0xc4, 0xb2, 0xea, 0xe9, 0x64, 0x07, 0x2b, 0xff, 0x7c, 0x92, 0x1e, 0x8b, + 0xc6, 0x41, 0x28, 0x29, 0x03, 0x74, 0x26, 0x26, 0x91, 0x91, 0x62, 0x42, 0x06, 0xa6, 0x77, 0xfa, + 0x15, 0x2f, 0x4d, 0x4b, 0x9d, 0x93, 0xae, 0x54, 0x9e, 0xa8, 0x1c, 0x50, 0xf9, 0xd6, 0x2e, 0xbd, + 0x43, 0xa4, 0xad, 0xf1, 0xea, 0x8b, 0x88, 0x4d, 0x9f, 0x4e, 0x3a, 0xf0, 0xba, 0xc9, 0xeb, 0x2a, + 0x7f, 0x64, 0xbc, 0x19, 0xf2, 0x85, 0x38, 0xad, 0x58, 0xc9, 0xb1, 0xbf, 0x8e, 0x5c, 0x8c, 0xdc, + 0xb4, 0xb9, 0x4c, 0xa3, 0xab, 0x58, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, + 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, + 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, + 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, + 0x90, 0x42, 0xbe, 0x05, 0x92, 0x9c, 0x7e, 0xf5, 0x63, 0xe5, 0xe8, 0x2a, 0x31, 0x51, 0x2c, 0xff, + 0x07, 0xb9, 0x18, 0xaa, 0xab, 0x56, 0xef, 0xa4, 0x32, 0xbd, 0x7c, 0xe0, 0x5c, 0x49, 0xcf, 0x77, + 0x13, 0x93, 0xd7, 0x55, 0x12, 0xcc, 0x35, 0x95, 0xc1, 0x0c, 0x15, 0x78, 0x59, 0x58, 0x97, 0xa9, + 0x68, 0x72, 0xcc, 0xdd, 0xf8, 0xae, 0xab, 0x93, 0xf9, 0xd5, 0x13, 0x57, 0xcc, 0xdb, 0xf9, 0x5d, + 0x38, 0x67, 0xeb, 0x4f, 0xe6, 0x07, 0x1b, 0xff, 0x1b, 0xbf, 0x03, 0xff, 0x11, 0x3d, 0x31, 0x89, + 0x65, 0x95, 0x08, 0xe8, 0xc9, 0x4a, 0xd6, 0xe4, 0xf2, 0x80, 0x20, 0x34, 0xdc, 0x04, 0xc0, 0x13, + 0x04, 0x85, 0xa2, 0xdc, 0xf2, 0xf4, 0xf7, 0xf6, 0xf5, 0xbe, 0x03, 0x7e, 0xd1, 0xc2, 0x54, 0x37, + 0x91, 0xdb, 0x3c, 0x09, 0xb7, 0xc6, 0xef, 0xae, 0x08, 0xbf, 0x4c, 0x07, 0x4b, 0x9f, 0x33, 0x35, + 0xbc, 0x38, 0x33, 0xeb, 0xbd, 0x13, 0xdd, 0x81, 0x6a, 0x66, 0xb8, 0xe9, 0xc0, 0x6e, 0x95, 0xa3, + 0x9e, 0x09, 0x66, 0x86, 0x07, 0xe4, 0x3d, 0xf8, 0xbb, 0x2a, 0x49, 0x97, 0xf1, 0x5e, 0x45, 0x1e, + 0xa1, 0x26, 0x2a, 0xf1, 0xee, 0x04, 0x0c, 0x21, 0xc9, 0x26, 0xcc, 0xcf, 0xf9, 0x0d, 0x1b, 0xa4, + 0xcb, 0x9c, 0xa7, 0xbc, 0x79, 0xf6, 0xa6, 0x79, 0xcb, 0x54, 0x12, 0x71, 0x7e, 0x42, 0x4e, 0xce, + 0xa2, 0x7b, 0x89, 0xdc, 0xb6, 0xad, 0x5d, 0x77, 0xe2, 0x13, 0x87, 0xb7, 0x9b, 0xd5, 0x56, 0x40, + 0x6a, 0x20, 0x68, 0xe5, 0xdd, 0x1c, 0x6b, 0x1a, 0xa9, 0x2d, 0x95, 0x42, 0xbc, 0x47, 0x12, 0xad, + 0xc2, 0x24, 0x2a, 0xb9, 0x94, 0x90, 0xcf, 0xd3, 0x3d, 0x4d, 0xdf, 0x75, 0x3f, 0x00, 0x14, 0xfc, + 0x3e, 0xb1, 0xa5, 0x99, 0xf4, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/white_hi_png.h b/cinelerra-5.1/plugins/synthesizer/white_hi_png.h index f455078f..234e4412 100644 --- a/cinelerra-5.1/plugins/synthesizer/white_hi_png.h +++ b/cinelerra-5.1/plugins/synthesizer/white_hi_png.h @@ -2,76 +2,76 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef WHITE_HI_PNG_H #define WHITE_HI_PNG_H -static unsigned char white_hi_png[] = +static unsigned char white_hi_png[] = { - 0x00, 0x00, 0x02, 0xfe, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, - 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, - 0x02, 0x0b, 0x07, 0x29, 0x1a, 0xd2, 0x45, 0x22, 0x42, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x02, 0x74, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9c, 0x4b, 0x72, - 0x03, 0x21, 0x0c, 0x44, 0x67, 0x28, 0x0e, 0xe7, 0xab, 0xf9, 0x54, 0xbe, 0x19, 0x93, 0x05, 0x89, - 0xa2, 0x92, 0x5a, 0x0d, 0xb6, 0x53, 0xde, 0xa4, 0x59, 0xb8, 0xf0, 0xf0, 0x79, 0xb4, 0x24, 0x34, - 0xb3, 0x81, 0xf3, 0xf1, 0x78, 0x1c, 0x3f, 0xe5, 0x3c, 0xcf, 0x50, 0x09, 0x75, 0x7b, 0x72, 0x5d, - 0x57, 0x78, 0xe8, 0x9f, 0x58, 0xdd, 0x2a, 0xf7, 0xfb, 0xdd, 0x5a, 0x3b, 0x61, 0xcc, 0x0a, 0x69, - 0xaa, 0xc0, 0xb6, 0xa6, 0xd9, 0x6d, 0x8c, 0xe1, 0xfb, 0xf4, 0xac, 0x00, 0xfe, 0xee, 0xcb, 0x9d, - 0xe0, 0xaa, 0xe9, 0x1b, 0x99, 0x65, 0xed, 0x80, 0x83, 0x20, 0x48, 0x9d, 0x12, 0xc3, 0x5a, 0x3b, - 0xe4, 0x11, 0x76, 0xb0, 0x87, 0x09, 0xca, 0x6c, 0xa6, 0x32, 0xf3, 0xaa, 0xbf, 0x50, 0xcd, 0xfc, - 0x85, 0x80, 0x29, 0x31, 0x34, 0x75, 0xc8, 0x83, 0xe0, 0x4c, 0x0d, 0xe2, 0x66, 0xdd, 0x03, 0xcc, - 0x00, 0xa5, 0x4a, 0xdf, 0xb5, 0xc2, 0x57, 0x12, 0x3d, 0x2c, 0x53, 0x71, 0xc4, 0x9e, 0x45, 0x69, - 0xad, 0x05, 0xd7, 0x7a, 0xa4, 0x09, 0xf5, 0x3b, 0xc1, 0xc7, 0x47, 0x36, 0x78, 0xe7, 0xfa, 0x26, - 0x0f, 0x0a, 0x35, 0xd8, 0x9c, 0xb4, 0xb5, 0x66, 0x54, 0xb8, 0x1d, 0xa3, 0x2f, 0xa1, 0xf3, 0x8c, - 0xe7, 0x85, 0x66, 0x3f, 0x99, 0x44, 0xa3, 0x42, 0x17, 0xb2, 0x54, 0x50, 0x81, 0x2b, 0xc3, 0x42, - 0x58, 0xc5, 0xc3, 0xbe, 0x24, 0x7e, 0xb5, 0xd6, 0xec, 0x21, 0x3f, 0xd0, 0x53, 0x81, 0x2f, 0x61, - 0x8e, 0x25, 0xec, 0x6a, 0x83, 0x7a, 0x52, 0xde, 0x39, 0x8b, 0x84, 0xb7, 0x8c, 0x61, 0x38, 0x51, - 0x20, 0xe5, 0xe4, 0xbe, 0x1b, 0xb1, 0x55, 0x1a, 0x0a, 0xd1, 0xe1, 0xf5, 0x41, 0xaf, 0xfb, 0xd2, - 0x8e, 0x55, 0xe1, 0xb9, 0x9e, 0x98, 0x7a, 0x8d, 0x24, 0xc3, 0xe0, 0x1b, 0x94, 0xbc, 0xd4, 0xf8, - 0x9c, 0x8d, 0xf4, 0xf6, 0xf6, 0xe1, 0x2a, 0x73, 0xff, 0x2d, 0x95, 0xd5, 0xea, 0xde, 0xa9, 0xaf, - 0x91, 0x9b, 0xcb, 0xdc, 0x71, 0x3f, 0x99, 0xaa, 0xed, 0x38, 0x00, 0xbe, 0x9c, 0xf7, 0x65, 0x3d, - 0x1d, 0xb1, 0x7f, 0x5e, 0x84, 0xfc, 0xc7, 0xc8, 0x17, 0x32, 0x9c, 0x0c, 0x2b, 0xa4, 0x90, 0x42, - 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, - 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, - 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, - 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x7e, 0x02, 0x69, 0xc7, 0x3c, 0x65, 0x58, 0x21, 0x11, - 0x92, 0x1f, 0x99, 0x5f, 0xfe, 0x7d, 0x0e, 0x59, 0x9d, 0xa8, 0x7e, 0x21, 0xaa, 0xc9, 0x54, 0x8d, - 0xec, 0x84, 0xf7, 0xeb, 0xcf, 0xf9, 0x32, 0x9f, 0xae, 0xf6, 0x3b, 0x32, 0x9f, 0x33, 0xe7, 0xca, - 0x30, 0x92, 0xf4, 0x7e, 0xd9, 0x97, 0xb0, 0xa9, 0xef, 0x38, 0xa6, 0x3a, 0x24, 0x1b, 0xa4, 0xef, - 0x86, 0x4f, 0x5e, 0x72, 0x28, 0x47, 0x3a, 0xc5, 0x5e, 0x3d, 0xcc, 0x03, 0x61, 0xe9, 0x87, 0xbb, - 0xce, 0x20, 0x1f, 0xca, 0xcd, 0x83, 0xbd, 0x68, 0x8e, 0x81, 0xa7, 0xec, 0x7f, 0x0d, 0xeb, 0x61, - 0x36, 0x3e, 0x5f, 0x06, 0x90, 0x93, 0x7b, 0xa5, 0x95, 0xb8, 0xb3, 0xe7, 0x59, 0x8c, 0x54, 0xf9, - 0x29, 0x47, 0xe9, 0x0e, 0xbb, 0x0c, 0x9f, 0xac, 0x6f, 0x8c, 0xd1, 0x5a, 0xcb, 0x66, 0xf7, 0xab, - 0x1c, 0x63, 0x64, 0xde, 0xc2, 0x97, 0x21, 0x1a, 0x03, 0x6c, 0xde, 0xe7, 0x10, 0x4e, 0x60, 0x67, - 0xdb, 0x42, 0x70, 0xc6, 0xf7, 0x1c, 0x32, 0x7e, 0x11, 0x41, 0x62, 0xd8, 0x2d, 0x7e, 0x76, 0xcf, - 0x5b, 0xab, 0xe4, 0x49, 0x0b, 0x4a, 0x24, 0x41, 0xb4, 0x04, 0x83, 0x88, 0x85, 0xf9, 0x85, 0xdf, - 0x3d, 0x41, 0xcc, 0x88, 0x23, 0xb6, 0xba, 0x05, 0xc4, 0x9f, 0x91, 0xaf, 0x2e, 0x40, 0x21, 0x69, - 0xa1, 0xfa, 0x50, 0xea, 0x55, 0x56, 0x5b, 0x4a, 0xac, 0x84, 0x86, 0x1d, 0x02, 0x54, 0x86, 0xd4, - 0x53, 0xe5, 0x9a, 0x7c, 0xf9, 0x40, 0x48, 0x2e, 0xd5, 0x1b, 0x66, 0x2b, 0xe1, 0x71, 0xad, 0x3c, - 0xab, 0x55, 0xa2, 0x17, 0xa9, 0x60, 0x49, 0x25, 0x41, 0x1e, 0x56, 0x80, 0xef, 0x11, 0x09, 0x3d, - 0x88, 0x20, 0x3e, 0x51, 0x75, 0xa5, 0x10, 0xcb, 0xb1, 0x10, 0xb6, 0x9c, 0x7d, 0xf9, 0xea, 0x06, - 0xb7, 0x54, 0xdc, 0x6e, 0xb7, 0x0f, 0x7f, 0x54, 0x7e, 0x01, 0x5e, 0x90, 0xcf, 0x1a, 0x43, 0x7f, + 0x00, 0x00, 0x02, 0xfe, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, + 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, + 0x02, 0x0b, 0x07, 0x29, 0x1a, 0xd2, 0x45, 0x22, 0x42, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x02, 0x74, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9c, 0x4b, 0x72, + 0x03, 0x21, 0x0c, 0x44, 0x67, 0x28, 0x0e, 0xe7, 0xab, 0xf9, 0x54, 0xbe, 0x19, 0x93, 0x05, 0x89, + 0xa2, 0x92, 0x5a, 0x0d, 0xb6, 0x53, 0xde, 0xa4, 0x59, 0xb8, 0xf0, 0xf0, 0x79, 0xb4, 0x24, 0x34, + 0xb3, 0x81, 0xf3, 0xf1, 0x78, 0x1c, 0x3f, 0xe5, 0x3c, 0xcf, 0x50, 0x09, 0x75, 0x7b, 0x72, 0x5d, + 0x57, 0x78, 0xe8, 0x9f, 0x58, 0xdd, 0x2a, 0xf7, 0xfb, 0xdd, 0x5a, 0x3b, 0x61, 0xcc, 0x0a, 0x69, + 0xaa, 0xc0, 0xb6, 0xa6, 0xd9, 0x6d, 0x8c, 0xe1, 0xfb, 0xf4, 0xac, 0x00, 0xfe, 0xee, 0xcb, 0x9d, + 0xe0, 0xaa, 0xe9, 0x1b, 0x99, 0x65, 0xed, 0x80, 0x83, 0x20, 0x48, 0x9d, 0x12, 0xc3, 0x5a, 0x3b, + 0xe4, 0x11, 0x76, 0xb0, 0x87, 0x09, 0xca, 0x6c, 0xa6, 0x32, 0xf3, 0xaa, 0xbf, 0x50, 0xcd, 0xfc, + 0x85, 0x80, 0x29, 0x31, 0x34, 0x75, 0xc8, 0x83, 0xe0, 0x4c, 0x0d, 0xe2, 0x66, 0xdd, 0x03, 0xcc, + 0x00, 0xa5, 0x4a, 0xdf, 0xb5, 0xc2, 0x57, 0x12, 0x3d, 0x2c, 0x53, 0x71, 0xc4, 0x9e, 0x45, 0x69, + 0xad, 0x05, 0xd7, 0x7a, 0xa4, 0x09, 0xf5, 0x3b, 0xc1, 0xc7, 0x47, 0x36, 0x78, 0xe7, 0xfa, 0x26, + 0x0f, 0x0a, 0x35, 0xd8, 0x9c, 0xb4, 0xb5, 0x66, 0x54, 0xb8, 0x1d, 0xa3, 0x2f, 0xa1, 0xf3, 0x8c, + 0xe7, 0x85, 0x66, 0x3f, 0x99, 0x44, 0xa3, 0x42, 0x17, 0xb2, 0x54, 0x50, 0x81, 0x2b, 0xc3, 0x42, + 0x58, 0xc5, 0xc3, 0xbe, 0x24, 0x7e, 0xb5, 0xd6, 0xec, 0x21, 0x3f, 0xd0, 0x53, 0x81, 0x2f, 0x61, + 0x8e, 0x25, 0xec, 0x6a, 0x83, 0x7a, 0x52, 0xde, 0x39, 0x8b, 0x84, 0xb7, 0x8c, 0x61, 0x38, 0x51, + 0x20, 0xe5, 0xe4, 0xbe, 0x1b, 0xb1, 0x55, 0x1a, 0x0a, 0xd1, 0xe1, 0xf5, 0x41, 0xaf, 0xfb, 0xd2, + 0x8e, 0x55, 0xe1, 0xb9, 0x9e, 0x98, 0x7a, 0x8d, 0x24, 0xc3, 0xe0, 0x1b, 0x94, 0xbc, 0xd4, 0xf8, + 0x9c, 0x8d, 0xf4, 0xf6, 0xf6, 0xe1, 0x2a, 0x73, 0xff, 0x2d, 0x95, 0xd5, 0xea, 0xde, 0xa9, 0xaf, + 0x91, 0x9b, 0xcb, 0xdc, 0x71, 0x3f, 0x99, 0xaa, 0xed, 0x38, 0x00, 0xbe, 0x9c, 0xf7, 0x65, 0x3d, + 0x1d, 0xb1, 0x7f, 0x5e, 0x84, 0xfc, 0xc7, 0xc8, 0x17, 0x32, 0x9c, 0x0c, 0x2b, 0xa4, 0x90, 0x42, + 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, + 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, + 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x0a, 0x29, 0xa4, + 0x90, 0x42, 0x0a, 0x29, 0xa4, 0x90, 0x42, 0x7e, 0x02, 0x69, 0xc7, 0x3c, 0x65, 0x58, 0x21, 0x11, + 0x92, 0x1f, 0x99, 0x5f, 0xfe, 0x7d, 0x0e, 0x59, 0x9d, 0xa8, 0x7e, 0x21, 0xaa, 0xc9, 0x54, 0x8d, + 0xec, 0x84, 0xf7, 0xeb, 0xcf, 0xf9, 0x32, 0x9f, 0xae, 0xf6, 0x3b, 0x32, 0x9f, 0x33, 0xe7, 0xca, + 0x30, 0x92, 0xf4, 0x7e, 0xd9, 0x97, 0xb0, 0xa9, 0xef, 0x38, 0xa6, 0x3a, 0x24, 0x1b, 0xa4, 0xef, + 0x86, 0x4f, 0x5e, 0x72, 0x28, 0x47, 0x3a, 0xc5, 0x5e, 0x3d, 0xcc, 0x03, 0x61, 0xe9, 0x87, 0xbb, + 0xce, 0x20, 0x1f, 0xca, 0xcd, 0x83, 0xbd, 0x68, 0x8e, 0x81, 0xa7, 0xec, 0x7f, 0x0d, 0xeb, 0x61, + 0x36, 0x3e, 0x5f, 0x06, 0x90, 0x93, 0x7b, 0xa5, 0x95, 0xb8, 0xb3, 0xe7, 0x59, 0x8c, 0x54, 0xf9, + 0x29, 0x47, 0xe9, 0x0e, 0xbb, 0x0c, 0x9f, 0xac, 0x6f, 0x8c, 0xd1, 0x5a, 0xcb, 0x66, 0xf7, 0xab, + 0x1c, 0x63, 0x64, 0xde, 0xc2, 0x97, 0x21, 0x1a, 0x03, 0x6c, 0xde, 0xe7, 0x10, 0x4e, 0x60, 0x67, + 0xdb, 0x42, 0x70, 0xc6, 0xf7, 0x1c, 0x32, 0x7e, 0x11, 0x41, 0x62, 0xd8, 0x2d, 0x7e, 0x76, 0xcf, + 0x5b, 0xab, 0xe4, 0x49, 0x0b, 0x4a, 0x24, 0x41, 0xb4, 0x04, 0x83, 0x88, 0x85, 0xf9, 0x85, 0xdf, + 0x3d, 0x41, 0xcc, 0x88, 0x23, 0xb6, 0xba, 0x05, 0xc4, 0x9f, 0x91, 0xaf, 0x2e, 0x40, 0x21, 0x69, + 0xa1, 0xfa, 0x50, 0xea, 0x55, 0x56, 0x5b, 0x4a, 0xac, 0x84, 0x86, 0x1d, 0x02, 0x54, 0x86, 0xd4, + 0x53, 0xe5, 0x9a, 0x7c, 0xf9, 0x40, 0x48, 0x2e, 0xd5, 0x1b, 0x66, 0x2b, 0xe1, 0x71, 0xad, 0x3c, + 0xab, 0x55, 0xa2, 0x17, 0xa9, 0x60, 0x49, 0x25, 0x41, 0x1e, 0x56, 0x80, 0xef, 0x11, 0x09, 0x3d, + 0x88, 0x20, 0x3e, 0x51, 0x75, 0xa5, 0x10, 0xcb, 0xb1, 0x10, 0xb6, 0x9c, 0x7d, 0xf9, 0xea, 0x06, + 0xb7, 0x54, 0xdc, 0x6e, 0xb7, 0x0f, 0x7f, 0x54, 0x7e, 0x01, 0x5e, 0x90, 0xcf, 0x1a, 0x43, 0x7f, 0x15, 0x70, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; diff --git a/cinelerra-5.1/plugins/synthesizer/white_up_png.h b/cinelerra-5.1/plugins/synthesizer/white_up_png.h index 536db9be..3181634d 100644 --- a/cinelerra-5.1/plugins/synthesizer/white_up_png.h +++ b/cinelerra-5.1/plugins/synthesizer/white_up_png.h @@ -2,44 +2,44 @@ /* * CINELERRA * Copyright (C) 2008 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #ifndef WHITE_UP_PNG_H #define WHITE_UP_PNG_H -static unsigned char white_up_png[] = +static unsigned char white_up_png[] = { - 0x00, 0x00, 0x00, 0xf5, - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, - 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, - 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, - 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, - 0x02, 0x0b, 0x07, 0x29, 0x07, 0xb1, 0x43, 0x4e, 0x9b, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, - 0x25, 0x6e, 0x00, 0x00, 0x00, 0x6b, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xcd, 0xb1, 0x11, - 0x00, 0x20, 0x08, 0x00, 0x31, 0x71, 0x3a, 0x56, 0x63, 0x2a, 0x56, 0xb3, 0x73, 0x03, 0x29, 0xbc, - 0x7c, 0xf5, 0x5d, 0xa2, 0xbb, 0xd7, 0xfb, 0xaa, 0xea, 0xfe, 0x5e, 0xe3, 0x21, 0x91, 0x48, 0x24, - 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, - 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, - 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, - 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0xfc, 0x82, 0x8c, 0xcc, 0x1c, 0x26, - 0x0f, 0x6f, 0xc5, 0x05, 0xf7, 0x5c, 0xa1, 0x13, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x00, 0x00, 0x00, 0xf5, + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa4, 0x08, 0x02, 0x00, 0x00, 0x00, 0x74, 0x27, 0xcb, + 0x2a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, + 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd7, + 0x02, 0x0b, 0x07, 0x29, 0x07, 0xb1, 0x43, 0x4e, 0x9b, 0x00, 0x00, 0x00, 0x1d, 0x74, 0x45, 0x58, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0xef, 0x64, + 0x25, 0x6e, 0x00, 0x00, 0x00, 0x6b, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xcd, 0xb1, 0x11, + 0x00, 0x20, 0x08, 0x00, 0x31, 0x71, 0x3a, 0x56, 0x63, 0x2a, 0x56, 0xb3, 0x73, 0x03, 0x29, 0xbc, + 0x7c, 0xf5, 0x5d, 0xa2, 0xbb, 0xd7, 0xfb, 0xaa, 0xea, 0xfe, 0x5e, 0xe3, 0x21, 0x91, 0x48, 0x24, + 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, + 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, + 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, + 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0xfc, 0x82, 0x8c, 0xcc, 0x1c, 0x26, + 0x0f, 0x6f, 0xc5, 0x05, 0xf7, 0x5c, 0xa1, 0x13, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 };