Guitarix
gx_record.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013 Hermann Meyer, Andreas Degert
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  * --------------------------------------------------------------------------
18  *
19  *
20  * This is part of the Guitarix Audio Engine
21  *
22  *
23  *
24  * --------------------------------------------------------------------------
25  */
26 
27 
28 
29 #define MAXRECSIZE 131072
30 #define MAXFILESIZE INT_MAX-MAXRECSIZE // 2147352576 //2147483648-MAXRECSIZE
31 
32 SCapture::SCapture(EngineControl& engine_, int channel_)
33  : PluginDef(),
34  recfile(NULL),
35  engine(engine_),
36  channel(channel_),
37  fRec0(0),
38  fRec1(0),
39  tape(fRec0),
40  m_pthr(0),
41  keep_stream(false),
42  mem_allocated(false),
43  err(false) {
46  if (channel == 1) {
47  id = "recorder";
48  name = N_("Recorder");
49  groups = 0;
50  description = N_("Digital Record"); // description (tooltip)
51  category = N_("Misc"); // category
52  shortname = ""; // shortname
53  mono_audio = compute_static;
54  stereo_audio = 0;
55  } else {
56  id = "st_recorder";
57  name = N_("Stereo Recorder");
58  groups = 0;
59  description = N_("Digital Record"); // description (tooltip)
60  category = N_("Misc"); // category
61  shortname = N_("St-Recorder"); // shortname
62  mono_audio = 0;
63  stereo_audio = compute_static_st;
64  }
65  set_samplerate = init_static;
66  activate_plugin = activate_static;
67  register_params = register_params_static;
68  load_ui = load_ui_f_static;
69  clear_state = clear_state_f_static;
70  delete_instance = del_instance;
71  plugin = this;
72  sem_init(&m_trig, 0, 0);
73  start_thread();
74 }
75 
77  stop_thread();
78  activate(false);
79 }
80 
81 inline std::string SCapture::get_ffilename() {
82  struct stat buffer;
83  struct stat sb;
84  std::string pPath = getenv("HOME");
85  is_wav = int(fformat) ? false : true;
86  pPath +="/gxrecord/";
87  if (!(stat(pPath.c_str(), &sb) == 0 && S_ISDIR(sb.st_mode))) {
88  mkdir(pPath.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
89  }
90  std::string name = "guitarix_session0.wav";
91  switch(int(fformat)) {
92  case(0) :
93  break;
94  case(1) :
95  name = "guitarix_session0.ogg";
96  break;
97  case(2) :
98  name = "guitarix_session0.w64";
99  break;
100  default :
101  break;
102  }
103  int i = 0;
104  while (stat ((pPath+name).c_str(), &buffer) == 0) {
105  name.replace(name.begin()+16,name.end()-4,gx_system::to_string(i));
106  i+=1;
107  }
108  return pPath+name;
109 }
110 
111 void SCapture::disc_stream() {
112  for (;;) {
113  sem_wait(&m_trig);
114  if (!recfile) {
115  recfile = open_stream(get_ffilename());
116  }
117  save_to_wave(recfile, tape, savesize);
118  filesize +=savesize;
119  if ((!keep_stream && recfile) || (filesize >MAXFILESIZE && is_wav)) {
120  close_stream(&recfile);
121  filesize = 0;
122  }
123  }
124 }
125 
126 void *SCapture::run_thread(void *p) {
127  (reinterpret_cast<SCapture *>(p))->disc_stream();
128  return NULL;
129 }
130 
131 void SCapture::stop_thread() {
132  pthread_cancel (m_pthr);
133  pthread_join (m_pthr, NULL);
134 }
135 
136 void SCapture::start_thread() {
137  pthread_attr_t attr;
138  struct sched_param spar;
139  int priority, policy;
140  engine.get_sched_priority(policy, priority, 12);
141  spar.sched_priority = priority;
142  pthread_attr_init(&attr);
143  pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE );
144  pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL);
145  pthread_attr_setschedpolicy(&attr, policy);
146  pthread_attr_setschedparam(&attr, &spar);
147  pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
148  pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
149  // pthread_attr_setstacksize(&attr, 0x10000);
150  if (pthread_create(&m_pthr, &attr, run_thread,
151  reinterpret_cast<void*>(this))) {
152  err = true;
153  }
154  pthread_attr_destroy(&attr);
155 }
156 
157 inline void SCapture::clear_state_f()
158 {
159  for (int i=0; i<MAXRECSIZE; i++) fRec0[i] = 0;
160  for (int i=0; i<MAXRECSIZE; i++) fRec1[i] = 0;
161  for (int i=0; i<2; i++) fRecb0[i] = 0;
162  for (int i=0; i<2; i++) iRecb1[i] = 0;
163  for (int i=0; i<2; i++) fRecb2[i] = 0;
164  for (int i=0; i<2; i++) fRecC0[i] = 0;
165 }
166 
167 void SCapture::clear_state_f_static(PluginDef *p)
168 {
169  static_cast<SCapture*>(p)->clear_state_f();
170 }
171 
172 inline void SCapture::init(unsigned int samplingFreq)
173 {
174  fSamplingFreq = samplingFreq;
175  IOTA = 0;
176  fConst0 = (1.0f / float(fmin(192000, fmax(1, fSamplingFreq))));
177 }
178 
179 void SCapture::init_static(unsigned int samplingFreq, PluginDef *p)
180 {
181  static_cast<SCapture*>(p)->init(samplingFreq);
182 }
183 
184 inline void SCapture::save_to_wave(SNDFILE * sf, float *tape, int lSize)
185 {
186  if (sf) {
187  sf_write_float(sf,tape, lSize);
188  sf_write_sync(sf);
189  }
190 }
191 
192 SNDFILE *SCapture::open_stream(std::string fname)
193 {
194  SF_INFO sfinfo ;
195  sfinfo.channels = channel;
196  sfinfo.samplerate = fSamplingFreq;
197  switch(int(fformat)) {
198  case(0) :
199  sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
200  break;
201  case(1) :
202  sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS;
203  break;
204  case(2) :
205  sfinfo.format = SF_FORMAT_W64 | SF_FORMAT_PCM_24;
206  break;
207  default :
208  sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
209  break;
210  }
211 
212  SNDFILE * sf = sf_open(fname.c_str(), SFM_WRITE, &sfinfo);
213  if (sf) return sf;
214  else return NULL;
215 }
216 
217 inline void SCapture::close_stream(SNDFILE **sf)
218 {
219  if (*sf) sf_close(*sf);
220  *sf = NULL;
221 }
222 
223 void SCapture::mem_alloc()
224 {
225  if (!fRec0) fRec0 = new float[MAXRECSIZE];
226  if (!fRec1) fRec1 = new float[MAXRECSIZE];
227  mem_allocated = true;
228 }
229 
230 void SCapture::mem_free()
231 {
232  mem_allocated = false;
233  if (fRec0) { delete fRec0; fRec0 = 0; }
234  if (fRec1) { delete fRec1; fRec1 = 0; }
235 }
236 
237 int SCapture::activate(bool start)
238 {
239  if (start) {
240  if (!mem_allocated) {
241  mem_alloc();
242  clear_state_f();
243  }
244  } else if (mem_allocated) {
245  mem_free();
246  }
247  return 0;
248 }
249 
250 int SCapture::activate_static(bool start, PluginDef *p)
251 {
252  return static_cast<SCapture*>(p)->activate(start);
253 }
254 
255 void always_inline SCapture::compute(int count, float *input0, float *output0)
256 {
257  if (err) fcheckbox0 = 0.0;
258  int iSlow0 = int(fcheckbox0);
259  fcheckbox1 = int(fRecb2[0]);
260  float fSlow0 = (0.0010000000000000009f * powf(10,(0.05f * fslider0)));
261  for (int i=0; i<count; i++) {
262  float fTemp0 = (float)input0[i];
263  fRecC0[0] = (fSlow0 + (0.999f * fRecC0[1]));
264  float fTemp1 = fTemp0 * fRecC0[0];
265  // check if we run into clipping
266  float fRec3 = fmax(fConst0, fabsf(fTemp1));
267  int iTemp1 = int((iRecb1[1] < 4096));
268  fRecb0[0] = ((iTemp1)?fmax(fRecb0[1], fRec3):fRec3);
269  iRecb1[0] = ((iTemp1)?(1 + iRecb1[1]):1);
270  fRecb2[0] = ((iTemp1)?fRecb2[1]:fRecb0[1]);
271  fbargraph0 = fRecb2[0];
272 
273  if (iSlow0) { //record
274  if (iA) {
275  fRec1[IOTA] = fTemp1;
276  } else {
277  fRec0[IOTA] = fTemp1;
278  }
279  IOTA = (IOTA<MAXRECSIZE-1) ? IOTA+1 : 0;
280  if (!IOTA) { // when buffer is full, flush to stream
281  iA = iA ? 0 : 1 ;
282  tape = iA ? fRec0 : fRec1;
283  keep_stream = true;
284  savesize = MAXRECSIZE;
285  sem_post(&m_trig);
286  }
287  } else if (IOTA) { // when record stoped, flush the rest to stream
288  tape = iA ? fRec1 : fRec0;
289  savesize = IOTA;
290  keep_stream = false;
291  sem_post(&m_trig);
292  IOTA = 0;
293  iA = 0;
294  }
295  output0[i] = fTemp0;
296  // post processing
297  fRecb2[1] = fRecb2[0];
298  iRecb1[1] = iRecb1[0];
299  fRecb0[1] = fRecb0[0];
300  fRecC0[1] = fRecC0[0];
301  }
302 }
303 
304 void __rt_func SCapture::compute_static(int count, float *input0, float *output0, PluginDef *p)
305 {
306  static_cast<SCapture*>(p)->compute(count, input0, output0);
307 }
308 
309 void always_inline SCapture::compute_st(int count, float *input0, float *input1, float *output0, float *output1)
310 {
311  if (err) fcheckbox0 = 0.0;
312  int iSlow0 = int(fcheckbox0);
313  fcheckbox1 = int(fRecb2[0]);
314  float fSlow0 = (0.0010000000000000009f * powf(10,(0.05f * fslider0)));
315  for (int i=0; i<count; i++) {
316  float fTemp0 = (float)input0[i];
317  float fTemp1 = (float)input1[i];
318  fRecC0[0] = (fSlow0 + (0.999f * fRecC0[1]));
319  float fTemp2 = fTemp0 * fRecC0[0];
320  float fTemp3 = fTemp1 * fRecC0[0];
321  // check if we run into clipping
322  float fRec3 = fmax(fConst0,fmax(fabsf(fTemp2),fabsf(fTemp3)));
323  int iTemp1 = int((iRecb1[1] < 4096));
324  fRecb0[0] = ((iTemp1)?fmax(fRecb0[1], fRec3):fRec3);
325  iRecb1[0] = ((iTemp1)?(1 + iRecb1[1]):1);
326  fRecb2[0] = ((iTemp1)?fRecb2[1]:fRecb0[1]);
327  fbargraph0 = fRecb2[0];
328 
329  if (iSlow0) { //record
330  if (iA) {
331  fRec1[IOTA] = fTemp2;
332  fRec1[IOTA+1] = fTemp3;
333  } else {
334  fRec0[IOTA] = fTemp2;
335  fRec0[IOTA+1] = fTemp3;
336  }
337  IOTA = (IOTA<MAXRECSIZE-2) ? IOTA+2 : 0;
338  if (!IOTA) { // when buffer is full, flush to stream
339  iA = iA ? 0 : 1 ;
340  tape = iA ? fRec0 : fRec1;
341  keep_stream = true;
342  savesize = MAXRECSIZE;
343  sem_post(&m_trig);
344  }
345  } else if (IOTA) { // when record stoped, flush the rest to stream
346  tape = iA ? fRec1 : fRec0;
347  savesize = IOTA;
348  keep_stream = false;
349  sem_post(&m_trig);
350  IOTA = 0;
351  iA = 0;
352  }
353  output0[i] = fTemp0;
354  output1[i] = fTemp1;
355  // post processing
356  fRecb2[1] = fRecb2[0];
357  iRecb1[1] = iRecb1[0];
358  fRecb0[1] = fRecb0[0];
359  fRecC0[1] = fRecC0[0];
360  }
361 }
362 
363 void SCapture::compute_static_st(int count, float *input0, float *input1, float *output0, float *output1, PluginDef *p)
364 {
365  static_cast<SCapture*>(p)->compute_st(count, input0, input1, output0, output1);
366 }
367 
368 int SCapture::register_par(const ParamReg& reg)
369 {
370  static const value_pair fformat_values[] = {{"wav"},{"ogg"},{"w64"},{0}};
371  if (channel == 1) {
372  reg.registerEnumVar("recorder.file","","S",N_("select file format"),fformat_values,&fformat, 0.0, 0.0, 2.0, 1.0);
373  reg.registerVar("recorder.rec","","B",N_("Record files to ~/gxrecord/"),&fcheckbox0, 0.0, 0.0, 1.0, 1.0);
374  reg.registerVar("recorder.gain","","S",N_("Record gain control"),&fslider0, 0.0f, -7e+01f, 4.0f, 0.1f);
375  reg.registerNonMidiFloatVar("recorder.clip",&fcheckbox1, false, true, 0.0, 0.0, 1.0, 1.0);
376  reg.registerNonMidiFloatVar("recorder.v1",&fbargraph0, false, true, -70.0, -70.0, 4.0, 0.00001);
377  } else {
378  reg.registerEnumVar("st_recorder.file","","S",N_("select file format"),fformat_values,&fformat, 0.0, 0.0, 2.0, 1.0);
379  reg.registerVar("st_recorder.rec","","B",N_("Record files to ~/gxrecord/"),&fcheckbox0, 0.0, 0.0, 1.0, 1.0);
380  reg.registerVar("st_recorder.gain","","S",N_("Record gain control"),&fslider0, 0.0f, -7e+01f, 4.0f, 0.1f);
381  reg.registerNonMidiFloatVar("st_recorder.clip",&fcheckbox1, false, true, 0.0, 0.0, 1.0, 1.0);
382  reg.registerNonMidiFloatVar("st_recorder.v1",&fbargraph0, false, true, -70.0, -70.0, 4.0, 0.00001);
383  }
384 
385  return 0;
386 }
387 
388 int SCapture::register_params_static(const ParamReg& reg)
389 {
390  return static_cast<SCapture*>(reg.plugin)->register_par(reg);
391 }
392 
393 const char *SCapture::glade_def = "\
394 <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
395 <interface>\n\
396  <requires lib=\"gtk+\" version=\"2.20\"/>\n\
397  <!-- interface-requires gxwidgets 0.0 -->\n\
398  <!-- interface-naming-policy project-wide -->\n\
399  <object class=\"GtkWindow\" id=\"window1\">\n\
400  <property name=\"can_focus\">False</property>\n\
401  <child>\n\
402  <object class=\"GtkVBox\" id=\"vbox1\">\n\
403  <property name=\"visible\">True</property>\n\
404  <property name=\"can_focus\">False</property>\n\
405  <child>\n\
406  <object class=\"GtkHBox\" id=\"rackbox\">\n\
407  <property name=\"visible\">True</property>\n\
408  <property name=\"can_focus\">False</property>\n\
409  <property name=\"spacing\">4</property>\n\
410  <child>\n\
411  <object class=\"GtkHBox\" id=\"hbox1\">\n\
412  <property name=\"visible\">True</property>\n\
413  <property name=\"can_focus\">False</property>\n\
414  <property name=\"spacing\">10</property>\n\
415  <child>\n\
416  <object class=\"GtkTable\" id=\"table1\">\n\
417  <property name=\"visible\">True</property>\n\
418  <property name=\"can_focus\">False</property>\n\
419  <property name=\"n_rows\">5</property>\n\
420  <property name=\"n_columns\">5</property>\n\
421  <property name=\"row_spacing\">5</property>\n\
422  <child>\n\
423  <placeholder/>\n\
424  </child>\n\
425  <child>\n\
426  <placeholder/>\n\
427  </child>\n\
428  <child>\n\
429  <object class=\"GtkVBox\" id=\"vbox2\">\n\
430  <property name=\"visible\">True</property>\n\
431  <property name=\"can_focus\">False</property>\n\
432  <child>\n\
433  <object class=\"GtkLabel\" id=\"label1:rack_label\">\n\
434  <property name=\"visible\">True</property>\n\
435  <property name=\"can_focus\">False</property>\n\
436  <property name=\"label\" translatable=\"yes\">label</property>\n\
437  </object>\n\
438  <packing>\n\
439  <property name=\"expand\">False</property>\n\
440  <property name=\"fill\">False</property>\n\
441  <property name=\"position\">0</property>\n\
442  </packing>\n\
443  </child>\n\
444  <child>\n\
445  <object class=\"GxMidKnob\" id=\"gxbigknob1\">\n\
446  <property name=\"visible\">True</property>\n\
447  <property name=\"can_focus\">True</property>\n\
448  <property name=\"receives_default\">True</property>\n\
449  <property name=\"var_id\">recorder.gain</property>\n\
450  <property name=\"label_ref\">label1:rack_label</property>\n\
451  </object>\n\
452  <packing>\n\
453  <property name=\"expand\">False</property>\n\
454  <property name=\"fill\">False</property>\n\
455  <property name=\"position\">1</property>\n\
456  </packing>\n\
457  </child>\n\
458  </object>\n\
459  <packing>\n\
460  <property name=\"left_attach\">4</property>\n\
461  <property name=\"right_attach\">5</property>\n\
462  <property name=\"bottom_attach\">5</property>\n\
463  </packing>\n\
464  </child>\n\
465  <child>\n\
466  <object class=\"GtkHBox\" id=\"hbox5\">\n\
467  <property name=\"visible\">True</property>\n\
468  <property name=\"can_focus\">False</property>\n\
469  <child>\n\
470  <placeholder/>\n\
471  </child>\n\
472  <child>\n\
473  <object class=\"GtkHBox\" id=\"hbox6\">\n\
474  <property name=\"visible\">True</property>\n\
475  <property name=\"can_focus\">False</property>\n\
476  <child>\n\
477  <object class=\"GxSelector\" id=\"gxselector1\">\n\
478  <property name=\"visible\">True</property>\n\
479  <property name=\"can_focus\">True</property>\n\
480  <property name=\"receives_default\">True</property>\n\
481  <property name=\"var_id\">recorder.file</property>\n\
482  </object>\n\
483  <packing>\n\
484  <property name=\"expand\">True</property>\n\
485  <property name=\"fill\">True</property>\n\
486  <property name=\"position\">0</property>\n\
487  </packing>\n\
488  </child>\n\
489  </object>\n\
490  <packing>\n\
491  <property name=\"expand\">True</property>\n\
492  <property name=\"fill\">True</property>\n\
493  <property name=\"position\">1</property>\n\
494  </packing>\n\
495  </child>\n\
496  </object>\n\
497  <packing>\n\
498  <property name=\"left_attach\">2</property>\n\
499  <property name=\"right_attach\">3</property>\n\
500  <property name=\"top_attach\">3</property>\n\
501  <property name=\"bottom_attach\">4</property>\n\
502  </packing>\n\
503  </child>\n\
504  <child>\n\
505  <object class=\"GtkHBox\" id=\"hbox9\">\n\
506  <property name=\"visible\">True</property>\n\
507  <property name=\"can_focus\">False</property>\n\
508  <child>\n\
509  <placeholder/>\n\
510  </child>\n\
511  </object>\n\
512  <packing>\n\
513  <property name=\"right_attach\">4</property>\n\
514  <property name=\"bottom_attach\">3</property>\n\
515  <property name=\"y_padding\">20</property>\n\
516  </packing>\n\
517  </child>\n\
518  <child>\n\
519  <object class=\"GxFastMeter\" id=\"gxfastmeter1\">\n\
520  <property name=\"visible\">True</property>\n\
521  <property name=\"can_focus\">False</property>\n\
522  <property name=\"hold\">120</property>\n\
523  <property name=\"dimen\">3</property>\n\
524  <property name=\"horiz\">True</property>\n\
525  <property name=\"type\">1</property>\n\
526  <property name=\"var_id\">recorder.v1</property>\n\
527  </object>\n\
528  <packing>\n\
529  <property name=\"left_attach\">1</property>\n\
530  <property name=\"right_attach\">3</property>\n\
531  <property name=\"top_attach\">4</property>\n\
532  <property name=\"bottom_attach\">5</property>\n\
533  <property name=\"y_options\">GTK_EXPAND</property>\n\
534  </packing>\n\
535  </child>\n\
536  <child>\n\
537  <object class=\"GtkHBox\" id=\"hbox7\">\n\
538  <property name=\"visible\">True</property>\n\
539  <property name=\"can_focus\">False</property>\n\
540  <child>\n\
541  <object class=\"GxSwitch\" id=\"gxfswitch3\">\n\
542  <property name=\"visible\">True</property>\n\
543  <property name=\"can_focus\">False</property>\n\
544  <property name=\"receives_default\">False</property>\n\
545  <property name=\"relief\">none</property>\n\
546  <property name=\"var_id\">recorder.clip</property>\n\
547  <property name=\"base_name\">led</property>\n\
548  </object>\n\
549  <packing>\n\
550  <property name=\"expand\">False</property>\n\
551  <property name=\"fill\">False</property>\n\
552  <property name=\"position\">0</property>\n\
553  </packing>\n\
554  </child>\n\
555  <child>\n\
556  <object class=\"GtkHBox\" id=\"hbox8\">\n\
557  <property name=\"visible\">True</property>\n\
558  <property name=\"can_focus\">False</property>\n\
559  <child>\n\
560  <placeholder/>\n\
561  </child>\n\
562  </object>\n\
563  <packing>\n\
564  <property name=\"expand\">True</property>\n\
565  <property name=\"fill\">True</property>\n\
566  <property name=\"position\">1</property>\n\
567  </packing>\n\
568  </child>\n\
569  </object>\n\
570  <packing>\n\
571  <property name=\"left_attach\">3</property>\n\
572  <property name=\"right_attach\">4</property>\n\
573  <property name=\"top_attach\">4</property>\n\
574  <property name=\"bottom_attach\">5</property>\n\
575  </packing>\n\
576  </child>\n\
577  <child>\n\
578  <object class=\"GtkHBox\" id=\"hbox10\">\n\
579  <property name=\"visible\">True</property>\n\
580  <property name=\"can_focus\">False</property>\n\
581  <child>\n\
582  <placeholder/>\n\
583  </child>\n\
584  </object>\n\
585  <packing>\n\
586  <property name=\"top_attach\">4</property>\n\
587  <property name=\"bottom_attach\">5</property>\n\
588  </packing>\n\
589  </child>\n\
590  <child>\n\
591  <object class=\"GtkHBox\" id=\"hbox2\">\n\
592  <property name=\"visible\">True</property>\n\
593  <property name=\"can_focus\">False</property>\n\
594  <child>\n\
595  <object class=\"GxSwitch\" id=\"gxfswitch1\">\n\
596  <property name=\"visible\">True</property>\n\
597  <property name=\"can_focus\">True</property>\n\
598  <property name=\"receives_default\">True</property>\n\
599  <property name=\"var_id\">recorder.rec</property>\n\
600  <property name=\"base_name\">rbutton</property>\n\
601  </object>\n\
602  <packing>\n\
603  <property name=\"expand\">True</property>\n\
604  <property name=\"fill\">True</property>\n\
605  <property name=\"position\">0</property>\n\
606  </packing>\n\
607  </child>\n\
608  <child>\n\
609  <object class=\"GtkHBox\" id=\"hbox4\">\n\
610  <property name=\"visible\">True</property>\n\
611  <property name=\"can_focus\">False</property>\n\
612  <child>\n\
613  <placeholder/>\n\
614  </child>\n\
615  </object>\n\
616  <packing>\n\
617  <property name=\"expand\">True</property>\n\
618  <property name=\"fill\">True</property>\n\
619  <property name=\"position\">1</property>\n\
620  </packing>\n\
621  </child>\n\
622  </object>\n\
623  <packing>\n\
624  <property name=\"left_attach\">1</property>\n\
625  <property name=\"right_attach\">2</property>\n\
626  <property name=\"top_attach\">3</property>\n\
627  <property name=\"bottom_attach\">4</property>\n\
628  <property name=\"y_padding\">16</property>\n\
629  </packing>\n\
630  </child>\n\
631  </object>\n\
632  <packing>\n\
633  <property name=\"expand\">True</property>\n\
634  <property name=\"fill\">True</property>\n\
635  <property name=\"padding\">5</property>\n\
636  <property name=\"position\">0</property>\n\
637  </packing>\n\
638  </child>\n\
639  </object>\n\
640  <packing>\n\
641  <property name=\"expand\">True</property>\n\
642  <property name=\"fill\">True</property>\n\
643  <property name=\"padding\">5</property>\n\
644  <property name=\"pack_type\">end</property>\n\
645  <property name=\"position\">0</property>\n\
646  </packing>\n\
647  </child>\n\
648  </object>\n\
649  <packing>\n\
650  <property name=\"expand\">True</property>\n\
651  <property name=\"fill\">False</property>\n\
652  <property name=\"position\">0</property>\n\
653  </packing>\n\
654  </child>\n\
655  <child>\n\
656  <object class=\"GtkHBox\" id=\"minibox\">\n\
657  <property name=\"visible\">True</property>\n\
658  <property name=\"can_focus\">False</property>\n\
659  <property name=\"spacing\">10</property>\n\
660  <child>\n\
661  <object class=\"GxSwitch\" id=\"gxfswitch2\">\n\
662  <property name=\"visible\">True</property>\n\
663  <property name=\"can_focus\">True</property>\n\
664  <property name=\"receives_default\">True</property>\n\
665  <property name=\"var_id\">recorder.rec</property>\n\
666  <property name=\"base_name\">rbutton</property>\n\
667  </object>\n\
668  <packing>\n\
669  <property name=\"expand\">False</property>\n\
670  <property name=\"fill\">False</property>\n\
671  <property name=\"position\">0</property>\n\
672  </packing>\n\
673  </child>\n\
674  <child>\n\
675  <object class=\"GxHSlider\" id=\"gxhslider1\">\n\
676  <property name=\"visible\">True</property>\n\
677  <property name=\"can_focus\">True</property>\n\
678  <property name=\"receives_default\">True</property>\n\
679  <property name=\"round_digits\">0</property>\n\
680  <property name=\"var_id\">recorder.gain</property>\n\
681  <property name=\"show_value\">False</property>\n\
682  <property name=\"value_position\">right</property>\n\
683  <property name=\"value_xalign\">0.52000000000000002</property>\n\
684  <property name=\"label_ref\">label0:rack_label</property>\n\
685  </object>\n\
686  <packing>\n\
687  <property name=\"expand\">False</property>\n\
688  <property name=\"fill\">False</property>\n\
689  <property name=\"position\">1</property>\n\
690  </packing>\n\
691  </child>\n\
692  <child>\n\
693  <object class=\"GtkLabel\" id=\"label0:rack_label\">\n\
694  <property name=\"visible\">True</property>\n\
695  <property name=\"can_focus\">False</property>\n\
696  <property name=\"xalign\">0</property>\n\
697  <property name=\"label\" translatable=\"yes\">Level</property>\n\
698  </object>\n\
699  <packing>\n\
700  <property name=\"expand\">False</property>\n\
701  <property name=\"fill\">False</property>\n\
702  <property name=\"position\">2</property>\n\
703  </packing>\n\
704  </child>\n\
705  <child>\n\
706  <object class=\"GxSwitch\" id=\"gxfswitch4\">\n\
707  <property name=\"visible\">True</property>\n\
708  <property name=\"can_focus\">False</property>\n\
709  <property name=\"receives_default\">False</property>\n\
710  <property name=\"relief\">none</property>\n\
711  <property name=\"var_id\">recorder.clip</property>\n\
712  <property name=\"base_name\">led</property>\n\
713  </object>\n\
714  <packing>\n\
715  <property name=\"expand\">False</property>\n\
716  <property name=\"fill\">False</property>\n\
717  <property name=\"position\">3</property>\n\
718  </packing>\n\
719  </child>\n\
720  </object>\n\
721  <packing>\n\
722  <property name=\"expand\">False</property>\n\
723  <property name=\"fill\">False</property>\n\
724  <property name=\"position\">1</property>\n\
725  </packing>\n\
726  </child>\n\
727  </object>\n\
728  </child>\n\
729  </object>\n\
730 </interface>\n\
731 ";
732 
733 const char *SCapture::glade_def_st = "\
734 <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
735 <interface>\n\
736  <requires lib=\"gtk+\" version=\"2.20\"/>\n\
737  <!-- interface-requires gxwidgets 0.0 -->\n\
738  <!-- interface-naming-policy project-wide -->\n\
739  <object class=\"GtkWindow\" id=\"window1\">\n\
740  <property name=\"can_focus\">False</property>\n\
741  <child>\n\
742  <object class=\"GtkVBox\" id=\"vbox1\">\n\
743  <property name=\"visible\">True</property>\n\
744  <property name=\"can_focus\">False</property>\n\
745  <child>\n\
746  <object class=\"GtkHBox\" id=\"rackbox\">\n\
747  <property name=\"visible\">True</property>\n\
748  <property name=\"can_focus\">False</property>\n\
749  <property name=\"spacing\">4</property>\n\
750  <child>\n\
751  <object class=\"GtkHBox\" id=\"hbox1\">\n\
752  <property name=\"visible\">True</property>\n\
753  <property name=\"can_focus\">False</property>\n\
754  <property name=\"spacing\">10</property>\n\
755  <child>\n\
756  <object class=\"GtkTable\" id=\"table1\">\n\
757  <property name=\"visible\">True</property>\n\
758  <property name=\"can_focus\">False</property>\n\
759  <property name=\"n_rows\">5</property>\n\
760  <property name=\"n_columns\">5</property>\n\
761  <property name=\"row_spacing\">5</property>\n\
762  <child>\n\
763  <placeholder/>\n\
764  </child>\n\
765  <child>\n\
766  <placeholder/>\n\
767  </child>\n\
768  <child>\n\
769  <object class=\"GtkVBox\" id=\"vbox2\">\n\
770  <property name=\"visible\">True</property>\n\
771  <property name=\"can_focus\">False</property>\n\
772  <child>\n\
773  <object class=\"GtkLabel\" id=\"label1:rack_label\">\n\
774  <property name=\"visible\">True</property>\n\
775  <property name=\"can_focus\">False</property>\n\
776  <property name=\"label\" translatable=\"yes\">label</property>\n\
777  </object>\n\
778  <packing>\n\
779  <property name=\"expand\">False</property>\n\
780  <property name=\"fill\">False</property>\n\
781  <property name=\"position\">0</property>\n\
782  </packing>\n\
783  </child>\n\
784  <child>\n\
785  <object class=\"GxMidKnob\" id=\"gxbigknob1\">\n\
786  <property name=\"visible\">True</property>\n\
787  <property name=\"can_focus\">True</property>\n\
788  <property name=\"receives_default\">True</property>\n\
789  <property name=\"var_id\">st_recorder.gain</property>\n\
790  <property name=\"label_ref\">label1:rack_label</property>\n\
791  </object>\n\
792  <packing>\n\
793  <property name=\"expand\">False</property>\n\
794  <property name=\"fill\">False</property>\n\
795  <property name=\"position\">1</property>\n\
796  </packing>\n\
797  </child>\n\
798  </object>\n\
799  <packing>\n\
800  <property name=\"left_attach\">4</property>\n\
801  <property name=\"right_attach\">5</property>\n\
802  <property name=\"bottom_attach\">5</property>\n\
803  </packing>\n\
804  </child>\n\
805  <child>\n\
806  <object class=\"GtkHBox\" id=\"hbox5\">\n\
807  <property name=\"visible\">True</property>\n\
808  <property name=\"can_focus\">False</property>\n\
809  <child>\n\
810  <placeholder/>\n\
811  </child>\n\
812  <child>\n\
813  <object class=\"GtkHBox\" id=\"hbox6\">\n\
814  <property name=\"visible\">True</property>\n\
815  <property name=\"can_focus\">False</property>\n\
816  <child>\n\
817  <object class=\"GxSelector\" id=\"gxselector1\">\n\
818  <property name=\"visible\">True</property>\n\
819  <property name=\"can_focus\">True</property>\n\
820  <property name=\"receives_default\">True</property>\n\
821  <property name=\"var_id\">st_recorder.file</property>\n\
822  </object>\n\
823  <packing>\n\
824  <property name=\"expand\">True</property>\n\
825  <property name=\"fill\">True</property>\n\
826  <property name=\"position\">0</property>\n\
827  </packing>\n\
828  </child>\n\
829  </object>\n\
830  <packing>\n\
831  <property name=\"expand\">True</property>\n\
832  <property name=\"fill\">True</property>\n\
833  <property name=\"position\">1</property>\n\
834  </packing>\n\
835  </child>\n\
836  </object>\n\
837  <packing>\n\
838  <property name=\"left_attach\">2</property>\n\
839  <property name=\"right_attach\">3</property>\n\
840  <property name=\"top_attach\">3</property>\n\
841  <property name=\"bottom_attach\">4</property>\n\
842  </packing>\n\
843  </child>\n\
844  <child>\n\
845  <object class=\"GtkHBox\" id=\"hbox9\">\n\
846  <property name=\"visible\">True</property>\n\
847  <property name=\"can_focus\">False</property>\n\
848  <child>\n\
849  <placeholder/>\n\
850  </child>\n\
851  </object>\n\
852  <packing>\n\
853  <property name=\"right_attach\">4</property>\n\
854  <property name=\"bottom_attach\">3</property>\n\
855  <property name=\"y_padding\">20</property>\n\
856  </packing>\n\
857  </child>\n\
858  <child>\n\
859  <object class=\"GxFastMeter\" id=\"gxfastmeter1\">\n\
860  <property name=\"visible\">True</property>\n\
861  <property name=\"can_focus\">False</property>\n\
862  <property name=\"hold\">120</property>\n\
863  <property name=\"dimen\">3</property>\n\
864  <property name=\"horiz\">True</property>\n\
865  <property name=\"type\">1</property>\n\
866  <property name=\"var_id\">st_recorder.v1</property>\n\
867  </object>\n\
868  <packing>\n\
869  <property name=\"left_attach\">1</property>\n\
870  <property name=\"right_attach\">3</property>\n\
871  <property name=\"top_attach\">4</property>\n\
872  <property name=\"bottom_attach\">5</property>\n\
873  <property name=\"y_options\">GTK_EXPAND</property>\n\
874  </packing>\n\
875  </child>\n\
876  <child>\n\
877  <object class=\"GtkHBox\" id=\"hbox7\">\n\
878  <property name=\"visible\">True</property>\n\
879  <property name=\"can_focus\">False</property>\n\
880  <child>\n\
881  <object class=\"GxSwitch\" id=\"gxfswitch3\">\n\
882  <property name=\"visible\">True</property>\n\
883  <property name=\"can_focus\">False</property>\n\
884  <property name=\"receives_default\">False</property>\n\
885  <property name=\"relief\">none</property>\n\
886  <property name=\"var_id\">st_recorder.clip</property>\n\
887  <property name=\"base_name\">led</property>\n\
888  </object>\n\
889  <packing>\n\
890  <property name=\"expand\">False</property>\n\
891  <property name=\"fill\">False</property>\n\
892  <property name=\"position\">0</property>\n\
893  </packing>\n\
894  </child>\n\
895  <child>\n\
896  <object class=\"GtkHBox\" id=\"hbox8\">\n\
897  <property name=\"visible\">True</property>\n\
898  <property name=\"can_focus\">False</property>\n\
899  <child>\n\
900  <placeholder/>\n\
901  </child>\n\
902  </object>\n\
903  <packing>\n\
904  <property name=\"expand\">True</property>\n\
905  <property name=\"fill\">True</property>\n\
906  <property name=\"position\">1</property>\n\
907  </packing>\n\
908  </child>\n\
909  </object>\n\
910  <packing>\n\
911  <property name=\"left_attach\">3</property>\n\
912  <property name=\"right_attach\">4</property>\n\
913  <property name=\"top_attach\">4</property>\n\
914  <property name=\"bottom_attach\">5</property>\n\
915  </packing>\n\
916  </child>\n\
917  <child>\n\
918  <object class=\"GtkHBox\" id=\"hbox10\">\n\
919  <property name=\"visible\">True</property>\n\
920  <property name=\"can_focus\">False</property>\n\
921  <child>\n\
922  <placeholder/>\n\
923  </child>\n\
924  </object>\n\
925  <packing>\n\
926  <property name=\"top_attach\">4</property>\n\
927  <property name=\"bottom_attach\">5</property>\n\
928  </packing>\n\
929  </child>\n\
930  <child>\n\
931  <object class=\"GtkHBox\" id=\"hbox2\">\n\
932  <property name=\"visible\">True</property>\n\
933  <property name=\"can_focus\">False</property>\n\
934  <child>\n\
935  <object class=\"GxSwitch\" id=\"gxfswitch1\">\n\
936  <property name=\"visible\">True</property>\n\
937  <property name=\"can_focus\">True</property>\n\
938  <property name=\"receives_default\">True</property>\n\
939  <property name=\"var_id\">st_recorder.rec</property>\n\
940  <property name=\"base_name\">rbutton</property>\n\
941  </object>\n\
942  <packing>\n\
943  <property name=\"expand\">True</property>\n\
944  <property name=\"fill\">True</property>\n\
945  <property name=\"position\">0</property>\n\
946  </packing>\n\
947  </child>\n\
948  <child>\n\
949  <object class=\"GtkHBox\" id=\"hbox4\">\n\
950  <property name=\"visible\">True</property>\n\
951  <property name=\"can_focus\">False</property>\n\
952  <child>\n\
953  <placeholder/>\n\
954  </child>\n\
955  </object>\n\
956  <packing>\n\
957  <property name=\"expand\">True</property>\n\
958  <property name=\"fill\">True</property>\n\
959  <property name=\"position\">1</property>\n\
960  </packing>\n\
961  </child>\n\
962  </object>\n\
963  <packing>\n\
964  <property name=\"left_attach\">1</property>\n\
965  <property name=\"right_attach\">2</property>\n\
966  <property name=\"top_attach\">3</property>\n\
967  <property name=\"bottom_attach\">4</property>\n\
968  <property name=\"y_padding\">16</property>\n\
969  </packing>\n\
970  </child>\n\
971  </object>\n\
972  <packing>\n\
973  <property name=\"expand\">True</property>\n\
974  <property name=\"fill\">True</property>\n\
975  <property name=\"padding\">5</property>\n\
976  <property name=\"position\">0</property>\n\
977  </packing>\n\
978  </child>\n\
979  </object>\n\
980  <packing>\n\
981  <property name=\"expand\">True</property>\n\
982  <property name=\"fill\">True</property>\n\
983  <property name=\"padding\">5</property>\n\
984  <property name=\"pack_type\">end</property>\n\
985  <property name=\"position\">0</property>\n\
986  </packing>\n\
987  </child>\n\
988  </object>\n\
989  <packing>\n\
990  <property name=\"expand\">True</property>\n\
991  <property name=\"fill\">False</property>\n\
992  <property name=\"position\">0</property>\n\
993  </packing>\n\
994  </child>\n\
995  <child>\n\
996  <object class=\"GtkHBox\" id=\"minibox\">\n\
997  <property name=\"visible\">True</property>\n\
998  <property name=\"can_focus\">False</property>\n\
999  <property name=\"spacing\">10</property>\n\
1000  <child>\n\
1001  <object class=\"GxSwitch\" id=\"gxfswitch2\">\n\
1002  <property name=\"visible\">True</property>\n\
1003  <property name=\"can_focus\">True</property>\n\
1004  <property name=\"receives_default\">True</property>\n\
1005  <property name=\"var_id\">st_recorder.rec</property>\n\
1006  <property name=\"base_name\">rbutton</property>\n\
1007  </object>\n\
1008  <packing>\n\
1009  <property name=\"expand\">False</property>\n\
1010  <property name=\"fill\">False</property>\n\
1011  <property name=\"position\">0</property>\n\
1012  </packing>\n\
1013  </child>\n\
1014  <child>\n\
1015  <object class=\"GxHSlider\" id=\"gxhslider1\">\n\
1016  <property name=\"visible\">True</property>\n\
1017  <property name=\"can_focus\">True</property>\n\
1018  <property name=\"receives_default\">True</property>\n\
1019  <property name=\"round_digits\">0</property>\n\
1020  <property name=\"var_id\">st_recorder.gain</property>\n\
1021  <property name=\"show_value\">False</property>\n\
1022  <property name=\"value_position\">right</property>\n\
1023  <property name=\"value_xalign\">0.52000000000000002</property>\n\
1024  <property name=\"label_ref\">label0:rack_label</property>\n\
1025  </object>\n\
1026  <packing>\n\
1027  <property name=\"expand\">False</property>\n\
1028  <property name=\"fill\">False</property>\n\
1029  <property name=\"position\">1</property>\n\
1030  </packing>\n\
1031  </child>\n\
1032  <child>\n\
1033  <object class=\"GtkLabel\" id=\"label0:rack_label\">\n\
1034  <property name=\"visible\">True</property>\n\
1035  <property name=\"can_focus\">False</property>\n\
1036  <property name=\"xalign\">0</property>\n\
1037  <property name=\"label\" translatable=\"yes\">Level</property>\n\
1038  </object>\n\
1039  <packing>\n\
1040  <property name=\"expand\">False</property>\n\
1041  <property name=\"fill\">False</property>\n\
1042  <property name=\"position\">2</property>\n\
1043  </packing>\n\
1044  </child>\n\
1045  <child>\n\
1046  <object class=\"GxSwitch\" id=\"gxfswitch4\">\n\
1047  <property name=\"visible\">True</property>\n\
1048  <property name=\"can_focus\">False</property>\n\
1049  <property name=\"receives_default\">False</property>\n\
1050  <property name=\"relief\">none</property>\n\
1051  <property name=\"var_id\">st_recorder.clip</property>\n\
1052  <property name=\"base_name\">led</property>\n\
1053  </object>\n\
1054  <packing>\n\
1055  <property name=\"expand\">False</property>\n\
1056  <property name=\"fill\">False</property>\n\
1057  <property name=\"position\">3</property>\n\
1058  </packing>\n\
1059  </child>\n\
1060  </object>\n\
1061  <packing>\n\
1062  <property name=\"expand\">False</property>\n\
1063  <property name=\"fill\">False</property>\n\
1064  <property name=\"position\">1</property>\n\
1065  </packing>\n\
1066  </child>\n\
1067  </object>\n\
1068  </child>\n\
1069  </object>\n\
1070 </interface>\n\
1071 ";
1072 
1073 inline int SCapture::load_ui_f(const UiBuilder& b, int form)
1074 {
1075  if (form & UI_FORM_GLADE) {
1076  if (channel == 1) {
1077  b.load_glade_file("gx_record_ui.glade");
1078  } else {
1079  b.load_glade_file("gx_st_record_ui.glade");
1080  }
1081  return 0;
1082  }
1083  if (form & UI_FORM_STACK) {
1084 
1085  if (channel == 1) {
1086 #define PARAM(p) ("recorder" "." p)
1087  b.openHorizontalhideBox("");
1089 
1090  b.closeBox();
1091 
1092  b.openHorizontalBox("");
1093  b.create_small_rackknob(PARAM("gain"), N_("gain(db)"));
1095  b.create_feedback_switch(sw_led,PARAM("clip"));
1096  b.create_selector_no_caption(PARAM("file"));
1097 
1098  b.closeBox();
1099 
1100 #undef PARAM
1101  } else {
1102 #define PARAM(p) ("st_recorder" "." p)
1103  b.openHorizontalhideBox("");
1105 
1106  b.closeBox();
1107 
1108  b.openHorizontalBox("");
1109  b.create_small_rackknob(PARAM("gain"), N_("gain(db)"));
1111  b.create_feedback_switch(sw_led,PARAM("clip"));
1112  b.create_selector_no_caption(PARAM("file"));
1113 
1114  b.closeBox();
1115 
1116 #undef PARAM
1117  }
1118  return 0;
1119  }
1120  return -1;
1121 }
1122 
1123 int SCapture::load_ui_f_static(const UiBuilder& b, int form)
1124 {
1125  return static_cast<SCapture*>(b.plugin)->load_ui_f(b, form);
1126 }
1127 
1128 void SCapture::del_instance(PluginDef *p)
1129 {
1130  delete static_cast<SCapture*>(p);
1131 }
gx_engine::EngineControl::get_sched_priority
void get_sched_priority(int &policy, int &priority, int prio_dim=0)
Definition: gx_engine_audio.cpp:494
always_inline
#define always_inline
Definition: gx_faust_support.h:29
cabinet_impulse_former::init
void init(int samplingFreq)
Definition: cabinet_impulse_former.cc:37
PluginDef::set_samplerate
inifunc set_samplerate
Definition: gx_plugin.h:200
sw_led
#define sw_led
Definition: gx_plugin.h:49
PluginDef::mono_audio
process_mono_audio mono_audio
Definition: gx_plugin.h:197
MAXRECSIZE
#define MAXRECSIZE
Definition: gx_record.cc:29
value_pair
Definition: gx_plugin.h:117
PluginDef::category
const char * category
Definition: gx_plugin.h:192
PluginDef::register_params
registerfunc register_params
Definition: gx_plugin.h:202
PluginDef::shortname
const char * shortname
Definition: gx_plugin.h:193
PluginDef::version
int version
Definition: gx_plugin.h:184
cabinet_impulse_former::fRec0
double fRec0[3]
Definition: cabinet_impulse_former.cc:33
ParamReg::plugin
PluginDef * plugin
Definition: gx_plugin.h:123
PluginDef::load_ui
uiloader load_ui
Definition: gx_plugin.h:203
PluginDef::stereo_audio
process_stereo_audio stereo_audio
Definition: gx_plugin.h:198
ParamReg::registerVar
float *(* registerVar)(const char *id, const char *name, const char *tp, const char *tooltip, float *var, float val, float low, float up, float step)
Definition: gx_plugin.h:124
PluginDef::name
const char * name
Definition: gx_plugin.h:188
PluginDef::delete_instance
deletefunc delete_instance
Definition: gx_plugin.h:206
ParamReg::registerEnumVar
void(* registerEnumVar)(const char *id, const char *name, const char *tp, const char *tooltip, const value_pair *values, float *var, float val, float low, float up, float step)
Definition: gx_plugin.h:132
sw_rbutton
#define sw_rbutton
Definition: gx_plugin.h:55
PluginDef
Definition: gx_plugin.h:183
gx_system::to_string
std::string to_string(const T &t)
Definition: gx_system.h:529
UiBuilder::load_glade_file
void(* load_glade_file)(const char *fname)
Definition: gx_plugin.h:66
gx_engine::SCapture::plugin
Plugin plugin
Definition: gx_internal_plugins.h:1067
N_
#define N_(String)
Definition: gx_faust_support.h:23
PluginDef::groups
const char ** groups
Definition: gx_plugin.h:189
UiBuilder::create_small_rackknob
void(* create_small_rackknob)(const char *id, const char *label)
Definition: gx_plugin.h:86
UiBuilder::create_feedback_switch
void(* create_feedback_switch)(const char *sw_type, const char *id)
Definition: gx_plugin.h:90
PARAM
#define PARAM(p)
cabinet_impulse_former::fConst0
double fConst0
Definition: cabinet_impulse_former.cc:24
cabinet_impulse_former::compute
void compute(int count, float *input0, float *output0)
Definition: cabinet_impulse_former.cc:51
PluginDef::clear_state
clearstatefunc clear_state
Definition: gx_plugin.h:204
UiBuilder::create_selector_no_caption
void(* create_selector_no_caption)(const char *id)
Definition: gx_plugin.h:88
UiBuilder::plugin
PluginDef * plugin
Definition: gx_plugin.h:64
gx_engine::SCapture::SCapture
SCapture(EngineControl &engine, int channel_)
Definition: gx_record.cc:32
UI_FORM_GLADE
#define UI_FORM_GLADE
Definition: gx_plugin.h:61
UI_FORM_STACK
#define UI_FORM_STACK
Definition: gx_plugin.h:60
PluginDef::description
const char * description
Definition: gx_plugin.h:191
UiBuilder::closeBox
void(* closeBox)()
Definition: gx_plugin.h:77
gx_gui::fformat
std::string fformat(float value, float step)
Definition: gx_stackbox_builder.cpp:31
gx_engine::EngineControl
Definition: gx_modulesequencer.h:238
PluginDef::flags
int flags
Definition: gx_plugin.h:185
ParamReg
Definition: gx_plugin.h:122
MAXFILESIZE
#define MAXFILESIZE
Definition: gx_record.cc:30
UiBuilder
Definition: gx_plugin.h:63
cabinet_impulse_former::fRec1
double fRec1[3]
Definition: cabinet_impulse_former.cc:32
PluginDef::activate_plugin
activatefunc activate_plugin
Definition: gx_plugin.h:201
start
CmdConnection::msg_type start
Definition: jsonrpc.cpp:257
ParamReg::registerNonMidiFloatVar
void(* registerNonMidiFloatVar)(const char *id, float *var, bool preset, bool nosave, float val, float low, float up, float step)
Definition: gx_plugin.h:130
PLUGINDEF_VERSION
#define PLUGINDEF_VERSION
Definition: gx_plugin.h:181
__rt_func
#define __rt_func
Definition: gx_compiler.h:7
UiBuilder::openHorizontalBox
void(* openHorizontalBox)(const char *label)
Definition: gx_plugin.h:71
UiBuilder::openHorizontalhideBox
void(* openHorizontalhideBox)(const char *label)
Definition: gx_plugin.h:72
PGN_NO_PRESETS
@ PGN_NO_PRESETS
Definition: gx_plugin.h:175
cabinet_impulse_former::fslider0
FAUSTFLOAT & fslider0
Definition: cabinet_impulse_former.cc:23
cabinet_impulse_former::fSamplingFreq
int fSamplingFreq
Definition: cabinet_impulse_former.cc:35
gx_engine::SCapture::~SCapture
~SCapture()
Definition: gx_record.cc:76