Skip to content

Commit 72e47bf

Browse files
committed
Added StressTest
1 parent 2637514 commit 72e47bf

File tree

5 files changed

+223
-0
lines changed

5 files changed

+223
-0
lines changed

test/_audio/AudioTests/proj/vc2019/AudioTests.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<ClCompile Include="..\..\src\ParamTest.cpp" />
2828
<ClCompile Include="..\..\src\SamplePlayerTest.cpp" />
2929
<ClCompile Include="..\..\src\SpectralTest.cpp" />
30+
<ClCompile Include="..\..\src\StressTest.cpp" />
3031
<ClCompile Include="..\..\src\VoiceTest.cpp" />
3132
<ClCompile Include="..\..\src\WaveTableTest.cpp" />
3233
</ItemGroup>
@@ -41,6 +42,7 @@
4142
<ClInclude Include="..\..\src\ParamTest.h" />
4243
<ClInclude Include="..\..\src\SamplePlayerTest.h" />
4344
<ClInclude Include="..\..\src\SpectralTest.h" />
45+
<ClInclude Include="..\..\src\StressTest.h" />
4446
<ClInclude Include="..\..\src\VoiceTest.h" />
4547
<ClInclude Include="..\..\src\WaveTableTest.h" />
4648
</ItemGroup>

test/_audio/AudioTests/proj/vc2019/AudioTests.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
<ClCompile Include="..\..\src\VoiceTest.cpp">
4040
<Filter>src</Filter>
4141
</ClCompile>
42+
<ClCompile Include="..\..\src\StressTest.cpp">
43+
<Filter>src</Filter>
44+
</ClCompile>
4245
</ItemGroup>
4346
<ItemGroup>
4447
<ClInclude Include="..\..\src\Factory.h">
@@ -77,5 +80,8 @@
7780
<ClInclude Include="..\..\src\VoiceTest.h">
7881
<Filter>src</Filter>
7982
</ClInclude>
83+
<ClInclude Include="..\..\src\StressTest.h">
84+
<Filter>src</Filter>
85+
</ClInclude>
8086
</ItemGroup>
8187
</Project>

test/_audio/AudioTests/src/AudioTestsApp.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "SpectralTest.h"
1818
#include "WaveTableTest.h"
1919
#include "VoiceTest.h"
20+
#include "StressTest.h"
2021

2122
using namespace ci;
2223
using namespace std;
@@ -93,6 +94,7 @@ void AudioTestsApp::setup()
9394
mTestFactory.registerBuilder<SpectralTest>( "Spectral" );
9495
mTestFactory.registerBuilder<WaveTableTest>( "WaveTable" );
9596
mTestFactory.registerBuilder<VoiceTest>( "Voice" );
97+
mTestFactory.registerBuilder<StressTest>( "Stress" );
9698

9799
auto ctx = audio::master();
98100

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
#include "StressTest.h"
2+
3+
#include "cinder/app/App.h"
4+
#include "cinder/Rand.h"
5+
#include "cinder/CinderAssert.h"
6+
#include "cinder/Log.h"
7+
#include "cinder/CinderImGui.h"
8+
9+
#include "cinder/audio/Utilities.h"
10+
11+
using namespace ci;
12+
using namespace std;
13+
namespace im = ImGui;
14+
15+
StressTest::StressTest()
16+
{
17+
mSubTests = {
18+
"sine",
19+
"triangle",
20+
"osc sine",
21+
"osc sawtooth",
22+
"osc square",
23+
"osc triangle",
24+
};
25+
26+
auto ctx = audio::master();
27+
mGain = ctx->makeNode( new audio::GainNode );
28+
mGain->setValue( 0.1f );
29+
30+
mMonitor = audio::master()->makeNode( new audio::MonitorSpectralNode( audio::MonitorSpectralNode::Format().fftSize( 1024 ).windowSize( 2048 ) ) );
31+
mMonitor->setSmoothingFactor( 0.4f );
32+
33+
mGain >> mMonitor >> ctx->getOutput();
34+
35+
addGens();
36+
}
37+
38+
void StressTest::setupSubTest( const string &testName )
39+
{
40+
if( testName == "sine" )
41+
mSelectedGenType = SINE;
42+
else if( testName == "triangle" )
43+
mSelectedGenType = TRIANGLE;
44+
else if( testName == "osc sine" ) {
45+
mSelectedGenType = OSC_SINE;
46+
mWaveTable.reset();
47+
}
48+
else if( testName == "osc sawtooth" ) {
49+
mSelectedGenType = OSC_SAW;
50+
mWaveTable.reset();
51+
}
52+
else if( testName == "osc square" ) {
53+
mSelectedGenType = OSC_SQUARE;
54+
mWaveTable.reset();
55+
}
56+
else if( testName == "osc triangle" ) {
57+
mSelectedGenType = OSC_TRIANGLE;
58+
mWaveTable.reset();
59+
}
60+
}
61+
62+
void StressTest::addGens()
63+
{
64+
auto ctx = audio::master();
65+
66+
for( size_t i = 0; i < mAddIncr; i++ ) {
67+
auto gen = makeSelectedGenType();
68+
gen->setFreq( audio::midiToFreq( randInt( 40, 60 ) ) );
69+
70+
gen->connect( mGain );
71+
gen->enable();
72+
73+
mGenBank.push_back( gen );
74+
}
75+
}
76+
77+
void StressTest::removeGens()
78+
{
79+
for( size_t i = 0; i < mAddIncr; i++ ) {
80+
mGenBank.back()->disconnectAll();
81+
mGenBank.pop_back();
82+
}
83+
}
84+
85+
void StressTest::clearGens()
86+
{
87+
while( ! mGenBank.empty() ) {
88+
mGenBank.back()->disconnectAll();
89+
mGenBank.pop_back();
90+
}
91+
}
92+
93+
audio::GenNodeRef StressTest::makeSelectedGenType()
94+
{
95+
switch( mSelectedGenType ) {
96+
case SINE: return audio::master()->makeNode( new audio::GenSineNode );
97+
case TRIANGLE: return audio::master()->makeNode( new audio::GenTriangleNode );
98+
case OSC_SINE: return makeOsc( audio::WaveformType::SINE );
99+
case OSC_SAW: return makeOsc( audio::WaveformType::SAWTOOTH );
100+
case OSC_SQUARE: return makeOsc( audio::WaveformType::SQUARE );
101+
case OSC_TRIANGLE: return makeOsc( audio::WaveformType::TRIANGLE );
102+
default: CI_ASSERT_NOT_REACHABLE();
103+
}
104+
105+
return {};
106+
}
107+
108+
audio::GenNodeRef StressTest::makeOsc( audio::WaveformType type )
109+
{
110+
auto ctx = audio::master();
111+
auto result = ctx->makeNode( new audio::GenOscNode( type ) );
112+
113+
if( mWaveTable )
114+
result->setWaveTable( mWaveTable );
115+
else {
116+
ctx->initializeNode( result );
117+
118+
mWaveTable = result->getWaveTable();
119+
}
120+
121+
return result;
122+
}
123+
124+
void StressTest::draw()
125+
{
126+
if( ! mDrawingEnabled ) {
127+
return;
128+
}
129+
130+
const float padding = 10;
131+
const float scopeHeight = ( app::getWindowHeight() - padding * 3 ) / 2;
132+
133+
Rectf rect( padding, padding, app::getWindowWidth() - padding - 200, scopeHeight + padding );
134+
135+
drawAudioBuffer( mMonitor->getBuffer(), rect, true );
136+
137+
rect += vec2( 0, scopeHeight + padding );
138+
mSpectrumPlot.setBounds( rect );
139+
mSpectrumPlot.draw( mMonitor->getMagSpectrum() );
140+
141+
}
142+
143+
// -----------------------------------------------------------------------
144+
// UI
145+
// -----------------------------------------------------------------------
146+
147+
void StressTest::updateUI()
148+
{
149+
im::Text( "Gen count: %d", mGenBank.size() );
150+
151+
float gain = mGain->getValue();
152+
if( im::SliderFloat( "gain", &gain, 0, 1 ) ) {
153+
mGain->setValue( gain );
154+
}
155+
im::InputInt( "add incr", &mAddIncr, 1, 10 );
156+
if( im::Button( "add gens" ) ) {
157+
addGens();
158+
}
159+
im::SameLine();
160+
if( im::Button( "remove gens" ) ) {
161+
removeGens();
162+
}
163+
im::SameLine();
164+
if( im::Button( "clear" ) ) {
165+
clearGens();
166+
}
167+
168+
im::Checkbox( "draw waveforms", &mDrawingEnabled );
169+
170+
if( im::ListBox( "sub-tests", &mCurrentSubTest, mSubTests, mSubTests.size() ) ) {
171+
setupSubTest( mSubTests[mCurrentSubTest] );
172+
}
173+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#pragma once
2+
3+
#include "AudioTest.h"
4+
5+
#include "cinder/audio/GenNode.h"
6+
#include "cinder/audio/GainNode.h"
7+
#include "cinder/audio/MonitorNode.h"
8+
9+
#include "../../../../samples/_audio/common/AudioDrawUtils.h"
10+
11+
class StressTest : public AudioTest {
12+
public:
13+
StressTest();
14+
15+
void draw() override;
16+
void updateUI() override;
17+
18+
private:
19+
void addGens();
20+
void removeGens();
21+
void clearGens();
22+
23+
void setupSubTest( const std::string &testName );
24+
25+
ci::audio::GenNodeRef makeSelectedGenType();
26+
ci::audio::GenNodeRef makeOsc( ci::audio::WaveformType type );
27+
28+
ci::audio::GainNodeRef mGain;
29+
ci::audio::MonitorSpectralNodeRef mMonitor;
30+
ci::audio::WaveTable2dRef mWaveTable;
31+
std::vector<ci::audio::GenNodeRef> mGenBank;
32+
33+
SpectrumPlot mSpectrumPlot;
34+
35+
enum GenType { SINE, TRIANGLE, OSC_SINE, OSC_SAW, OSC_SQUARE, OSC_TRIANGLE };
36+
37+
bool mDrawingEnabled = true;
38+
int mAddIncr = 1;
39+
GenType mSelectedGenType = OSC_SQUARE;
40+
};

0 commit comments

Comments
 (0)