29 #define MAXRECSIZE 131072 30 #define MAXFILESIZE INT_MAX-MAXRECSIZE // 2147352576 //2147483648-MAXRECSIZE 32 SCapture::SCapture(EngineControl& engine_,
int channel_)
48 name =
N_(
"Recorder");
50 description =
N_(
"Digital Record");
51 category =
N_(
"Misc");
53 mono_audio = compute_static;
57 name =
N_(
"Stereo Recorder");
59 description =
N_(
"Digital Record");
60 category =
N_(
"Misc");
61 shortname =
N_(
"St-Recorder");
63 stereo_audio = compute_static_st;
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;
72 sem_init(&m_trig, 0, 0);
76 SCapture::~SCapture() {
81 inline std::string SCapture::get_ffilename() {
84 std::string pPath = getenv(
"HOME");
85 is_wav = int(
fformat) ? false :
true;
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);
90 std::string name =
"guitarix_session0.wav";
95 name =
"guitarix_session0.ogg";
98 name =
"guitarix_session0.w64";
104 while (stat ((pPath+name).c_str(), &buffer) == 0) {
111 void SCapture::disc_stream() {
115 recfile = open_stream(get_ffilename());
117 save_to_wave(recfile, tape, savesize);
119 if ((!keep_stream && recfile) || (filesize >
MAXFILESIZE && is_wav)) {
120 close_stream(&recfile);
126 void *SCapture::run_thread(
void *p) {
127 (
reinterpret_cast<SCapture *
>(p))->disc_stream();
131 void SCapture::stop_thread() {
132 pthread_cancel (m_pthr);
133 pthread_join (m_pthr, NULL);
136 void SCapture::start_thread() {
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);
150 if (pthread_create(&m_pthr, &attr, run_thread,
151 reinterpret_cast<void*>(
this))) {
154 pthread_attr_destroy(&attr);
157 inline void SCapture::clear_state_f()
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;
167 void SCapture::clear_state_f_static(
PluginDef *p)
169 static_cast<SCapture*
>(p)->clear_state_f();
179 void SCapture::init_static(
unsigned int samplingFreq,
PluginDef *p)
181 static_cast<SCapture*
>(p)->
init(samplingFreq);
184 inline void SCapture::save_to_wave(SNDFILE * sf,
float *tape,
int lSize)
187 sf_write_float(sf,tape, lSize);
192 SNDFILE *SCapture::open_stream(std::string fname)
195 sfinfo.channels = channel;
199 sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
202 sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS;
205 sfinfo.format = SF_FORMAT_W64 | SF_FORMAT_PCM_24;
208 sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
212 SNDFILE * sf = sf_open(fname.c_str(), SFM_WRITE, &sfinfo);
217 inline void SCapture::close_stream(SNDFILE **sf)
219 if (*sf) sf_close(*sf);
223 void SCapture::mem_alloc()
227 mem_allocated =
true;
230 void SCapture::mem_free()
232 mem_allocated =
false;
237 int SCapture::activate(
bool start)
240 if (!mem_allocated) {
244 }
else if (mem_allocated) {
252 return static_cast<SCapture*
>(p)->activate(
start);
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];
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];
275 fRec1[IOTA] = fTemp1;
277 fRec0[IOTA] = fTemp1;
297 fRecb2[1] = fRecb2[0];
298 iRecb1[1] = iRecb1[0];
299 fRecb0[1] = fRecb0[0];
300 fRecC0[1] = fRecC0[0];
304 void __rt_func SCapture::compute_static(
int count,
float *input0,
float *output0,
PluginDef *p)
306 static_cast<SCapture*
>(p)->
compute(count, input0, output0);
309 void always_inline SCapture::compute_st(
int count,
float *input0,
float *input1,
float *output0,
float *output1)
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];
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];
331 fRec1[IOTA] = fTemp2;
332 fRec1[IOTA+1] = fTemp3;
334 fRec0[IOTA] = fTemp2;
335 fRec0[IOTA+1] = fTemp3;
356 fRecb2[1] = fRecb2[0];
357 iRecb1[1] = iRecb1[0];
358 fRecb0[1] = fRecb0[0];
359 fRecC0[1] = fRecC0[0];
363 void SCapture::compute_static_st(
int count,
float *input0,
float *input1,
float *output0,
float *output1,
PluginDef *p)
365 static_cast<SCapture*
>(p)->compute_st(count, input0, input1, output0, output1);
368 int SCapture::register_par(
const ParamReg& reg)
370 static const value_pair fformat_values[] = {{
"wav"},{
"ogg"},{
"w64"},{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);
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);
388 int SCapture::register_params_static(
const ParamReg& reg)
390 return static_cast<SCapture*
>(reg.
plugin)->register_par(reg);
393 const char *SCapture::glade_def =
"\ 394 <?xml version=\"1.0\" encoding=\"UTF-8\"?>\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\ 402 <object class=\"GtkVBox\" id=\"vbox1\">\n\ 403 <property name=\"visible\">True</property>\n\ 404 <property name=\"can_focus\">False</property>\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\ 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\ 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\ 429 <object class=\"GtkVBox\" id=\"vbox2\">\n\ 430 <property name=\"visible\">True</property>\n\ 431 <property name=\"can_focus\">False</property>\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\ 439 <property name=\"expand\">False</property>\n\ 440 <property name=\"fill\">False</property>\n\ 441 <property name=\"position\">0</property>\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\ 453 <property name=\"expand\">False</property>\n\ 454 <property name=\"fill\">False</property>\n\ 455 <property name=\"position\">1</property>\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\ 466 <object class=\"GtkHBox\" id=\"hbox5\">\n\ 467 <property name=\"visible\">True</property>\n\ 468 <property name=\"can_focus\">False</property>\n\ 473 <object class=\"GtkHBox\" id=\"hbox6\">\n\ 474 <property name=\"visible\">True</property>\n\ 475 <property name=\"can_focus\">False</property>\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\ 484 <property name=\"expand\">True</property>\n\ 485 <property name=\"fill\">True</property>\n\ 486 <property name=\"position\">0</property>\n\ 491 <property name=\"expand\">True</property>\n\ 492 <property name=\"fill\">True</property>\n\ 493 <property name=\"position\">1</property>\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\ 505 <object class=\"GtkHBox\" id=\"hbox9\">\n\ 506 <property name=\"visible\">True</property>\n\ 507 <property name=\"can_focus\">False</property>\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\ 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\ 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\ 537 <object class=\"GtkHBox\" id=\"hbox7\">\n\ 538 <property name=\"visible\">True</property>\n\ 539 <property name=\"can_focus\">False</property>\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\ 550 <property name=\"expand\">False</property>\n\ 551 <property name=\"fill\">False</property>\n\ 552 <property name=\"position\">0</property>\n\ 556 <object class=\"GtkHBox\" id=\"hbox8\">\n\ 557 <property name=\"visible\">True</property>\n\ 558 <property name=\"can_focus\">False</property>\n\ 564 <property name=\"expand\">True</property>\n\ 565 <property name=\"fill\">True</property>\n\ 566 <property name=\"position\">1</property>\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\ 578 <object class=\"GtkHBox\" id=\"hbox10\">\n\ 579 <property name=\"visible\">True</property>\n\ 580 <property name=\"can_focus\">False</property>\n\ 586 <property name=\"top_attach\">4</property>\n\ 587 <property name=\"bottom_attach\">5</property>\n\ 591 <object class=\"GtkHBox\" id=\"hbox2\">\n\ 592 <property name=\"visible\">True</property>\n\ 593 <property name=\"can_focus\">False</property>\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\ 603 <property name=\"expand\">True</property>\n\ 604 <property name=\"fill\">True</property>\n\ 605 <property name=\"position\">0</property>\n\ 609 <object class=\"GtkHBox\" id=\"hbox4\">\n\ 610 <property name=\"visible\">True</property>\n\ 611 <property name=\"can_focus\">False</property>\n\ 617 <property name=\"expand\">True</property>\n\ 618 <property name=\"fill\">True</property>\n\ 619 <property name=\"position\">1</property>\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\ 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\ 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\ 650 <property name=\"expand\">True</property>\n\ 651 <property name=\"fill\">False</property>\n\ 652 <property name=\"position\">0</property>\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\ 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\ 669 <property name=\"expand\">False</property>\n\ 670 <property name=\"fill\">False</property>\n\ 671 <property name=\"position\">0</property>\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\ 687 <property name=\"expand\">False</property>\n\ 688 <property name=\"fill\">False</property>\n\ 689 <property name=\"position\">1</property>\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\ 700 <property name=\"expand\">False</property>\n\ 701 <property name=\"fill\">False</property>\n\ 702 <property name=\"position\">2</property>\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\ 715 <property name=\"expand\">False</property>\n\ 716 <property name=\"fill\">False</property>\n\ 717 <property name=\"position\">3</property>\n\ 722 <property name=\"expand\">False</property>\n\ 723 <property name=\"fill\">False</property>\n\ 724 <property name=\"position\">1</property>\n\ 733 const char *SCapture::glade_def_st =
"\ 734 <?xml version=\"1.0\" encoding=\"UTF-8\"?>\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\ 742 <object class=\"GtkVBox\" id=\"vbox1\">\n\ 743 <property name=\"visible\">True</property>\n\ 744 <property name=\"can_focus\">False</property>\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\ 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\ 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\ 769 <object class=\"GtkVBox\" id=\"vbox2\">\n\ 770 <property name=\"visible\">True</property>\n\ 771 <property name=\"can_focus\">False</property>\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\ 779 <property name=\"expand\">False</property>\n\ 780 <property name=\"fill\">False</property>\n\ 781 <property name=\"position\">0</property>\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\ 793 <property name=\"expand\">False</property>\n\ 794 <property name=\"fill\">False</property>\n\ 795 <property name=\"position\">1</property>\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\ 806 <object class=\"GtkHBox\" id=\"hbox5\">\n\ 807 <property name=\"visible\">True</property>\n\ 808 <property name=\"can_focus\">False</property>\n\ 813 <object class=\"GtkHBox\" id=\"hbox6\">\n\ 814 <property name=\"visible\">True</property>\n\ 815 <property name=\"can_focus\">False</property>\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\ 824 <property name=\"expand\">True</property>\n\ 825 <property name=\"fill\">True</property>\n\ 826 <property name=\"position\">0</property>\n\ 831 <property name=\"expand\">True</property>\n\ 832 <property name=\"fill\">True</property>\n\ 833 <property name=\"position\">1</property>\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\ 845 <object class=\"GtkHBox\" id=\"hbox9\">\n\ 846 <property name=\"visible\">True</property>\n\ 847 <property name=\"can_focus\">False</property>\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\ 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\ 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\ 877 <object class=\"GtkHBox\" id=\"hbox7\">\n\ 878 <property name=\"visible\">True</property>\n\ 879 <property name=\"can_focus\">False</property>\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\ 890 <property name=\"expand\">False</property>\n\ 891 <property name=\"fill\">False</property>\n\ 892 <property name=\"position\">0</property>\n\ 896 <object class=\"GtkHBox\" id=\"hbox8\">\n\ 897 <property name=\"visible\">True</property>\n\ 898 <property name=\"can_focus\">False</property>\n\ 904 <property name=\"expand\">True</property>\n\ 905 <property name=\"fill\">True</property>\n\ 906 <property name=\"position\">1</property>\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\ 918 <object class=\"GtkHBox\" id=\"hbox10\">\n\ 919 <property name=\"visible\">True</property>\n\ 920 <property name=\"can_focus\">False</property>\n\ 926 <property name=\"top_attach\">4</property>\n\ 927 <property name=\"bottom_attach\">5</property>\n\ 931 <object class=\"GtkHBox\" id=\"hbox2\">\n\ 932 <property name=\"visible\">True</property>\n\ 933 <property name=\"can_focus\">False</property>\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\ 943 <property name=\"expand\">True</property>\n\ 944 <property name=\"fill\">True</property>\n\ 945 <property name=\"position\">0</property>\n\ 949 <object class=\"GtkHBox\" id=\"hbox4\">\n\ 950 <property name=\"visible\">True</property>\n\ 951 <property name=\"can_focus\">False</property>\n\ 957 <property name=\"expand\">True</property>\n\ 958 <property name=\"fill\">True</property>\n\ 959 <property name=\"position\">1</property>\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\ 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\ 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\ 990 <property name=\"expand\">True</property>\n\ 991 <property name=\"fill\">False</property>\n\ 992 <property name=\"position\">0</property>\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\ 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\ 1009 <property name=\"expand\">False</property>\n\ 1010 <property name=\"fill\">False</property>\n\ 1011 <property name=\"position\">0</property>\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\ 1027 <property name=\"expand\">False</property>\n\ 1028 <property name=\"fill\">False</property>\n\ 1029 <property name=\"position\">1</property>\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\ 1040 <property name=\"expand\">False</property>\n\ 1041 <property name=\"fill\">False</property>\n\ 1042 <property name=\"position\">2</property>\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\ 1055 <property name=\"expand\">False</property>\n\ 1056 <property name=\"fill\">False</property>\n\ 1057 <property name=\"position\">3</property>\n\ 1062 <property name=\"expand\">False</property>\n\ 1063 <property name=\"fill\">False</property>\n\ 1064 <property name=\"position\">1</property>\n\ 1073 inline int SCapture::load_ui_f(
const UiBuilder& b,
int form)
1086 #define PARAM(p) ("recorder" "." p) 1102 #define PARAM(p) ("st_recorder" "." p) 1123 int SCapture::load_ui_f_static(
const UiBuilder& b,
int form)
1125 return static_cast<SCapture*
>(b.
plugin)->load_ui_f(b, form);
1128 void SCapture::del_instance(
PluginDef *p)
1130 delete static_cast<SCapture*
>(p);
CmdConnection::msg_type start
void(* create_feedback_switch)(const char *sw_type, const char *id)
float *(* registerVar)(const char *id, const char *name, const char *tp, const char *tooltip, float *var, float val, float low, float up, float step)
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)
void(* load_glade_file)(const char *fname)
#define PLUGINDEF_VERSION
void(* openHorizontalBox)(const char *label)
std::string to_string(const T &t)
void(* create_small_rackknob)(const char *id, const char *label)
void(* openHorizontalhideBox)(const char *label)
void(* registerNonMidiFloatVar)(const char *id, float *var, bool preset, bool nosave, float val, float low, float up, float step)
std::string fformat(float value, float step)
void(* create_selector_no_caption)(const char *id)