00001 #ifndef REVERB_H
00002 #define REVERB_H
00003
00004 class Reverb;
00005 class ReverbEngine;
00006
00007 #include "reverbwindow.h"
00008 #include "pluginaclient.h"
00009
00010 class ReverbConfig
00011 {
00012 public:
00013 ReverbConfig();
00014
00015
00016 int equivalent(ReverbConfig &that);
00017 void copy_from(ReverbConfig &that);
00018 void interpolate(ReverbConfig &prev,
00019 ReverbConfig &next,
00020 int64_t prev_frame,
00021 int64_t next_frame,
00022 int64_t current_frame);
00023 void dump();
00024
00025 double level_init;
00026 int64_t delay_init;
00027 double ref_level1;
00028 double ref_level2;
00029 int64_t ref_total;
00030 int64_t ref_length;
00031 int64_t lowpass1, lowpass2;
00032 };
00033
00034 class Reverb : public PluginAClient
00035 {
00036 public:
00037 Reverb(PluginServer *server);
00038 ~Reverb();
00039
00040 void update_gui();
00041 int load_from_file(char *data);
00042 int save_to_file(char *data);
00043 int load_configuration();
00044
00045
00046 ReverbConfig config;
00047
00048 char config_directory[1024];
00049
00050 double **main_in, **main_out;
00051 double **dsp_in;
00052 int64_t **ref_channels, **ref_offsets, **ref_lowpass;
00053 double **ref_levels;
00054 int64_t dsp_in_length;
00055 int redo_buffers;
00056
00057 double **lowpass_in1, **lowpass_in2;
00058 DB db;
00059
00060
00061 int process_realtime(int64_t size, double **input_ptr, double **output_ptr);
00062 int is_realtime();
00063 int is_synthesis();
00064 int is_multichannel();
00065 char* plugin_title();
00066 int show_gui();
00067 int set_string();
00068 void save_data(KeyFrame *keyframe);
00069 void read_data(KeyFrame *keyframe);
00070 void raise_window();
00071 VFrame* new_picon();
00072
00073
00074 int load_defaults();
00075 int save_defaults();
00076 BC_Hash *defaults;
00077
00078 ReverbThread *thread;
00079 ReverbEngine **engine;
00080 int initialized;
00081 };
00082
00083 class ReverbEngine : public Thread
00084 {
00085 public:
00086 ReverbEngine(Reverb *plugin);
00087 ~ReverbEngine();
00088
00089 int process_overlay(double *in, double *out, double &out1, double &out2, double level, int64_t lowpass, int64_t samplerate, int64_t size);
00090 int process_overlays(int output_buffer, int64_t size);
00091 int wait_process_overlays();
00092 void run();
00093
00094 Mutex input_lock, output_lock;
00095 int completed;
00096 int output_buffer;
00097 int64_t size;
00098 Reverb *plugin;
00099 };
00100
00101 #endif