CSL  6.0
CSLMIDIFaderComponent.cpp
Go to the documentation of this file.
1 /*
2  ==============================================================================
3 
4  This is an automatically generated file created by the Jucer!
5 
6  Creation date: 24 Oct 2009 11:43:13 pm
7 
8  Be careful when adding custom code to these files, as only the code within
9  the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
10  and re-saved.
11 
12  Jucer version: 1.12
13 
14  ------------------------------------------------------------------------------
15 
16  The Jucer is part of the JUCE library - "Jules' Utility Class Extensions"
17  Copyright 2004-6 by Raw Material Software ltd.
18 
19  ==============================================================================
20 */
21 
22 //[Headers] You can add your own extra header files here...
23 //[/Headers]
24 
25 #include "CSLMIDIFaderComponent.h"
26 
27 
28 //[MiscUserDefs] You can add your own user definitions and misc code here...
29 
30 #include "MIDIIOJ.h"
31 #include <iostream>
32 using namespace csl;
33 
34 // Globals are here
35 
36 extern IO * theIO; // global IO object accessed by other threads
37 Label* gCPULabel = 0; // CPU % label...
38 AudioDeviceManager * gAudioDeviceManager = 0; // global JUCE audio device mgr
39 unsigned argCnt = 0; // globals for argc/v from cmd-line
40 char **argVals;
41 VoidFcnPtrN * gFcn = 0; // test function ptr
42 
43 
44 /// Test mixer -- really slow additive synthesis
45 
46 void playSineMixer() {
47  Mixer mix(2); // create a stereo mixer
48  for (int i = 0; i < 16; i++) {
49  Osc * vox = new Osc(fRandM(100, 140), 0.05); // create scaled sine waves
50  Panner * pan = new Panner(*vox, ((float) i / 8.0f) - 1.0f); // panner on the sine
51  mix.addInput(*pan); // add the panners to the mixer
52  }
53  logMsg("playing mix of 16 sines...");
54 
55  theIO->open(); // open & start it
56  theIO->start();
57  theIO->setRoot(mix); // make some sound
58  sleepSec(60); // sleep for the desired duration
59  theIO->clearRoot(); // make some silence
60  theIO->stop(); // stop & close PortAudio
61  theIO->close();
62  sleepSec(0.1); // wait for it to stop
63  logMsg("mix done.\n");
64 }
65 
66 //[/MiscUserDefs]
67 
68 //==============================================================================
70  : quitButton (0),
71  selButton (0),
72  clearButton (0),
73  audioDeviceSelector (0), changed(false), playing(false),
74  slider (0),
75  slider2 (0),
76  slider3 (0),
77  slider4 (0),
78  slider5 (0),
79  slider6 (0),
80  slider7 (0),
81  slider8 (0),
82  slider9 (0),
83  slider10 (0),
84  slider11 (0),
85  slider12 (0),
86  slider13 (0),
87  slider14 (0),
88  slider15 (0),
89  slider16 (0),
90  label2 (0)
91 {
92  addAndMakeVisible (quitButton = new TextButton (T("new button")));
93  quitButton->setButtonText (T("Quit"));
94  quitButton->addButtonListener (this);
95 
96  addAndMakeVisible (selButton = new TextButton (T("new button")));
97  selButton->setButtonText (T("Select"));
98  selButton->addButtonListener (this);
99 
100  addAndMakeVisible (clearButton = new TextButton (T("new button")));
101  clearButton->setButtonText (T("Clear"));
102  clearButton->addButtonListener (this);
103 
104 // addAndMakeVisible (audioDeviceSelector = new AudioDeviceSelectorComponent());
105 // audioDeviceSelector->setName (T("new component"));
106 
107  addAndMakeVisible (slider = new Slider (T("new slider")));
108  slider->setRange (0, 127, 0);
109  slider->setSliderStyle (Slider::LinearVertical);
110  slider->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
111  slider->addListener (this);
112 
113  addAndMakeVisible (slider2 = new Slider (T("new slider")));
114  slider2->setRange (0, 127, 0);
115  slider2->setSliderStyle (Slider::LinearVertical);
116  slider2->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
117  slider2->addListener (this);
118 
119  addAndMakeVisible (slider3 = new Slider (T("new slider")));
120  slider3->setRange (0, 127, 0);
121  slider3->setSliderStyle (Slider::LinearVertical);
122  slider3->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
123  slider3->addListener (this);
124 
125  addAndMakeVisible (slider4 = new Slider (T("new slider")));
126  slider4->setRange (0, 127, 0);
127  slider4->setSliderStyle (Slider::LinearVertical);
128  slider4->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
129  slider4->addListener (this);
130 
131  addAndMakeVisible (slider5 = new Slider (T("new slider")));
132  slider5->setRange (0, 127, 0);
133  slider5->setSliderStyle (Slider::LinearVertical);
134  slider5->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
135  slider5->addListener (this);
136 
137  addAndMakeVisible (slider6 = new Slider (T("new slider")));
138  slider6->setRange (0, 127, 0);
139  slider6->setSliderStyle (Slider::LinearVertical);
140  slider6->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
141  slider6->addListener (this);
142 
143  addAndMakeVisible (slider7 = new Slider (T("new slider")));
144  slider7->setRange (0, 127, 0);
145  slider7->setSliderStyle (Slider::LinearVertical);
146  slider7->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
147  slider7->addListener (this);
148 
149  addAndMakeVisible (slider8 = new Slider (T("new slider")));
150  slider8->setRange (0, 127, 0);
151  slider8->setSliderStyle (Slider::LinearVertical);
152  slider8->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
153  slider8->addListener (this);
154 
155  addAndMakeVisible (slider9 = new Slider (T("new slider")));
156  slider9->setRange (0, 127, 0);
157  slider9->setSliderStyle (Slider::LinearVertical);
158  slider9->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
159  slider9->addListener (this);
160 
161  addAndMakeVisible (slider10 = new Slider (T("new slider")));
162  slider10->setRange (0, 127, 0);
163  slider10->setSliderStyle (Slider::LinearVertical);
164  slider10->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
165  slider10->addListener (this);
166 
167  addAndMakeVisible (slider11 = new Slider (T("new slider")));
168  slider11->setRange (0, 127, 0);
169  slider11->setSliderStyle (Slider::LinearVertical);
170  slider11->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
171  slider11->addListener (this);
172 
173  addAndMakeVisible (slider12 = new Slider (T("new slider")));
174  slider12->setRange (0, 127, 0);
175  slider12->setSliderStyle (Slider::LinearVertical);
176  slider12->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
177  slider12->addListener (this);
178 
179  addAndMakeVisible (slider13 = new Slider (T("new slider")));
180  slider13->setRange (0, 127, 0);
181  slider13->setSliderStyle (Slider::LinearVertical);
182  slider13->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
183  slider13->addListener (this);
184 
185  addAndMakeVisible (slider14 = new Slider (T("new slider")));
186  slider14->setRange (0, 127, 0);
187  slider14->setSliderStyle (Slider::LinearVertical);
188  slider14->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
189  slider14->addListener (this);
190 
191  addAndMakeVisible (slider15 = new Slider (T("new slider")));
192  slider15->setRange (0, 127, 0);
193  slider15->setSliderStyle (Slider::LinearVertical);
194  slider15->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
195  slider15->addListener (this);
196 
197  addAndMakeVisible (slider16 = new Slider (T("new slider")));
198  slider16->setRange (0, 127, 0);
199  slider16->setSliderStyle (Slider::LinearVertical);
200  slider16->setTextBoxStyle (Slider::NoTextBox, true, 0, 20);
201  slider16->addListener (this);
202 
203  addAndMakeVisible (label2 = new Label (T("new label"),
204  T("CSL 5.0 MIDI Faders")));
205  label2->setFont (Font (24.0000f, Font::plain));
206  label2->setJustificationType (Justification::centredLeft);
207  label2->setEditable (false, false, false);
208  label2->setColour (TextEditor::textColourId, Colours::black);
209  label2->setColour (TextEditor::backgroundColourId, Colour (0x0));
210 
211 
212  //[UserPreSize]
213  //[/UserPreSize]
214 
215  setSize (400, 300);
216 
217  //[Constructor] You can add your own custom stuff here..
218 
219  sliders.push_back(slider); values.push_back(0); nextVals.push_back(0);
220  sliders.push_back(slider2); values.push_back(0); nextVals.push_back(0);
221  sliders.push_back(slider3); values.push_back(0); nextVals.push_back(0);
222  sliders.push_back(slider4); values.push_back(0); nextVals.push_back(0);
223  sliders.push_back(slider5); values.push_back(0); nextVals.push_back(0);
224  sliders.push_back(slider6); values.push_back(0); nextVals.push_back(0);
225  sliders.push_back(slider7); values.push_back(0); nextVals.push_back(0);
226  sliders.push_back(slider8); values.push_back(0); nextVals.push_back(0);
227  sliders.push_back(slider9); values.push_back(0); nextVals.push_back(0);
228  sliders.push_back(slider10); values.push_back(0); nextVals.push_back(0);
229  sliders.push_back(slider11); values.push_back(0); nextVals.push_back(0);
230  sliders.push_back(slider12); values.push_back(0); nextVals.push_back(0);
231  sliders.push_back(slider13); values.push_back(0); nextVals.push_back(0);
232  sliders.push_back(slider14); values.push_back(0); nextVals.push_back(0);
233  sliders.push_back(slider15); values.push_back(0); nextVals.push_back(0);
234  sliders.push_back(slider16); values.push_back(0); nextVals.push_back(0);
235 
236  mIn = new MIDIIn; // create the midi in
237  mIn->open(DEFAULT_MIDI_IN); // open it
238 // lst.mPeriod = 0.25;
239 // this->mKey = kNoteOn; // filter noteOn events
240  mIn->attachObserver(this); // attach this as observer of input
241  logMsg("Start MIDI listener");
242  mIn->start(); // start midi in
243  offset = 48;
244  this->startTimer(100); // 0.1-sec timer
245 
246  //[/Constructor]
247 }
248 
250 {
251  //[Destructor_pre]. You can add your own custom destruction code here..
252  //[/Destructor_pre]
253 
254  deleteAndZero (quitButton);
255  deleteAndZero (selButton);
256  deleteAndZero (clearButton);
257 // deleteAndZero (audioDeviceSelector);
258  deleteAndZero (slider);
259  deleteAndZero (slider2);
260  deleteAndZero (slider3);
261  deleteAndZero (slider4);
262  deleteAndZero (slider5);
263  deleteAndZero (slider6);
264  deleteAndZero (slider7);
265  deleteAndZero (slider8);
266  deleteAndZero (slider9);
267  deleteAndZero (slider10);
268  deleteAndZero (slider11);
269  deleteAndZero (slider12);
270  deleteAndZero (slider13);
271  deleteAndZero (slider14);
272  deleteAndZero (slider15);
273  deleteAndZero (slider16);
274  deleteAndZero (label2);
275 
276  //[Destructor]. You can add your own custom destruction code here..
277  //[/Destructor]
278 }
279 
280 //==============================================================================
281 void CSLMIDIComponent::paint (Graphics& g)
282 {
283  //[UserPrePaint] Add your own custom painting code here..
284  //[/UserPrePaint]
285 
286  g.fillAll (Colour (0xff829bb1));
287 
288  //[UserPaint] Add your own custom painting code here..
289  //[/UserPaint]
290 }
291 
293 {
294  quitButton->setBounds (328, 8, 150, 24);
295  selButton->setBounds (328, 40, 150, 24);
296  clearButton->setBounds (328, 272, 150, 24);
297 // audioDeviceSelector->setBounds (312, 72, 176, 192);
298  slider->setBounds (16, 72, 15, 200);
299  slider2->setBounds (32, 72, 15, 200);
300  slider3->setBounds (48, 72, 15, 200);
301  slider4->setBounds (64, 72, 15, 200);
302  slider5->setBounds (120, 72, 15, 200);
303  slider6->setBounds (88, 72, 15, 200);
304  slider7->setBounds (104, 72, 15, 200);
305  slider8->setBounds (136, 72, 15, 200);
306  slider9->setBounds (192, 72, 15, 200);
307  slider10->setBounds (160, 72, 15, 200);
308  slider11->setBounds (176, 72, 15, 200);
309  slider12->setBounds (208, 72, 15, 200);
310  slider13->setBounds (264, 72, 15, 200);
311  slider14->setBounds (232, 72, 15, 200);
312  slider15->setBounds (248, 72, 15, 200);
313  slider16->setBounds (280, 72, 15, 200);
314  label2->setBounds (24, 24, 208, 24);
315  //[UserResized] Add your own custom resize handling here..
316  //[/UserResized]
317 }
318 
319 void CSLMIDIComponent::buttonClicked (Button* buttonThatWasClicked)
320 {
321  //[UserbuttonClicked_Pre]
322  //[/UserbuttonClicked_Pre]
323 
324  if (buttonThatWasClicked == quitButton)
325  {
326  //[UserButtonCode_quitButton] -- add your button handler code here..
327  //[/UserButtonCode_quitButton]
328  }
329  else if (buttonThatWasClicked == selButton)
330  {
331  //[UserButtonCode_selButton] -- add your button handler code here..
332  //[/UserButtonCode_selButton]
333  }
334  else if (buttonThatWasClicked == clearButton)
335  {
336  //[UserButtonCode_clearButton] -- add your button handler code here..
337  //[/UserButtonCode_clearButton]
338  }
339 
340  //[UserbuttonClicked_Post]
341  //[/UserbuttonClicked_Post]
342 }
343 
344 void CSLMIDIComponent::sliderValueChanged (Slider* sliderThatWasMoved)
345 {
346  //[UsersliderValueChanged_Pre]
347  //[/UsersliderValueChanged_Pre]
348 
349  if (sliderThatWasMoved == slider)
350  {
351  //[UserSliderCode_slider] -- add your slider handling code here..
352  //[/UserSliderCode_slider]
353  }
354  else if (sliderThatWasMoved == slider2)
355  {
356  //[UserSliderCode_slider2] -- add your slider handling code here..
357  //[/UserSliderCode_slider2]
358  }
359  else if (sliderThatWasMoved == slider3)
360  {
361  //[UserSliderCode_slider3] -- add your slider handling code here..
362  //[/UserSliderCode_slider3]
363  }
364  else if (sliderThatWasMoved == slider4)
365  {
366  //[UserSliderCode_slider4] -- add your slider handling code here..
367  //[/UserSliderCode_slider4]
368  }
369  else if (sliderThatWasMoved == slider5)
370  {
371  //[UserSliderCode_slider5] -- add your slider handling code here..
372  //[/UserSliderCode_slider5]
373  }
374  else if (sliderThatWasMoved == slider6)
375  {
376  //[UserSliderCode_slider6] -- add your slider handling code here..
377  //[/UserSliderCode_slider6]
378  }
379  else if (sliderThatWasMoved == slider7)
380  {
381  //[UserSliderCode_slider7] -- add your slider handling code here..
382  //[/UserSliderCode_slider7]
383  }
384  else if (sliderThatWasMoved == slider8)
385  {
386  //[UserSliderCode_slider8] -- add your slider handling code here..
387  //[/UserSliderCode_slider8]
388  }
389  else if (sliderThatWasMoved == slider9)
390  {
391  //[UserSliderCode_slider9] -- add your slider handling code here..
392  //[/UserSliderCode_slider9]
393  }
394  else if (sliderThatWasMoved == slider10)
395  {
396  //[UserSliderCode_slider10] -- add your slider handling code here..
397  //[/UserSliderCode_slider10]
398  }
399  else if (sliderThatWasMoved == slider11)
400  {
401  //[UserSliderCode_slider11] -- add your slider handling code here..
402  //[/UserSliderCode_slider11]
403  }
404  else if (sliderThatWasMoved == slider12)
405  {
406  //[UserSliderCode_slider12] -- add your slider handling code here..
407  //[/UserSliderCode_slider12]
408  }
409  else if (sliderThatWasMoved == slider13)
410  {
411  //[UserSliderCode_slider13] -- add your slider handling code here..
412  //[/UserSliderCode_slider13]
413  }
414  else if (sliderThatWasMoved == slider14)
415  {
416  //[UserSliderCode_slider14] -- add your slider handling code here..
417  //[/UserSliderCode_slider14]
418  }
419  else if (sliderThatWasMoved == slider15)
420  {
421  //[UserSliderCode_slider15] -- add your slider handling code here..
422  //[/UserSliderCode_slider15]
423  }
424  else if (sliderThatWasMoved == slider16)
425  {
426  //[UserSliderCode_slider16] -- add your slider handling code here..
427  //[/UserSliderCode_slider16]
428  }
429 
430  //[UsersliderValueChanged_Post]
431  //[/UsersliderValueChanged_Post]
432 }
433 
434 
435 
436 //[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
437 
438 
439 // update() method takes a MIDI message and prints it
440 
441 void CSLMIDIComponent::update(void * arg) {
442  CMIDIMessage * msg = (CMIDIMessage *) arg;
443  mIn->clear();
444 // logMsg("MIDI msg %d k %d v %d", msg->command, msg->getNote(), msg->getVelocity());
445  if ( ! msg->isControlChange())
446  return;
447  nextVals[msg->getNote() - offset] = msg->getVelocity();
448  changed = true; // set changed flag for timer thread
449 }
450 
451 // timer call checks changed and redraws sliders
452 
454 // CSLAbstComponent::timerCallback();
455  if ( ! changed) return;
456  for (unsigned i = 0; i < sliders.size(); i++) {
457  if (values[i] != nextVals[i]) {
458  sliders[i]->setValue(nextVals[i]);
459  values[i] = nextVals[i];
460  }
461  }
462  changed = false; // reset flag
463 }
464 
465 
466 /////////////// CSL/JUCE Audio callback method ///////////////////
467 
468 void CSLMIDIComponent::audioDeviceIOCallback (const float** inputChannelData,
469  int totalNumInputChannels,
470  float** outputChannelData,
471  int totalNumOutputChannels,
472  int numSamples) {
473  // put silence in the output buffers
474  for (unsigned i = 0; i < totalNumOutputChannels; i++)
475  memset(outputChannelData[i], 0, numSamples * sizeof(float));
476 
477  if ( ! playing) // if off
478  return;
479  if (CGestalt::stopNow()) // if being interrupted
480  return;
481  // set up CSL buffer object
482  if (theIO->mGraph) {
483  outBuffer.setSize(totalNumOutputChannels, numSamples);
484  // copy JUCE data ptrs
485  for (unsigned i = 0; i < totalNumOutputChannels; i++)
486  outBuffer.mBuffers[i] = outputChannelData[i];
487 
488  try { //////
489  // Tell the IO to call its graph
490  //////
491  theIO->pullInput(outBuffer);
492 
493  } catch (csl::CException e) {
494  logMsg(kLogError, "Error running CSL: graph: %s\n", e.what());
495  }
496  } // if mGraph
497 }
498 
499 // Audio device support
500 
501 void CSLMIDIComponent::audioDeviceAboutToStart (AudioIODevice* device) {
502 }
503 
505 }
506 
507 
508 // start/stop
509 
511  if ( ! playing) { // if not playing, start!
512  playing = true;
513  CGestalt::clearStopNow(); // clear flag
514  // create a threadfcn that plays CSL
515  ThreadFunc fcn = (void * (*)(void *)) playSineMixer;
516 
517  playThread = new GThread(fcn); // thread to call the CSL test function
518  playThread->startThread();
519 // playButton->setButtonText (T("Stop"));
520  } else { // if playing
521  playing = false;
522  theIO->clearRoot();
523  this->stopTimer();
524  CGestalt::setStopNow(); // set flag to clear timers
525  sleepMsec(100);
526  if (playThread->isThreadRunning())
527  playThread->stopThread(1000); // try to kill
528  delete playThread;
529  playThread = 0;
530 // playButton->setButtonText (T("Play"));
531  CGestalt::clearStopNow(); // clear flag
532  }
533 }
534 
535 // create the component -- called from main()
536 
537 Component* createCSLComponent() {
538  return new CSLMIDIComponent();
539 }
540 
541 //[/MiscUserCode]
542 
543 
544 //==============================================================================
545 #if 0
546 /* -- Jucer information section --
547 
548  This is where the Jucer puts all of its metadata, so don't change anything in here!
549 
550 BEGIN_JUCER_METADATA
551 
552 <JUCER_COMPONENT documentType="Component" className="CSLMIDIComponent" componentName=""
553  parentClasses="public CSLAbstComponent" constructorParams=""
554  variableInitialisers="" snapPixels="8" snapActive="1" snapShown="1"
555  overlayOpacity="0.330000013" fixedSize="1" initialWidth="500"
556  initialHeight="300">
557  <BACKGROUND backgroundColour="ff829bb1"/>
558  <TEXTBUTTON name="new button" id="c0692c09dc89d8ab" memberName="quitButton"
559  virtualName="" explicitFocusOrder="0" pos="328 8 150 24" buttonText="Quit"
560  connectedEdges="0" needsCallback="1" radioGroupId="0"/>
561  <TEXTBUTTON name="new button" id="9e849843391ee895" memberName="selButton"
562  virtualName="" explicitFocusOrder="0" pos="328 40 150 24" buttonText="Select"
563  connectedEdges="0" needsCallback="1" radioGroupId="0"/>
564  <TEXTBUTTON name="new button" id="fec4a7f49a098957" memberName="clearButton"
565  virtualName="" explicitFocusOrder="0" pos="328 272 150 24" buttonText="Clear"
566  connectedEdges="0" needsCallback="1" radioGroupId="0"/>
567  <GENERICCOMPONENT name="new component" id="b1bc16d7b6e9ef79" memberName="audioDeviceSelector"
568  virtualName="" explicitFocusOrder="0" pos="312 72 176 192" class="AudioDeviceSelectorComponent"
569  params=""/>
570  <SLIDER name="new slider" id="48c2dd1972fbb1" memberName="slider" virtualName=""
571  explicitFocusOrder="0" pos="16 72 15 200" min="0" max="127" int="0"
572  style="LinearVertical" textBoxPos="NoTextBox" textBoxEditable="0"
573  textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
574  <SLIDER name="new slider" id="fcb4de8fba017278" memberName="slider2"
575  virtualName="" explicitFocusOrder="0" pos="32 72 15 200" min="0"
576  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
577  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
578  <SLIDER name="new slider" id="3f29e68d9b1bdba1" memberName="slider3"
579  virtualName="" explicitFocusOrder="0" pos="48 72 15 200" min="0"
580  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
581  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
582  <SLIDER name="new slider" id="b43f10e2bfb52bf2" memberName="slider4"
583  virtualName="" explicitFocusOrder="0" pos="64 72 15 200" min="0"
584  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
585  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
586  <SLIDER name="new slider" id="f6706e5237419417" memberName="slider5"
587  virtualName="" explicitFocusOrder="0" pos="120 72 15 200" min="0"
588  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
589  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
590  <SLIDER name="new slider" id="70c97ed7aec875e7" memberName="slider6"
591  virtualName="" explicitFocusOrder="0" pos="88 72 15 200" min="0"
592  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
593  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
594  <SLIDER name="new slider" id="4007e7b4aeb1e2e9" memberName="slider7"
595  virtualName="" explicitFocusOrder="0" pos="104 72 15 200" min="0"
596  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
597  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
598  <SLIDER name="new slider" id="9eeaf6c9120eff18" memberName="slider8"
599  virtualName="" explicitFocusOrder="0" pos="136 72 15 200" min="0"
600  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
601  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
602  <SLIDER name="new slider" id="37a78729e4bf4bea" memberName="slider9"
603  virtualName="" explicitFocusOrder="0" pos="192 72 15 200" min="0"
604  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
605  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
606  <SLIDER name="new slider" id="86eadd5a7dcff461" memberName="slider10"
607  virtualName="" explicitFocusOrder="0" pos="160 72 15 200" min="0"
608  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
609  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
610  <SLIDER name="new slider" id="a3dd1ae9bb711f8e" memberName="slider11"
611  virtualName="" explicitFocusOrder="0" pos="176 72 15 200" min="0"
612  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
613  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
614  <SLIDER name="new slider" id="fa3a7a031e1775d3" memberName="slider12"
615  virtualName="" explicitFocusOrder="0" pos="208 72 15 200" min="0"
616  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
617  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
618  <SLIDER name="new slider" id="2ca01a378ce7c7cf" memberName="slider13"
619  virtualName="" explicitFocusOrder="0" pos="264 72 15 200" min="0"
620  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
621  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
622  <SLIDER name="new slider" id="5d0b87ba2e763d14" memberName="slider14"
623  virtualName="" explicitFocusOrder="0" pos="232 72 15 200" min="0"
624  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
625  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
626  <SLIDER name="new slider" id="32bf29c8f48923e0" memberName="slider15"
627  virtualName="" explicitFocusOrder="0" pos="248 72 15 200" min="0"
628  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
629  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
630  <SLIDER name="new slider" id="c8f1ca06c0d507e7" memberName="slider16"
631  virtualName="" explicitFocusOrder="0" pos="280 72 15 200" min="0"
632  max="127" int="0" style="LinearVertical" textBoxPos="NoTextBox"
633  textBoxEditable="0" textBoxWidth="0" textBoxHeight="20" skewFactor="1"/>
634  <LABEL name="new label" id="546511be0f798420" memberName="label2" virtualName=""
635  explicitFocusOrder="0" pos="24 24 208 24" edTextCol="ff000000"
636  edBkgCol="0" labelText="CSL 5.0 MIDI Faders" editableSingleClick="0"
637  editableDoubleClick="0" focusDiscardsChanges="0" fontname="Default font"
638  fontsize="24" bold="0" italic="0" justification="33"/>
639 </JUCER_COMPONENT>
640 
641 END_JUCER_METADATA
642 */
643 #endif
void logMsg(const char *format,...)
These are the public logging messages.
Definition: CGestalt.cpp:292
AudioDeviceManager * gAudioDeviceManager
void *(* ThreadFunc)(void *)
This is the CSL_AbstComponent JUCE wrapper for the CSL demos.
bool sleepMsec(float dur)
Definition: CGestalt.cpp:372
virtual void clear()
stop MIDI stream
Definition: MIDIIOJ.cpp:102
unsigned getVelocity()
Definition: MIDIIOJ.cpp:32
AdditiveInstrument.h – Sum-of-sines synthesis instrument class.
Definition: Accessor.h:17
virtual void audioDeviceStopped()
void pullInput(Buffer &outBuffer, SampleBuffer out=0)
get a buffer from the CSL graph
Definition: CSL_Core.cpp:1425
void paint(Graphics &g)
std::vector< Slider * > sliders
list of my 16 sliders
char ** argVals
MIDIIn class is-a MidiInputCallback too, and an "input-ready" flag.
Definition: MIDIIOJ.h:130
void update(void *arg)
MIDI observer update method.
void playSineMixer()
Test mixer – really slow additive synthesis.
virtual void open()
Definition: CSL_Core.h:759
GThread takes a CSL test function and runs it.
void buttonClicked(Button *buttonThatWasClicked)
unsigned argCnt
void setSize(unsigned numChannels, unsigned numFrames)
Definition: CSL_Core.cpp:75
SampleBufferVector mBuffers
the storage vector – pointers to (SampleBuffer) buffers
Definition: CSL_Core.h:182
UnitGenerator * mGraph
the root of my client DSP graph, often a mixer or panner
Definition: CSL_Core.h:777
virtual void audioDeviceAboutToStart(AudioIODevice *device)
const char * what()
void VoidFcnPtrN(void)
the truly void fcn pointer
Definition: CSL_Types.h:222
virtual void start()
Definition: CSL_Core.h:761
float fRandM(float minV, float maxV)
min - max (min/max)
Definition: CGestalt.cpp:426
IO – the abstract I/O scheduling class; subclasses interface to specific I/O APIs.
Definition: CSL_Core.h:752
std::vector< unsigned > nextVals
list of my 16 update values
TextButton * clearButton
#define Osc
Definition: CSL_Types.h:169
Component * createCSLComponent()
virtual void audioDeviceIOCallback(const float **inputChannelData, int totalNumInputChannels, float **outputChannelData, int totalNumOutputChannels, int numSamples)
#define DEFAULT_MIDI_IN
Definition: CSL_Types.h:158
bool sleepSec(float dur)
Definition: CGestalt.cpp:379
VoidFcnPtrN * gFcn
IO * theIO
unsigned offset
what # is fader 0?
unsigned getNote()
Definition: MIDIIOJ.cpp:31
virtual void close()
open/close start/stop methods
Definition: CSL_Core.h:760
std::vector< unsigned > values
list of my 16 current values
void setRoot(UnitGenerator &root)
set/clear my graph root generator
Definition: CSL_Core.cpp:1405
TextButton * quitButton
Mixer – The n-input m-channel mixer class.
Definition: Mixer.h:21
CMIDIMessage class (mapped to juce::MidiMessage)
Definition: MIDIIOJ.h:46
virtual void open(int deviceID)
open a device
Definition: MIDIIOJ.cpp:218
void clearRoot()
Definition: CSL_Core.cpp:1410
The CSL mono-to-stereo L/R panner class.
Definition: Mixer.h:66
Label * gCPULabel
void addInput(UnitGenerator &inp)
Definition: Mixer.cpp:43
bool playing
state flags
juce_UseDebuggingNewOperator csl::MIDIIn * mIn
MIDI input.
virtual void stop()
Definition: CSL_Core.h:762
void sliderValueChanged(Slider *sliderThatWasMoved)
bool isControlChange()
Definition: MIDIIOJ.cpp:24
Base class of CSL exceptions (written upper-case). Has a string message.