tracktion-engine 3.0-10-g034fdde4aa5
Tracktion Engine — High level data model for audio applications

« « « Anklang Documentation
Loading...
Searching...
No Matches
tracktion_PlayHeadState.cpp
Go to the documentation of this file.
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#pragma once
12
13
14namespace tracktion { inline namespace graph
15{
16
17#if GRAPH_UNIT_TESTS_PLAYHEADSTATE
18
19//==============================================================================
20//==============================================================================
21class PlayHeadStateTests : public juce::UnitTest
22{
23public:
24 PlayHeadStateTests()
25 : juce::UnitTest ("PlayHeadStateTests", "tracktion_graph")
26 {
27 }
28
29 void runTest() override
30 {
31 constexpr int64_t blockSize = 44'100;
32
33 beginTest ("Loop edges");
34 {
35 PlayHead playHead;
36 PlayHeadState playHeadState (playHead);
37
38 playHead.play ({ 44'100, 176'400 }, true); // 1-4s
39 auto referenceRange = juce::Range<int64_t>::withStartAndLength (0, blockSize);
40 playHeadState.update (referenceRange); // This is reference samples
41
42 expect (! playHeadState.isContiguousWithPreviousBlock());
43 expect (playHeadState.didPlayheadJump());
44 expect (playHeadState.isFirstBlockOfLoop());
45 expect (! playHeadState.isLastBlockOfLoop());
46
47 referenceRange += blockSize;
48 playHead.setReferenceSampleRange (referenceRange);
49 playHeadState.update (referenceRange);
50
51 expect (playHeadState.isContiguousWithPreviousBlock());
52 expect (! playHeadState.didPlayheadJump());
53 expect (! playHeadState.isFirstBlockOfLoop());
54 expect (! playHeadState.isLastBlockOfLoop());
55
56 referenceRange += blockSize;
57 playHead.setReferenceSampleRange (referenceRange);
58 playHeadState.update (referenceRange);
59
60 expect (playHeadState.isContiguousWithPreviousBlock());
61 expect (! playHeadState.didPlayheadJump());
62 expect (! playHeadState.isFirstBlockOfLoop());
63 expect (playHeadState.isLastBlockOfLoop());
64 }
65
66 beginTest ("Not looping");
67 {
68 PlayHead playHead;
69 PlayHeadState playHeadState (playHead);
70
71 playHead.play ({ 44'100, 176'400 }, false); // 1-4s
72 auto referenceRange = juce::Range<int64_t>::withStartAndLength (0, blockSize);
73 playHeadState.update (referenceRange); // This is reference samples
74
75 expect (! playHeadState.isContiguousWithPreviousBlock());
76 expect (playHeadState.didPlayheadJump());
77 expect (! playHeadState.isFirstBlockOfLoop());
78 expect (! playHeadState.isLastBlockOfLoop());
79
80 referenceRange += blockSize;
81 playHead.setReferenceSampleRange (referenceRange);
82 playHeadState.update (referenceRange);
83
84 expect (playHeadState.isContiguousWithPreviousBlock());
85 expect (! playHeadState.didPlayheadJump());
86 expect (! playHeadState.isFirstBlockOfLoop());
87 expect (! playHeadState.isLastBlockOfLoop());
88
89 referenceRange += blockSize;
90 playHead.setReferenceSampleRange (referenceRange);
91 playHeadState.update (referenceRange);
92
93 expect (playHeadState.isContiguousWithPreviousBlock());
94 expect (! playHeadState.didPlayheadJump());
95 expect (! playHeadState.isFirstBlockOfLoop());
96 expect (! playHeadState.isLastBlockOfLoop());
97 }
98 }
99};
100
101static PlayHeadStateTests playHeadStateTests;
102
103#endif
104
105}}
static Range withStartAndLength(const ValueType startValue, const ValueType length) noexcept
typedef int64_t