Skip to content

Commit 644d6c2

Browse files
committed
enhanced sound device control and settings, added samplerate and buffersize selection
1 parent 238c86a commit 644d6c2

20 files changed

+172
-68
lines changed

src/objects/audio_analysis/AudioAnalyzer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ void AudioAnalyzer::drawObjectNodeGui( ImGuiEx::NodeCanvas& _nodeCanvas ){
193193
if( _nodeCanvas.BeginNodeContent(ImGuiExNodeView_Visualise) ){
194194

195195
// draw waveform
196-
ImGuiEx::drawWaveform(_nodeCanvas.getNodeDrawList(), ImVec2(ImGui::GetWindowSize().x,ImGui::GetWindowSize().y*0.5f), plot_data, 1024, 1.3f, IM_COL32(255,255,120,255), this->scaleFactor);
196+
ImGuiEx::drawWaveform(_nodeCanvas.getNodeDrawList(), ImVec2(ImGui::GetWindowSize().x,ImGui::GetWindowSize().y*0.5f), plot_data, bufferSize, 1.3f, IM_COL32(255,255,120,255), this->scaleFactor);
197197

198198
// draw signal RMS amplitude
199199
_nodeCanvas.getNodeDrawList()->AddRectFilled(ImGui::GetWindowPos()+ImVec2(0,ImGui::GetWindowSize().y*0.5f),ImGui::GetWindowPos()+ImVec2(ImGui::GetWindowSize().x,ImGui::GetWindowSize().y *0.5f * (1.0f - ofClamp(static_cast<ofSoundBuffer *>(_inletParams[0])->getRMSAmplitude()*audioInputLevel,0.0,1.0))),IM_COL32(255,255,120,12));
@@ -337,6 +337,7 @@ void AudioAnalyzer::loadAudioSettings(){
337337

338338
_outletParams[0] = new vector<float>();
339339
// SIGNAL BUFFER
340+
plot_data = new float[bufferSize];
340341
for(int i=0;i<bufferSize;i++){
341342
static_cast<vector<float> *>(_outletParams[0])->push_back(0.0f);
342343
plot_data[i] = 0.0f;

src/objects/audio_analysis/AudioAnalyzer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class AudioAnalyzer : public PatchObject {
8585
ofxFft *fft;
8686
ofxBTrack *beatTrack;
8787

88-
float plot_data[1024];
88+
float *plot_data;
8989

9090
float *spectrum;
9191
float *melBins;

src/objects/audio_analysis/BPMExtractor.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,17 @@ BPMExtractor::BPMExtractor() : PatchObject("bpm extractor"){
5151

5252
this->initInletsState();
5353

54-
bufferSize = MOSAIC_DEFAULT_BUFFER_SIZE;
55-
spectrumSize = (bufferSize/2) + 1;
54+
ofxXmlSettings XML;
5655

56+
if (XML.loadFile(patchFile)){
57+
if (XML.pushTag("settings")){
58+
bufferSize = XML.getValue("buffer_size",0);
59+
XML.popTag();
60+
}
61+
62+
}
63+
64+
spectrumSize = (bufferSize/2) + 1;
5765
arrayPosition = bufferSize + spectrumSize + MEL_SCALE_CRITICAL_BANDS + 1;
5866

5967
isNewConnection = false;

src/objects/audio_analysis/FftExtractor.cpp

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,25 @@ FftExtractor::FftExtractor() : PatchObject("fft extractor"){
4646

4747
this->initInletsState();
4848

49-
bufferSize = MOSAIC_DEFAULT_BUFFER_SIZE;
49+
ofxXmlSettings XML;
50+
51+
if (XML.loadFile(patchFile)){
52+
if (XML.pushTag("settings")){
53+
bufferSize = XML.getValue("buffer_size",0);
54+
XML.popTag();
55+
}
56+
57+
}
5058
spectrumSize = (bufferSize/2) + 1;
5159

52-
isNewConnection = false;
53-
isConnectionRight = false;
60+
multiplier = 1.0f;
5461

55-
this->width *= 2.0f;
62+
isNewConnection = false;
63+
isConnectionRight = false;
64+
65+
this->width *= 2.0f;
66+
67+
loaded = false;
5668

5769
}
5870

@@ -63,6 +75,8 @@ void FftExtractor::newObject(){
6375
this->addInlet(VP_LINK_ARRAY,"data");
6476

6577
this->addOutlet(VP_LINK_ARRAY,"fft");
78+
79+
this->setCustomVar(multiplier,"MULTIPLIER");
6680
}
6781

6882
//--------------------------------------------------------------
@@ -113,17 +127,24 @@ void FftExtractor::updateObjectContent(map<int,shared_ptr<PatchObject>> &patchOb
113127
if(this->inletsConnected[0] && !static_cast<vector<float> *>(_inletParams[0])->empty() && isConnectionRight){
114128
int index = 0;
115129
for(int i=bufferSize;i<bufferSize + spectrumSize;i++){
116-
static_cast<vector<float> *>(_outletParams[0])->at(index) = static_cast<vector<float> *>(_inletParams[0])->at(i);
130+
static_cast<vector<float> *>(_outletParams[0])->at(index) = static_cast<vector<float> *>(_inletParams[0])->at(i)*multiplier;
117131
index++;
118132
}
119133
}else if(this->inletsConnected[0] && !isConnectionRight){
120-
ofLog(OF_LOG_ERROR,"%s --> This object can receive data from audio analyzer object ONLY! Just reconnect it right!",this->getName().c_str());
134+
ofLog(OF_LOG_ERROR,"%s --> This object can receive data from audio analyzer, or file data, objects ONLY! Just reconnect it right!",this->getName().c_str());
135+
}
136+
137+
if(!loaded){
138+
loaded = true;
139+
multiplier = this->getCustomVar("MULTIPLIER");
121140
}
122141

123142
}
124143

125144
//--------------------------------------------------------------
126145
void FftExtractor::drawObjectContent(ofTrueTypeFont *font, shared_ptr<ofBaseGLRenderer>& glRenderer){
146+
unusedArgs(font,glRenderer);
147+
127148
ofSetColor(255);
128149
}
129150

@@ -162,14 +183,20 @@ void FftExtractor::drawObjectNodeGui( ImGuiEx::NodeCanvas& _nodeCanvas ){
162183

163184
//--------------------------------------------------------------
164185
void FftExtractor::drawObjectNodeConfig(){
186+
ImGui::Spacing();
187+
ImGui::PushItemWidth(224*scaleFactor);
188+
if(ImGui::SliderFloat("Multiplier",&multiplier,1.0f,100.0f)){
189+
this->setCustomVar(multiplier,"MULTIPLIER");
190+
}
191+
165192
ImGuiEx::ObjectInfo(
166193
"Extracts the FFT (Fast Fourier Transform) from the audio analysis data vector",
167194
"https://mosaic.d3cod3.org/reference.php?r=fft-extractor", scaleFactor);
168195
}
169196

170197
//--------------------------------------------------------------
171198
void FftExtractor::removeObjectContent(bool removeFileFromData){
172-
199+
unusedArgs(removeFileFromData);
173200
}
174201

175202
OBJECT_REGISTER( FftExtractor , "fft extractor", OFXVP_OBJECT_CAT_AUDIOANALYSIS)

src/objects/audio_analysis/FftExtractor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,16 @@ class FftExtractor : public PatchObject {
5454

5555
void removeObjectContent(bool removeFileFromData=false) override;
5656

57+
float multiplier;
5758

5859
int bufferSize;
5960
int spectrumSize;
6061

6162
bool isNewConnection;
6263
bool isConnectionRight;
6364

65+
bool loaded;
66+
6467
private:
6568

6669
OBJECT_FACTORY_PROPS

src/objects/audio_analysis/MelBandsExtractor.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,15 @@ MelBandsExtractor::MelBandsExtractor() : PatchObject("mel bands extractor"){
4646

4747
this->initInletsState();
4848

49-
bufferSize = MOSAIC_DEFAULT_BUFFER_SIZE;
49+
ofxXmlSettings XML;
50+
51+
if (XML.loadFile(patchFile)){
52+
if (XML.pushTag("settings")){
53+
bufferSize = XML.getValue("buffer_size",0);
54+
XML.popTag();
55+
}
56+
57+
}
5058
spectrumSize = (bufferSize/2) + 1;
5159

5260
isNewConnection = false;

src/objects/audio_analysis/PitchExtractor.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,15 @@ PitchExtractor::PitchExtractor() : PatchObject("pitch extractor"){
4747

4848
this->initInletsState();
4949

50-
bufferSize = MOSAIC_DEFAULT_BUFFER_SIZE;
50+
ofxXmlSettings XML;
51+
52+
if (XML.loadFile(patchFile)){
53+
if (XML.pushTag("settings")){
54+
bufferSize = XML.getValue("buffer_size",0);
55+
XML.popTag();
56+
}
57+
58+
}
5159
spectrumSize = (bufferSize/2) + 1;
5260

5361
arrayPosition = bufferSize + spectrumSize + MEL_SCALE_CRITICAL_BANDS;

src/objects/audio_analysis/RMSExtractor.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,15 @@ RMSExtractor::RMSExtractor() : PatchObject("rms extractor"){
4747

4848
this->initInletsState();
4949

50-
bufferSize = MOSAIC_DEFAULT_BUFFER_SIZE;
50+
ofxXmlSettings XML;
51+
52+
if (XML.loadFile(patchFile)){
53+
if (XML.pushTag("settings")){
54+
bufferSize = XML.getValue("buffer_size",0);
55+
XML.popTag();
56+
}
57+
58+
}
5159
spectrumSize = (bufferSize/2) + 1;
5260

5361
arrayPosition = bufferSize + spectrumSize + MEL_SCALE_CRITICAL_BANDS - 1;

src/objects/gui/moSignalViewer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ void moSignalViewer::drawObjectNodeGui( ImGuiEx::NodeCanvas& _nodeCanvas ){
123123
if( _nodeCanvas.BeginNodeContent(ImGuiExNodeView_Visualise) ){
124124

125125
// draw waveform
126-
ImGuiEx::drawWaveform(_nodeCanvas.getNodeDrawList(), ImGui::GetWindowSize(), plot_data, 1024, 1.3f, IM_COL32(255,255,120,255), this->scaleFactor);
126+
ImGuiEx::drawWaveform(_nodeCanvas.getNodeDrawList(), ImGui::GetWindowSize(), plot_data, bufferSize, 1.3f, IM_COL32(255,255,120,255), this->scaleFactor);
127127

128128
// draw signal RMS amplitude
129129
_nodeCanvas.getNodeDrawList()->AddRectFilled(ImGui::GetWindowPos()+ImVec2(0,ImGui::GetWindowSize().y),ImGui::GetWindowPos()+ImVec2(ImGui::GetWindowSize().x,ImGui::GetWindowSize().y * (1.0f - ofClamp(static_cast<ofSoundBuffer *>(_inletParams[0])->getRMSAmplitude(),0.0,1.0))),IM_COL32(255,255,120,12));
@@ -159,6 +159,7 @@ void moSignalViewer::loadAudioSettings(){
159159
sampleRate = XML.getValue("sample_rate_in",0);
160160
bufferSize = XML.getValue("buffer_size",0);
161161

162+
plot_data = new float[bufferSize];
162163
for(int i=0;i<bufferSize;i++){
163164
static_cast<vector<float> *>(_outletParams[2])->push_back(0.0f);
164165
plot_data[i] = 0.0f;

src/objects/gui/moSignalViewer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class moSignalViewer : public PatchObject {
5959
void audioInObject(ofSoundBuffer &inputBuffer) override;
6060
void audioOutObject(ofSoundBuffer &outBuffer) override;
6161

62-
float plot_data[1024];
62+
float *plot_data;
6363

6464
int bufferSize;
6565
int sampleRate;

0 commit comments

Comments
 (0)