72 addAndMakeVisible (playButton =
new TextButton (T(
"playNote")));
73 playButton->setButtonText (T(
"Play Resynth"));
74 playButton->addButtonListener (
this);
76 addAndMakeVisible (quitButton =
new TextButton (T(
"quitAction")));
77 quitButton->setButtonText (T(
"Quit"));
78 quitButton->addButtonListener (
this);
81 oscilloscope->setName (T(
"new component"));
83 addAndMakeVisible (label =
new Label (T(
"CSL test"),
84 T(
"CSL Spectral Processing")));
85 label->setFont (Font (Font::getDefaultSerifFontName(), 24.0000f, Font::bold));
86 label->setJustificationType (Justification::centredLeft);
87 label->setEditable (
false,
false,
false);
88 label->setColour (Label::textColourId, Colour (0xff2013da));
89 label->setColour (TextEditor::textColourId, Colours::black);
90 label->setColour (TextEditor::backgroundColourId, Colour (0x0));
93 spectrogram->setName (T(
"new component"));
95 addAndMakeVisible (offsetSlider =
new Slider (T(
"new slider")));
96 offsetSlider->setRange (0, 1, 0);
97 offsetSlider->setSliderStyle (Slider::LinearHorizontal);
98 offsetSlider->setTextBoxStyle (Slider::NoTextBox,
true, 80, 20);
99 offsetSlider->addListener (
this);
101 addAndMakeVisible (loadButton =
new TextButton (T(
"new button")));
102 loadButton->setButtonText (T(
"File"));
103 loadButton->addButtonListener (
this);
105 addAndMakeVisible (analyzeButton =
new TextButton (T(
"new button")));
106 analyzeButton->setButtonText (T(
"Analyze"));
107 analyzeButton->addButtonListener (
this);
109 addAndMakeVisible (filterButton =
new TextButton (T(
"new button")));
110 filterButton->setButtonText (T(
"Apply Filter"));
111 filterButton->addButtonListener (
this);
113 addAndMakeVisible (playSource =
new TextButton (T(
"playSource")));
114 playSource->setButtonText (T(
"Play Source"));
115 playSource->addButtonListener (
this);
117 addAndMakeVisible (fftLenCombo =
new ComboBox (T(
"new combo box")));
118 fftLenCombo->setEditableText (
true);
119 fftLenCombo->setJustificationType (Justification::centredLeft);
120 fftLenCombo->setTextWhenNothingSelected (String::empty);
121 fftLenCombo->setTextWhenNoChoicesAvailable (T(
"(no choices)"));
122 fftLenCombo->addItem (T(
"128"), 1);
123 fftLenCombo->addItem (T(
"256"), 2);
124 fftLenCombo->addItem (T(
"512"), 3);
125 fftLenCombo->addItem (T(
"1024"), 4);
126 fftLenCombo->addItem (T(
"2048"), 5);
127 fftLenCombo->addItem (T(
"4096"), 6);
128 fftLenCombo->addItem (T(
"8192"), 7);
129 fftLenCombo->addListener (
this);
131 addAndMakeVisible (winCombo =
new ComboBox (T(
"new combo box")));
132 winCombo->setEditableText (
false);
133 winCombo->setJustificationType (Justification::centredLeft);
134 winCombo->setTextWhenNothingSelected (String::empty);
135 winCombo->setTextWhenNoChoicesAvailable (T(
"(no choices)"));
136 winCombo->addItem (T(
"Rect"), 1);
137 winCombo->addItem (T(
"Tri"), 2);
138 winCombo->addItem (T(
"Hanning"), 3);
139 winCombo->addItem (T(
"Hamming"), 4);
140 winCombo->addListener (
this);
142 addAndMakeVisible (label2 =
new Label (T(
"new label"),
144 label2->setFont (Font (15.0000f, Font::plain));
145 label2->setJustificationType (Justification::centredLeft);
146 label2->setEditable (
false,
false,
false);
147 label2->setColour (TextEditor::textColourId, Colours::black);
148 label2->setColour (TextEditor::backgroundColourId, Colour (0x0));
150 addAndMakeVisible (label3 =
new Label (T(
"new label"),
152 label3->setFont (Font (15.0000f, Font::plain));
153 label3->setJustificationType (Justification::centredLeft);
154 label3->setEditable (
false,
false,
false);
155 label3->setColour (TextEditor::textColourId, Colours::black);
156 label3->setColour (TextEditor::backgroundColourId, Colour (0x0));
158 addAndMakeVisible (label4 =
new Label (T(
"new label"),
160 label4->setFont (Font (15.0000f, Font::plain));
161 label4->setJustificationType (Justification::centredLeft);
162 label4->setEditable (
false,
false,
false);
163 label4->setColour (TextEditor::textColourId, Colours::black);
164 label4->setColour (TextEditor::backgroundColourId, Colour (0x0));
166 addAndMakeVisible (hiPassSlider =
new Slider (T(
"new slider")));
167 hiPassSlider->setRange (0, 10000, 0);
168 hiPassSlider->setSliderStyle (Slider::LinearHorizontal);
169 hiPassSlider->setTextBoxStyle (Slider::TextBoxLeft,
false, 80, 20);
170 hiPassSlider->addListener (
this);
172 addAndMakeVisible (label5 =
new Label (T(
"new label"),
174 label5->setFont (Font (15.0000f, Font::plain));
175 label5->setJustificationType (Justification::centredLeft);
176 label5->setEditable (
false,
false,
false);
177 label5->setColour (TextEditor::textColourId, Colours::black);
178 label5->setColour (TextEditor::backgroundColourId, Colour (0x0));
180 addAndMakeVisible (loPassSlider =
new Slider (T(
"new slider")));
181 loPassSlider->setRange (0, 10000, 0);
182 loPassSlider->setSliderStyle (Slider::LinearHorizontal);
183 loPassSlider->setTextBoxStyle (Slider::TextBoxLeft,
false, 80, 20);
184 loPassSlider->addListener (
this);
186 addAndMakeVisible (label6 =
new Label (T(
"new label"),
188 label6->setFont (Font (15.0000f, Font::plain));
189 label6->setJustificationType (Justification::centredLeft);
190 label6->setEditable (
false,
false,
false);
191 label6->setColour (TextEditor::textColourId, Colours::black);
192 label6->setColour (TextEditor::backgroundColourId, Colour (0x0));
194 addAndMakeVisible (thresholdSlider =
new Slider (T(
"new slider")));
195 thresholdSlider->setRange (0, 1, 0);
196 thresholdSlider->setSliderStyle (Slider::LinearHorizontal);
197 thresholdSlider->setTextBoxStyle (Slider::TextBoxLeft,
false, 80, 20);
198 thresholdSlider->addListener (
this);
200 addAndMakeVisible (scaleCombo =
new ComboBox (T(
"new combo box")));
201 scaleCombo->setEditableText (
true);
202 scaleCombo->setJustificationType (Justification::centredLeft);
203 scaleCombo->setTextWhenNothingSelected (String::empty);
204 scaleCombo->setTextWhenNoChoicesAvailable (T(
"(no choices)"));
205 scaleCombo->addItem (T(
"Lin"), 1);
206 scaleCombo->addItem (T(
"Log"), 2);
207 scaleCombo->addListener (
this);
209 addAndMakeVisible (displayCombo =
new ComboBox (T(
"new combo box")));
210 displayCombo->setEditableText (
false);
211 displayCombo->setJustificationType (Justification::centredLeft);
212 displayCombo->setTextWhenNothingSelected (String::empty);
213 displayCombo->setTextWhenNoChoicesAvailable (T(
"(no choices)"));
214 displayCombo->addItem (T(
"Spectrum"), 1);
215 displayCombo->addItem (T(
"Spectrogram"), 2);
216 displayCombo->addListener (
this);
218 addAndMakeVisible (label7 =
new Label (T(
"new label"),
220 label7->setFont (Font (15.0000f, Font::plain));
221 label7->setJustificationType (Justification::centredLeft);
222 label7->setEditable (
false,
false,
false);
223 label7->setColour (TextEditor::textColourId, Colours::black);
224 label7->setColour (TextEditor::backgroundColourId, Colour (0x0));
226 addAndMakeVisible (label8 =
new Label (T(
"new label"),
228 label8->setFont (Font (15.0000f, Font::plain));
229 label8->setJustificationType (Justification::centredLeft);
230 label8->setEditable (
false,
false,
false);
231 label8->setColour (TextEditor::textColourId, Colours::black);
232 label8->setColour (TextEditor::backgroundColourId, Colour (0x0));
234 addAndMakeVisible (overlapCombo =
new ComboBox (T(
"new combo box")));
235 overlapCombo->setEditableText (
false);
236 overlapCombo->setJustificationType (Justification::centredLeft);
237 overlapCombo->setTextWhenNothingSelected (String::empty);
238 overlapCombo->setTextWhenNoChoicesAvailable (T(
"(no choices)"));
239 overlapCombo->addItem (T(
"8"), 1);
240 overlapCombo->addItem (T(
"4"), 2);
241 overlapCombo->addItem (T(
"2"), 3);
242 overlapCombo->addItem (T(
"1"), 4);
243 overlapCombo->addItem (T(
"0.5"), 5);
244 overlapCombo->addItem (T(
"0.25"), 6);
245 overlapCombo->addListener (
this);
247 addAndMakeVisible (label9 =
new Label (T(
"new label"),
249 label9->setFont (Font (15.0000f, Font::plain));
250 label9->setJustificationType (Justification::centredLeft);
251 label9->setEditable (
false,
false,
false);
252 label9->setColour (TextEditor::textColourId, Colours::black);
253 label9->setColour (TextEditor::backgroundColourId, Colour (0x0));
255 addAndMakeVisible (label10 =
new Label (T(
"new label"),
257 label10->setFont (Font (15.0000f, Font::plain));
258 label10->setJustificationType (Justification::centredLeft);
259 label10->setEditable (
false,
false,
false);
260 label10->setColour (TextEditor::textColourId, Colours::black);
261 label10->setColour (TextEditor::backgroundColourId, Colour (0x0));
263 addAndMakeVisible (timeSlider =
new Slider (T(
"new slider")));
264 timeSlider->setRange (0.1, 10, 0);
265 timeSlider->setSliderStyle (Slider::LinearHorizontal);
266 timeSlider->setTextBoxStyle (Slider::TextBoxLeft,
false, 80, 20);
267 timeSlider->addListener (
this);
269 addAndMakeVisible (label11 =
new Label (T(
"new label"),
271 label11->setFont (Font (15.0000f, Font::plain));
272 label11->setJustificationType (Justification::centredLeft);
273 label11->setEditable (
false,
false,
false);
274 label11->setColour (TextEditor::textColourId, Colours::black);
275 label11->setColour (TextEditor::backgroundColourId, Colour (0x0));
277 addAndMakeVisible (pitchSlider =
new Slider (T(
"new slider")));
278 pitchSlider->setRange (0.1, 10, 0);
279 pitchSlider->setSliderStyle (Slider::LinearHorizontal);
280 pitchSlider->setTextBoxStyle (Slider::TextBoxLeft,
false, 80, 20);
281 pitchSlider->addListener (
this);
283 addAndMakeVisible (fileInfo =
new Label (T(
"new label"),
285 fileInfo->setFont (Font (15.0000f, Font::plain));
286 fileInfo->setJustificationType (Justification::centredLeft);
287 fileInfo->setEditable (
false,
false,
false);
288 fileInfo->setColour (TextEditor::textColourId, Colours::black);
289 fileInfo->setColour (TextEditor::backgroundColourId, Colour (0x0));
294 oscilloscope->initialise(0, 0, 0,
false);
295 spectrogram->initialise(0, 0, 0,
false);
314 fftLenCombo->setSelectedItemIndex(3);
315 winCombo->setSelectedItemIndex(2);
316 scaleCombo->setSelectedItemIndex(0);
317 displayCombo->setSelectedItemIndex(0);
318 overlapCombo->setSelectedItemIndex(2);
320 offsetSlider->setValue(0.0);
321 hiPassSlider->setValue(0.0);
322 loPassSlider->setValue(10000.0);
323 thresholdSlider->setValue(1.0);
324 timeSlider->setValue(1.0);
325 pitchSlider->setValue(1.0);
326 fileInfo->setText(
"No File",
true);
341 deleteAndZero (
label);
380 g.fillAll (Colour (0xffebd89b));
391 label->setBounds (8, 568, 240, 24);
399 winCombo->setBounds (232, 204, 104, 24);
400 label2->setBounds (168, 204, 63, 24);
401 label3->setBounds (384, 504, 64, 24);
402 label4->setBounds (8, 204, 63, 24);
404 label5->setBounds (384, 536, 63, 24);
406 label6->setBounds (384, 568, 72, 24);
410 label7->setBounds (176, 456, 63, 24);
411 label8->setBounds (16, 456, 63, 24);
413 label9->setBounds (344, 204, 63, 24);
414 label10->setBounds (8, 504, 72, 24);
416 label11->setBounds (8, 536, 72, 24);
418 fileInfo->setBounds (64, 8, 520, 24);
444 JUCEApplication::quit();
453 FileChooser chooser (T(
"Choose file to open"),File::nonexistent,
"*",
true);
455 if ( ! chooser.browseForFileToOpen()) {
459 inFile = chooser.getResult();
464 mSndFile =
new SoundFile(inFile.getFullPathName().toUTF8());
475 if (
mSRate != CGestalt::frameRate())
476 CGestalt::setFrameRate(
mSRate);
479 sprintf(msg,
"\"%s\" - %d Hz, %d ch, %d fr, %5.2f sec",
482 printf(
"\nLoad file: \"%s\" - %d Hz, %d ch, %d fr, %5.2f sec, %d windows\n\n",
487 if (
mFFTLen != CGestalt::blockSize())
488 CGestalt::setBlockSize(
mFFTLen);
492 inPtr[0] =
mSndFile->mSampleBuffer.mBuffers[0];
508 if (
mFFTLen != CGestalt::blockSize())
509 CGestalt::setBlockSize(
mFFTLen);
521 for (
unsigned i = 0; i <
mNumWins; i++) {
523 anFFT.nextBuffer(tempBuffer);
524 inPtr[0] = tempBuffer.mBuffers[0];
539 printf(
"\nSynthesize: %d windows, FFTLen = %d\n", mNumWins,
mFFTLen);
548 for (
unsigned i = 0; i <
mNumWins; i++) {
551 for (
unsigned j = 0; j <
mFFTLen / 2; j++)
597 float val = (float)
offsetSlider->getValue() * (float) (mNumWins - 1);
644 else if (comboBoxThatHasChanged ==
winCombo)
649 else if (comboBoxThatHasChanged ==
scaleCombo)
653 if (
scaleCombo->getSelectedItemIndex() == 0) {
655 printf(
"Select linear display (%d)\n",
scaleCombo->getSelectedItemIndex());
658 printf(
"Select log display\n");
670 printf(
"Select spectral slice display (%d)\n",
scaleCombo->getSelectedItemIndex());
673 printf(
"Select spectrogram display\n");
703 int fftTable[] = { 128, 256, 512, 1024, 2048, 4096, 8192 };
704 return(fftTable[
fftLenCombo->getSelectedItemIndex()]);
708 int oTable[] = { 8.0, 4.0, 2.0, 1.0, 0.5, 0.25 };
void setBin(int binNumber, float realPart, float imagPart)
void logMsg(const char *format,...)
These are the public logging messages.
void nextBuffer(Buffer &outputBuffer)
get a buffer of Frames – this is the core CSL "pull" function; the given buffer can be written into...
bool mAreBuffersAllocated
are the buffers allocated?
AdditiveInstrument.h – Sum-of-sines synthesis instrument class.
void comboBoxChanged(ComboBox *comboBoxThatHasChanged) override
TextButton * filterButton
virtual void audioDeviceIOCallback(const float **inputChannelData, int totalNumInputChannels, float **outputChannelData, int totalNumOutputChannels, int numSamples)
void freeBuffers()
fcn to free them
void setSize(unsigned numChannels, unsigned numFrames)
SampleBufferVector mBuffers
the storage vector – pointers to (SampleBuffer) buffers
#define CSL_NAME_LEN
default string length
std::unique_ptr< Label > label
csl::SoundFile * mOutFile
std::unique_ptr< TextButton > playButton
Forward FFT unit generator is an Effect because it handles an input It puts spectral frames in the ou...
AudioWaveformDisplay * oscilloscope
void buttonClicked(Button *buttonThatWasClicked) override
void setRoot(UnitGenerator &root)
set/clear my graph root generator
Buffer – the multi-channel sample buffer class (passed around between generators and IO guys)...
csl::SoundFile * mSndFile
std::unique_ptr< TextButton > quitButton
void paint(Graphics &g) override
void allocateBuffers()
fcn to malloc storage buffers
Component * createCSLComponent()
void sliderValueChanged(Slider *sliderThatWasMoved) override
AudioSpectrumDisplay * spectrogram
Base class of CSL exceptions (written upper-case). Has a string message.
TextButton * analyzeButton