tracktion-engine
3.0-10-g034fdde4aa5
Tracktion Engine — High level data model for audio applications
« « « Anklang Documentation
Loading...
Searching...
No Matches
tracktion_engine
audio_files
tracktion_BufferedAudioReader.h
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
namespace
tracktion
{
inline
namespace
engine
12
{
13
14
//==============================================================================
15
//==============================================================================
16
class
BufferedAudioReader
:
public
juce::AudioFormatReader
,
17
public
juce::TimeSliceClient
18
{
19
public
:
20
BufferedAudioReader
(
std::unique_ptr<juce::AudioFormatReader>
,
juce::TimeSliceThread
&);
21
23
~BufferedAudioReader
()
override
;
24
26
float
getProportionComplete
()
const
;
27
29
bool
readSamples (
int
*
const
* destSamples,
int
numDestChannels,
int
startOffsetInDestBuffer,
30
juce::int64
startSampleInFile,
int
numSamples)
override
;
31
33
int
useTimeSlice()
override
;
34
35
private
:
36
std::unique_ptr<juce::AudioFormatReader>
source;
37
juce::TimeSliceThread
& thread;
38
39
choc::buffer::ChannelArrayBuffer<float> data;
40
std::atomic<choc::buffer::FrameCount>
validEnd { 0 };
41
const
choc::buffer::FrameCount sourceLength {
static_cast<
choc::buffer::FrameCount
>
(source->lengthInSamples) };
42
43
static
constexpr
choc::buffer::FrameCount chunkSize = 65'536;
44
45
bool
readNextChunk();
46
bool
readIntoBuffer (choc::buffer::FrameRange);
47
};
48
49
class
BufferedFileReaderWrapper
:
public
FallbackReader
50
{
51
public
:
52
BufferedFileReaderWrapper
(
std::shared_ptr<BufferedAudioReader>
s)
53
: source (std::move (s))
54
{
55
assert
(source);
56
57
sampleRate
= source->sampleRate;
58
bitsPerSample
= source->bitsPerSample;
59
lengthInSamples
= source->lengthInSamples;
60
numChannels
= source->numChannels;
61
usesFloatingPointData
= source->usesFloatingPointData;
62
metadataValues
= source->metadataValues;
63
}
64
66
void
setReadTimeout
(
int
)
override
67
{}
68
70
bool
readSamples (
int
*
const
* destSamples,
int
numDestChannels,
int
startOffsetInDestBuffer,
71
juce::int64
startSampleInFile,
int
numSamples)
override
72
{
73
return
source->readSamples (destSamples, numDestChannels, startOffsetInDestBuffer,
74
startSampleInFile, numSamples);
75
}
76
77
private
:
78
std::shared_ptr<BufferedAudioReader>
source;
79
};
80
81
//==============================================================================
82
//==============================================================================
83
class
BufferedAudioFileManager
84
{
85
public
:
86
BufferedAudioFileManager
(
Engine
&);
87
88
std::shared_ptr<BufferedAudioReader>
get (
juce::File
);
89
90
private
:
91
Engine
& engine;
92
juce::TimeSliceThread
readThread {
"Audio file decompressing"
};
93
std::map<juce::File, std::shared_ptr<BufferedAudioReader>
> cache;
94
LambdaTimer
timer { [
this
] { cleanUp(); } };
95
96
void
cleanUp();
97
std::unique_ptr<juce::AudioFormatReader>
createReader (
juce::File
);
98
};
99
100
}}
// namespace tracktion { inline namespace engine
assert
assert
std::atomic
juce::AudioFormatReader
juce::AudioFormatReader::usesFloatingPointData
bool usesFloatingPointData
juce::AudioFormatReader::metadataValues
StringPairArray metadataValues
juce::AudioFormatReader::lengthInSamples
int64 lengthInSamples
juce::AudioFormatReader::sampleRate
double sampleRate
juce::AudioFormatReader::bitsPerSample
unsigned int bitsPerSample
juce::AudioFormatReader::numChannels
unsigned int numChannels
juce::File
juce::TimeSliceClient
juce::TimeSliceThread
tracktion::BufferedAudioFileManager
Definition
tracktion_BufferedAudioReader.h:84
tracktion::BufferedAudioReader
Definition
tracktion_BufferedAudioReader.h:18
tracktion::engine::BufferedAudioReader::~BufferedAudioReader
~BufferedAudioReader() override
Destructor.
Definition
tracktion_BufferedAudioReader.cpp:34
tracktion::engine::BufferedAudioReader::getProportionComplete
float getProportionComplete() const
Returns the proportion of the source that has been cached.
Definition
tracktion_BufferedAudioReader.cpp:39
tracktion::BufferedFileReaderWrapper
Definition
tracktion_BufferedAudioReader.h:50
tracktion::engine::BufferedFileReaderWrapper::setReadTimeout
void setReadTimeout(int) override
Subclassed must override this to set the timeout.
Definition
tracktion_BufferedAudioReader.h:66
tracktion::Engine
The Engine is the central class for all tracktion sessions.
Definition
tracktion_Engine.h:35
tracktion::LambdaTimer
Definition
tracktion_AsyncFunctionUtils.h:120
std::map
juce::int64
long long int64
tracktion
Definition
tracktion_AudioReader.h:23
std::shared_ptr
tracktion::FallbackReader
Definition
tracktion_AudioFileCache.h:15
std::unique_ptr
« « « Anklang Documentation