Skip to content

Commit d8a503b

Browse files
committed
Click: Added a test
1 parent ad916ad commit d8a503b

File tree

4 files changed

+65
-10
lines changed

4 files changed

+65
-10
lines changed

modules/tracktion_core/tracktion_TestConfig.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#define ENGINE_UNIT_TESTS_AUTOMATION 1
2222
#define ENGINE_UNIT_TESTS_AUTOMATION_CURVE_LIST 1
2323
#define ENGINE_UNIT_TESTS_AUX_SEND 1
24+
#define ENGINE_UNIT_TESTS_CLICKNODE 1
2425
#define ENGINE_UNIT_TESTS_CLIPBOARD 1
2526
#define ENGINE_UNIT_TESTS_CLIPSLOT 1
2627
#define ENGINE_UNIT_TESTS_CONSTRAINED_CACHED_VALUE 1
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
,--. ,--. ,--. ,--.
3+
,-' '-.,--.--.,--,--.,---.| |,-.,-' '-.`--' ,---. ,--,--, Copyright 2024
4+
'-. .-'| .--' ,-. | .--'| /'-. .-',--.| .-. || \ Tracktion Software
5+
| | | | \ '-' \ `--.| \ \ | | | |' '-' '| || | Corporation
6+
`---' `--' `--`--'`---'`--'`--' `---' `--' `---' `--''--' www.tracktion.com
7+
8+
Tracktion Engine uses a GPL/commercial licence - see LICENCE.md for details.
9+
*/
10+
11+
#if TRACKTION_UNIT_TESTS && ENGINE_UNIT_TESTS_CLICKNODE
12+
13+
#include <tracktion_engine/../3rd_party/doctest/tracktion_doctest.hpp>
14+
#include <tracktion_engine/testing/tracktion_EnginePlayer.h>
15+
#include <tracktion_engine/utilities/tracktion_TestUtilities.h>
16+
17+
namespace tracktion::inline engine
18+
{
19+
TEST_SUITE ("tracktion_engine")
20+
{
21+
TEST_CASE("ClickNode")
22+
{
23+
auto& engine = *Engine::getEngines()[0];
24+
25+
for (auto srbs : std::array<SampleRateAndBlockSize, 4>{{ { 44100.0, 2048 },
26+
{ 44100.0, 512 },
27+
{ 44100.0, 64 },
28+
{ 96000.0, 2048 } }})
29+
{
30+
HostedAudioDeviceInterface::Parameters params { .sampleRate = srbs.sampleRate, .blockSize = srbs.blockSize, .inputChannels = 0, .outputChannels = 1 };
31+
test_utilities::EnginePlayer player (engine, params);
32+
33+
auto edit = engine::test_utilities::createTestEdit (engine, 1, Edit::EditRole::forEditing);
34+
auto& tc = edit->getTransport();
35+
36+
edit->clickTrackEnabled = true;
37+
edit->setClickTrackVolume (1.0f);
38+
CHECK_EQ (edit->clickTrackGain.get(), 1.0f);
39+
tc.play (false);
40+
41+
const auto totalNumSamples = toSamples (60_td, params.sampleRate);
42+
auto resultBuffer = player.process (totalNumSamples);
43+
44+
auto f = graph::test_utilities::writeToTemporaryFile<juce::WavAudioFormat> (toBufferView (resultBuffer), params.sampleRate);
45+
46+
CHECK_GT (resultBuffer.getRMSLevel (0, 0, resultBuffer.getNumSamples()), 0.01f);
47+
CHECK_GT (resultBuffer.getMagnitude (0, 0, resultBuffer.getNumSamples()), 0.5f);
48+
}
49+
}
50+
}
51+
} // namespace tracktion::inline engine
52+
53+
#endif

modules/tracktion_engine/playback/graph/tracktion_LoopingMidiNode.test.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class LoopingMidiNodeTests : public juce::UnitTest
5252
private:
5353
//==============================================================================
5454
//==============================================================================
55-
void runMidiTests (test_utilities::TestSetup ts)
55+
void runMidiTests (graph::test_utilities::TestSetup ts)
5656
{
5757
beginTest ("Setup");
5858

@@ -62,7 +62,7 @@ class LoopingMidiNodeTests : public juce::UnitTest
6262

6363
auto r = ts.random;
6464
const auto duration = edit->tempoSequence.toTime ({ 4, 0_bd });
65-
const auto seq = test_utilities::createRandomMidiMessageSequence (duration.inSeconds(), r);
65+
const auto seq = graph::test_utilities::createRandomMidiMessageSequence (duration.inSeconds(), r);
6666

6767
// Add sequnce and loop randomly in the first and last of the 4 bars (16 beats)
6868
auto mc = getAudioTracks (*edit)[0]->insertMIDIClip ({ 0_tp, duration }, nullptr);
@@ -96,7 +96,7 @@ class LoopingMidiNodeTests : public juce::UnitTest
9696
testMidiClip (*mc, ts);
9797
}
9898

99-
void runStuckNotesTests (test_utilities::TestSetup ts, bool usesProxy, int numLoopIterations)
99+
void runStuckNotesTests (graph::test_utilities::TestSetup ts, bool usesProxy, int numLoopIterations)
100100
{
101101
beginTest ("Stuck notes");
102102

@@ -343,7 +343,7 @@ class LoopingMidiNodeTests : public juce::UnitTest
343343
expect (allEventsWithinRange, "Not all events within the expected range");
344344
}
345345

346-
void runOffsetTests (test_utilities::TestSetup ts)
346+
void runOffsetTests (graph::test_utilities::TestSetup ts)
347347
{
348348
beginTest ("MIDI clip with offset");
349349

@@ -364,13 +364,13 @@ class LoopingMidiNodeTests : public juce::UnitTest
364364
sequence.addNote (49, 0_bp, 1_bd, 127, 0, nullptr);
365365
sequence.addNote (50, 1_bp, 1_bd, 127, 0, nullptr);
366366

367-
auto seq = test_utilities::stripNonNoteOnOffMessages (renderMidiClip (*mc, ts, { 0_tp, mc->getPosition().getEnd() }));
367+
auto seq = graph::test_utilities::stripNonNoteOnOffMessages (renderMidiClip (*mc, ts, { 0_tp, mc->getPosition().getEnd() }));
368368
expectEquals (seq.getNumEvents(), 2);
369369

370370
testMidiClip (*mc, ts);
371371
}
372372

373-
void testMidiClip (MidiClip& mc, test_utilities::TestSetup ts)
373+
void testMidiClip (MidiClip& mc, graph::test_utilities::TestSetup ts)
374374
{
375375
auto renderOpts = RenderOptions::forClipRender ({ &mc }, true);
376376
renderOpts->setFormat (RenderOptions::midi);
@@ -391,12 +391,12 @@ class LoopingMidiNodeTests : public juce::UnitTest
391391
params.destFile = t2.getFile();
392392
const auto seqWithoutProxyFile = Renderer::renderToFile ("non-proxy", params);
393393

394-
test_utilities::expectMidiMessageSequence (*this,
395-
test_utilities::stripMetaEvents (getSeqFromFile (seqWithoutProxyFile)),
396-
test_utilities::stripMetaEvents (getSeqFromFile (seqWithProxyFile)));
394+
graph::test_utilities::expectMidiMessageSequence (*this,
395+
graph::test_utilities::stripMetaEvents (getSeqFromFile (seqWithoutProxyFile)),
396+
graph::test_utilities::stripMetaEvents (getSeqFromFile (seqWithProxyFile)));
397397
}
398398

399-
juce::MidiMessageSequence renderMidiClip (MidiClip& mc, test_utilities::TestSetup ts,
399+
juce::MidiMessageSequence renderMidiClip (MidiClip& mc, graph::test_utilities::TestSetup ts,
400400
TimeRange rangeToRender)
401401
{
402402
auto renderOpts = RenderOptions::forClipRender ({ &mc }, true);

modules/tracktion_engine/tracktion_engine_playback.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ using namespace std::literals;
218218
#include "playback/graph/tracktion_ArrangerLauncherSwitchingNode.cpp"
219219
#include "playback/graph/tracktion_AuxSendNode.cpp"
220220
#include "playback/graph/tracktion_ClickNode.cpp"
221+
#include "playback/graph/tracktion_ClickNode.test.cpp"
221222
#include "playback/graph/tracktion_CombiningNode.cpp"
222223
#include "playback/graph/tracktion_ContainerClipNode.cpp"
223224
#include "playback/graph/tracktion_DynamicOffsetNode.cpp"

0 commit comments

Comments
 (0)