/[svn]/gigedit/trunk/src/gigedit/dimregionedit.h
ViewVC logotype

Contents of /gigedit/trunk/src/gigedit/dimregionedit.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3624 - (show annotations) (download) (as text)
Wed Oct 2 17:11:30 2019 UTC (4 years, 6 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 19008 byte(s)
* GIG SOUND FORMAT EXTENSION: Added combo box for selecting a wave form
  type for each one of the 3 LFOs (i.e. for overriding the default LFO
  sine wave form to either triangle, saw or square instead).

* GIG SOUND FORMAT EXTENSION: Added slider for each one of the 3 LFOs
  for altering the phase displacement of the respective LFO (that is
  for moving the LFO's start level horizontally on the time axis).

* GIG SOUND FORMAT EXTENSION: Added checkbox "Flip Phase" to LFO 3
  (the original Gigasampler/GigaStudio software only supported that
  option for LFO 1 and LFO 2).

* Bumped version (1.1.1.svn3).

1 /* -*- c++ -*-
2 * Copyright (C) 2006-2019 Andreas Persson
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2, or (at
7 * your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with program; see the file COPYING. If not, write to the Free
16 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
17 * 02110-1301 USA.
18 */
19
20 #ifndef GIGEDIT_DIMREGIONEDIT_H
21 #define GIGEDIT_DIMREGIONEDIT_H
22
23 #ifdef LIBGIG_HEADER_FILE
24 # include LIBGIG_HEADER_FILE(gig.h)
25 #else
26 # include <gig.h>
27 #endif
28
29 #include "compat.h"
30
31 #include <cairomm/context.h>
32 #include <gtkmm/box.h>
33 #include <gtkmm/drawingarea.h>
34 #include <gtkmm/entry.h>
35 #include <gtkmm/label.h>
36 #include <gtkmm/notebook.h>
37 #if USE_GTKMM_GRID
38 # include <gtkmm/grid.h>
39 #else
40 # include <gtkmm/table.h>
41 #endif
42
43 #ifdef LIBLINUXSAMPLER_HEADER_FILE
44 # include LIBLINUXSAMPLER_HEADER_FILE(engines/LFO.h)
45 #else
46 # include <linuxsampler/engines/LFO.h>
47 #endif
48
49 #include <set>
50
51 #include "paramedit.h"
52 #include "global.h"
53
54 class VelocityCurve : public Gtk::DrawingArea {
55 public:
56 VelocityCurve(double (gig::DimensionRegion::*getter)(uint8_t));
57 void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
58
59 protected:
60 #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
61 bool on_expose_event(GdkEventExpose* e);
62 #else
63 bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
64 #endif
65
66 private:
67 double (gig::DimensionRegion::* const getter)(uint8_t);
68 gig::DimensionRegion* dimreg;
69 };
70
71 class CrossfadeCurve : public Gtk::DrawingArea {
72 public:
73 CrossfadeCurve();
74 void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
75
76 protected:
77 #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
78 bool on_expose_event(GdkEventExpose* e);
79 #else
80 bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
81 #endif
82
83 private:
84 gig::DimensionRegion* dimreg;
85 void draw_one_curve(const Cairo::RefPtr<Cairo::Context>& cr,
86 const gig::DimensionRegion* d,
87 bool sensitive);
88 };
89
90 class LFOGraph : public Gtk::DrawingArea {
91 public:
92 LFOGraph();
93 void set_dim_region(gig::DimensionRegion* d) { dimreg = d; }
94
95 protected:
96 #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
97 bool on_expose_event(GdkEventExpose* e);
98 #else
99 bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
100 #endif
101
102 virtual LinuxSampler::LFO::wave_t waveType() const = 0;
103 virtual float frequency() const = 0;
104 virtual float phase() const = 0;
105 virtual uint internalDepth() const = 0;
106 virtual uint controllerDepth() const = 0;
107 virtual bool flipPolarity() const = 0;
108 virtual bool signedRange() const = 0;
109 virtual LinuxSampler::LFO::start_level_t startLevel() const = 0;
110 virtual bool hasControllerAssigned() const = 0;
111
112 gig::DimensionRegion* dimreg;
113 LinuxSampler::LFO lfo;
114 };
115
116 class LFO1Graph : public LFOGraph {
117 public:
118 LinuxSampler::LFO::wave_t waveType() const OVERRIDE {
119 // simply assuming here libgig's and LS's enums are equally value mapped
120 return (LinuxSampler::LFO::wave_t) dimreg->LFO1WaveForm;
121 }
122 float frequency() const OVERRIDE { return dimreg->LFO1Frequency; }
123 float phase() const OVERRIDE { return dimreg->LFO1Phase; }
124 uint internalDepth() const OVERRIDE {
125 const gig::lfo1_ctrl_t ctrl = dimreg->LFO1Controller;
126 const bool hasInternalDepth = (
127 ctrl != gig::lfo1_ctrl_modwheel && ctrl != gig::lfo1_ctrl_breath
128 );
129 return (hasInternalDepth) ? dimreg->LFO1InternalDepth : 0;
130 }
131 uint controllerDepth() const OVERRIDE { return dimreg->LFO1ControlDepth; }
132 bool flipPolarity() const OVERRIDE { return dimreg->LFO1FlipPhase; }
133 bool signedRange() const OVERRIDE { return false; }
134 virtual LinuxSampler::LFO::start_level_t startLevel() const OVERRIDE { return LinuxSampler::LFO::start_level_mid; } // see https://sourceforge.net/p/linuxsampler/mailman/linuxsampler-devel/thread/2189307.cNP0Xbctxq%40silver/#msg36774029
135 bool hasControllerAssigned() const OVERRIDE { return dimreg->LFO1Controller; }
136 };
137
138 class LFO2Graph : public LFOGraph {
139 public:
140 LinuxSampler::LFO::wave_t waveType() const OVERRIDE {
141 // simply assuming here libgig's and LS's enums are equally value mapped
142 return (LinuxSampler::LFO::wave_t) dimreg->LFO2WaveForm;
143 }
144 float frequency() const OVERRIDE { return dimreg->LFO2Frequency; }
145 float phase() const OVERRIDE { return dimreg->LFO2Phase; }
146 uint internalDepth() const OVERRIDE {
147 const gig::lfo2_ctrl_t ctrl = dimreg->LFO2Controller;
148 const bool hasInternalDepth = (
149 ctrl != gig::lfo2_ctrl_modwheel && ctrl != gig::lfo2_ctrl_foot
150 );
151 return (hasInternalDepth) ? dimreg->LFO2InternalDepth : 0;
152 }
153 uint controllerDepth() const OVERRIDE { return dimreg->LFO2ControlDepth; }
154 bool flipPolarity() const OVERRIDE { return dimreg->LFO2FlipPhase; }
155 bool signedRange() const OVERRIDE { return false; }
156 virtual LinuxSampler::LFO::start_level_t startLevel() const OVERRIDE { return LinuxSampler::LFO::start_level_mid; } // see https://sourceforge.net/p/linuxsampler/mailman/linuxsampler-devel/thread/2189307.cNP0Xbctxq%40silver/#msg36774029
157 bool hasControllerAssigned() const OVERRIDE { return dimreg->LFO2Controller; }
158 };
159
160 class LFO3Graph : public LFOGraph {
161 public:
162 LinuxSampler::LFO::wave_t waveType() const OVERRIDE {
163 // simply assuming here libgig's and LS's enums are equally value mapped
164 return (LinuxSampler::LFO::wave_t) dimreg->LFO3WaveForm;
165 }
166 float frequency() const OVERRIDE { return dimreg->LFO3Frequency; }
167 float phase() const OVERRIDE { return dimreg->LFO3Phase; }
168 uint internalDepth() const OVERRIDE {
169 const gig::lfo3_ctrl_t ctrl = dimreg->LFO3Controller;
170 const bool hasInternalDepth = (
171 ctrl != gig::lfo3_ctrl_modwheel && ctrl != gig::lfo3_ctrl_aftertouch
172 );
173 return (hasInternalDepth) ? dimreg->LFO3InternalDepth : 0;
174 }
175 uint controllerDepth() const OVERRIDE { return dimreg->LFO3ControlDepth; }
176 bool flipPolarity() const OVERRIDE { return dimreg->LFO3FlipPhase; }
177 bool signedRange() const OVERRIDE { return true; }
178 virtual LinuxSampler::LFO::start_level_t startLevel() const OVERRIDE { return LinuxSampler::LFO::start_level_max; } // see https://sourceforge.net/p/linuxsampler/mailman/linuxsampler-devel/thread/2189307.cNP0Xbctxq%40silver/#msg36774029
179 bool hasControllerAssigned() const OVERRIDE { return dimreg->LFO3Controller; }
180 };
181
182 class EGStateOptions : public HBox {
183 public:
184 Gtk::Label label;
185 BoolBox checkBoxAttack;
186 BoolBox checkBoxAttackHold;
187 BoolBox checkBoxDecay1;
188 BoolBox checkBoxDecay2;
189 BoolBox checkBoxRelease;
190
191 EGStateOptions();
192 void on_show_tooltips_changed();
193 };
194
195 class DimRegionEdit : public Gtk::Notebook
196 {
197 public:
198 DimRegionEdit();
199 virtual ~DimRegionEdit();
200 void set_dim_region(gig::DimensionRegion* d);
201 bool set_sample(gig::Sample* sample, bool copy_sample_unity, bool copy_sample_tune, bool copy_sample_loop);
202 bool set_sample(gig::DimensionRegion* dimreg, gig::Sample* sample, bool copy_sample_unity, bool copy_sample_tune, bool copy_sample_loop);
203 Gtk::Entry* wSample;
204 Gtk::Button* buttonNullSampleReference;
205 sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_to_be_changed();
206 sigc::signal<void, gig::DimensionRegion*>& signal_dimreg_changed();
207 sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/>& signal_sample_ref_changed();
208 sigc::signal<void, gig::Sample*>& signal_select_sample();
209
210 std::set<gig::DimensionRegion*> dimregs;
211
212 protected:
213 sigc::signal<void, gig::DimensionRegion*> dimreg_to_be_changed_signal;
214 sigc::signal<void, gig::DimensionRegion*> dimreg_changed_signal;
215 sigc::signal<void, gig::Sample*/*old*/, gig::Sample*/*new*/> sample_ref_changed_signal;
216 sigc::signal<void> instrument_changed;
217 sigc::signal<void, gig::Sample*> select_sample_signal;
218
219 /**
220 * Ensures that the 2 signals DimRegionEdit::dimreg_to_be_changed_signal and
221 * DimRegionEdit::dimreg_changed_signal are always triggered correctly as a
222 * pair. It behaves similar to a "mutex lock guard" design pattern.
223 */
224 class DimRegionChangeGuard : public SignalGuard<gig::DimensionRegion*> {
225 public:
226 DimRegionChangeGuard(DimRegionEdit* edit, gig::DimensionRegion* pDimReg) :
227 SignalGuard<gig::DimensionRegion*>(edit->dimreg_to_be_changed_signal, edit->dimreg_changed_signal, pDimReg)
228 {
229 }
230 };
231
232 gig::DimensionRegion* dimregion;
233
234 #ifdef OLD_TOOLTIPS
235 Gtk::Tooltips tooltips;
236 #endif
237
238 #if USE_GTKMM_GRID
239 Gtk::Grid* table[9];
240 #else
241 Gtk::Table* table[9];
242 #endif
243
244 Gtk::Label* lSample;
245
246 VelocityCurve velocity_curve;
247 VelocityCurve release_curve;
248 VelocityCurve cutoff_curve;
249 CrossfadeCurve crossfade_curve;
250 LFO1Graph lfo1Graph; ///< Graphic of Amplitude (Volume) LFO waveform.
251 LFO2Graph lfo2Graph; ///< Graphic of Filter Cutoff LFO waveform.
252 LFO3Graph lfo3Graph; ///< Graphic of Pitch LFO waveform.
253
254 NumEntryPermille eEG1PreAttack;
255 NumEntryTemp<double> eEG1Attack;
256 NumEntryTemp<double> eEG1Decay1;
257 NumEntryTemp<double> eEG1Decay2;
258 BoolEntry eEG1InfiniteSustain;
259 NumEntryPermille eEG1Sustain;
260 NumEntryTemp<double> eEG1Release;
261 BoolEntry eEG1Hold;
262 ChoiceEntryLeverageCtrl eEG1Controller;
263 BoolEntry eEG1ControllerInvert;
264 NumEntryTemp<uint8_t> eEG1ControllerAttackInfluence;
265 NumEntryTemp<uint8_t> eEG1ControllerDecayInfluence;
266 NumEntryTemp<uint8_t> eEG1ControllerReleaseInfluence;
267 EGStateOptions eEG1StateOptions;
268 ChoiceEntryLfoWave eLFO1Wave;
269 NumEntryTemp<double> eLFO1Frequency;
270 NumEntryTemp<double> eLFO1Phase;
271 NumEntryTemp<uint16_t> eLFO1InternalDepth;
272 NumEntryTemp<uint16_t> eLFO1ControlDepth;
273 ChoiceEntry<gig::lfo1_ctrl_t> eLFO1Controller;
274 BoolEntry eLFO1FlipPhase;
275 BoolEntry eLFO1Sync;
276 NumEntryPermille eEG2PreAttack;
277 NumEntryTemp<double> eEG2Attack;
278 NumEntryTemp<double> eEG2Decay1;
279 NumEntryTemp<double> eEG2Decay2;
280 BoolEntry eEG2InfiniteSustain;
281 NumEntryPermille eEG2Sustain;
282 NumEntryTemp<double> eEG2Release;
283 ChoiceEntryLeverageCtrl eEG2Controller;
284 BoolEntry eEG2ControllerInvert;
285 NumEntryTemp<uint8_t> eEG2ControllerAttackInfluence;
286 NumEntryTemp<uint8_t> eEG2ControllerDecayInfluence;
287 NumEntryTemp<uint8_t> eEG2ControllerReleaseInfluence;
288 EGStateOptions eEG2StateOptions;
289 ChoiceEntryLfoWave eLFO2Wave;
290 NumEntryTemp<double> eLFO2Frequency;
291 NumEntryTemp<double> eLFO2Phase;
292 NumEntryTemp<uint16_t> eLFO2InternalDepth;
293 NumEntryTemp<uint16_t> eLFO2ControlDepth;
294 ChoiceEntry<gig::lfo2_ctrl_t> eLFO2Controller;
295 BoolEntry eLFO2FlipPhase;
296 BoolEntry eLFO2Sync;
297 NumEntryTemp<double> eEG3Attack;
298 NumEntryTemp<int16_t> eEG3Depth;
299 ChoiceEntryLfoWave eLFO3Wave;
300 NumEntryTemp<double> eLFO3Frequency;
301 NumEntryTemp<double> eLFO3Phase;
302 NumEntryTemp<int16_t> eLFO3InternalDepth;
303 NumEntryTemp<int16_t> eLFO3ControlDepth;
304 ChoiceEntry<gig::lfo3_ctrl_t> eLFO3Controller;
305 BoolEntry eLFO3FlipPhase;
306 BoolEntry eLFO3Sync;
307 BoolEntry eVCFEnabled;
308 ChoiceEntry<gig::vcf_type_t> eVCFType;
309 ChoiceEntry<gig::vcf_cutoff_ctrl_t> eVCFCutoffController;
310 BoolEntry eVCFCutoffControllerInvert;
311 NumEntryTemp<uint8_t> eVCFCutoff;
312 ChoiceEntry<gig::curve_type_t> eVCFVelocityCurve;
313 NumEntryTemp<uint8_t> eVCFVelocityScale;
314 NumEntryTemp<uint8_t> eVCFVelocityDynamicRange;
315 NumEntryTemp<uint8_t> eVCFResonance;
316 BoolEntry eVCFResonanceDynamic;
317 ChoiceEntry<gig::vcf_res_ctrl_t> eVCFResonanceController;
318 BoolEntry eVCFKeyboardTracking;
319 NumEntryTemp<uint8_t> eVCFKeyboardTrackingBreakpoint;
320 ChoiceEntry<gig::curve_type_t> eVelocityResponseCurve;
321 NumEntryTemp<uint8_t> eVelocityResponseDepth;
322 NumEntryTemp<uint8_t> eVelocityResponseCurveScaling;
323 ChoiceEntry<gig::curve_type_t> eReleaseVelocityResponseCurve;
324 NumEntryTemp<uint8_t> eReleaseVelocityResponseDepth;
325 NumEntryTemp<uint8_t> eReleaseTriggerDecay;
326 NumEntryTemp<uint8_t> eCrossfade_in_start;
327 NumEntryTemp<uint8_t> eCrossfade_in_end;
328 NumEntryTemp<uint8_t> eCrossfade_out_start;
329 NumEntryTemp<uint8_t> eCrossfade_out_end;
330 BoolEntry ePitchTrack;
331 ChoiceEntry<gig::sust_rel_trg_t> eSustainReleaseTrigger;
332 BoolEntry eNoNoteOffReleaseTrigger;
333 ChoiceEntry<gig::dim_bypass_ctrl_t> eDimensionBypass;
334 NumEntryTemp<int8_t> ePan;
335 BoolEntry eSelfMask;
336 ChoiceEntryLeverageCtrl eAttenuationController;
337 BoolEntry eInvertAttenuationController;
338 NumEntryTemp<uint8_t> eAttenuationControllerThreshold;
339 NumEntryTemp<uint8_t> eChannelOffset;
340 BoolEntry eSustainDefeat;
341 BoolEntry eMSDecode;
342 NumEntryTemp<uint16_t> eSampleStartOffset;
343 NoteEntry eUnityNote;
344 ReadOnlyLabelWidget eSampleGroup;
345 ReadOnlyLabelWidget eSampleFormatInfo;
346 ReadOnlyLabelWidget eSampleID;
347 ReadOnlyLabelWidget eChecksum;
348 NumEntryTemp<int16_t> eFineTune;
349 NumEntryGain eGain;
350 BoolEntryPlus6 eGainPlus6;
351 BoolEntry eSampleLoopEnabled;
352 NumEntryTemp<uint32_t> eSampleLoopStart;
353 NumEntryTemp<uint32_t> eSampleLoopLength;
354 ChoiceEntry<uint32_t> eSampleLoopType;
355 BoolEntry eSampleLoopInfinite;
356 NumEntryTemp<uint32_t> eSampleLoopPlayCount;
357 Gtk::Label* lEG2;
358 Gtk::Label* lLFO2;
359
360 Gtk::Button buttonSelectSample;
361
362 int rowno;
363 int pageno;
364 int firstRowInBlock;
365
366
367 void addProp(BoolEntry& boolentry);
368 void addProp(BoolEntryPlus6& boolentry);
369 void addProp(LabelWidget& labelwidget);
370 void addLine(HBox& line);
371 void addString(const char* labelText, Gtk::Label*& label,
372 Gtk::Entry*& widget);
373 void addString(const char* labelText, Gtk::Label*& label,
374 Gtk::Entry*& widget, Gtk::Button*& button);
375 Gtk::Label* addHeader(const char* text);
376 void addRightHandSide(Gtk::Widget& widget);
377 void nextPage();
378
379 void VCFEnabled_toggled();
380 void VCFCutoffController_changed();
381 void VCFResonanceController_changed();
382 void EG1InfiniteSustain_toggled();
383 void EG2InfiniteSustain_toggled();
384 void EG1Controller_changed();
385 void EG2Controller_changed();
386 void AttenuationController_changed();
387 void LFO1Controller_changed();
388 void LFO2Controller_changed();
389 void LFO3Controller_changed();
390 void crossfade1_changed();
391 void crossfade2_changed();
392 void crossfade3_changed();
393 void crossfade4_changed();
394 void update_loop_elements();
395 void loop_start_changed();
396 void loop_length_changed();
397 void loop_infinite_toggled();
398 void nullOutSampleReference();
399 void on_show_tooltips_changed();
400
401 int update_model;
402
403 // connect a widget to a setter function in DimRegionEdit
404 template<typename C, typename T>
405 void connect(C& widget,
406 void (DimRegionEdit::*setter)(gig::DimensionRegion&, T)) {
407 connect<C, T>(widget,
408 sigc::mem_fun(setter));
409 }
410
411 // connect a widget to a member variable in gig::DimensionRegion
412 template<typename C, typename T>
413 void connect(C& widget, T gig::DimensionRegion::* member) {
414 connect<C, T>(widget,
415 sigc::bind(sigc::mem_fun(&DimRegionEdit::set_member<T>), member));
416 }
417
418 // connect a widget to a member of a struct member in gig::DimensionRegion
419 template<typename C, typename T, typename S>
420 void connect(C& widget, S gig::DimensionRegion::* member, T S::* member2) {
421 connect<C, T>(widget,
422 sigc::bind(sigc::mem_fun(&DimRegionEdit::set_sub_member<T, S>), member, member2));
423 }
424
425 // connect a widget to a setter function in gig::DimensionRegion
426 template<typename C, typename T>
427 void connect(C& widget,
428 void (gig::DimensionRegion::*setter)(T)) {
429 connect<C, T>(widget,
430 sigc::hide<0>(sigc::mem_fun(setter)));
431 }
432
433 // helper function for the connect functions above
434 template<typename C, typename T>
435 void connect(C& widget,
436 sigc::slot<void, DimRegionEdit&, gig::DimensionRegion&, T> setter) {
437 widget.signal_value_changed().connect(
438 sigc::compose(sigc::bind(sigc::mem_fun(*this, &DimRegionEdit::set_many<T>), setter),
439 sigc::mem_fun(widget, &C::get_value)));
440 }
441
442 // loop through all dimregions being edited and set a value in
443 // each of them
444 template<typename T>
445 void set_many(T value,
446 sigc::slot<void, DimRegionEdit&, gig::DimensionRegion&, T> setter) {
447 if (update_model == 0) {
448 for (std::set<gig::DimensionRegion*>::iterator i = dimregs.begin() ;
449 i != dimregs.end() ; ++i)
450 {
451 DimRegionChangeGuard(this, *i);
452 setter(*this, **i, value);
453 }
454 }
455 }
456
457 // set a value of a member variable in the given dimregion
458 template<typename T>
459 void set_member(gig::DimensionRegion& d, T value,
460 T gig::DimensionRegion::* member) {
461 d.*member = value;
462 }
463
464 // set a value of a member of a struct member variable in the given dimregion
465 template<typename T, typename S>
466 void set_sub_member(gig::DimensionRegion& d, T value,
467 S gig::DimensionRegion::* member, T S::* member2) {
468 d.*member.*member2 = value;
469 }
470
471 // setters for specific dimregion parameters
472
473 void set_UnityNote(gig::DimensionRegion& d, uint8_t value);
474 void set_FineTune(gig::DimensionRegion& d, int16_t value);
475 void set_Crossfade_in_start(gig::DimensionRegion& d, uint8_t value);
476 void set_Crossfade_in_end(gig::DimensionRegion& d, uint8_t value);
477 void set_Crossfade_out_start(gig::DimensionRegion& d, uint8_t value);
478 void set_Crossfade_out_end(gig::DimensionRegion& d, uint8_t value);
479 void set_Gain(gig::DimensionRegion& d, int32_t value);
480 void set_LoopEnabled(gig::DimensionRegion& d, bool value);
481 void set_LoopType(gig::DimensionRegion& d, uint32_t value);
482 void set_LoopStart(gig::DimensionRegion& d, uint32_t value);
483 void set_LoopLength(gig::DimensionRegion& d, uint32_t value);
484 void set_LoopInfinite(gig::DimensionRegion& d, bool value);
485 void set_LoopPlayCount(gig::DimensionRegion& d, uint32_t value);
486
487 void onButtonSelectSamplePressed();
488 };
489
490 #endif

  ViewVC Help
Powered by ViewVC