A specialised type of AudioFormatReader that uses a MemoryMappedFile to read directly from an audio file. More...
#include <juce_MemoryMappedAudioFormatReader.h>
Public Member Functions | |
const File & | getFile () const noexcept |
Returns the file that is being mapped. | |
bool | mapEntireFile () |
Attempts to map the entire file into memory. | |
virtual bool | mapSectionOfFile (Range< int64 > samplesToMap) |
Attempts to map a section of the file into memory. | |
Range< int64 > | getMappedSection () const noexcept |
Returns the sample range that's currently memory-mapped and available for reading. | |
void | touchSample (int64 sample) const noexcept |
Touches the memory for the given sample, to force it to be loaded into active memory. | |
virtual void | getSample (int64 sampleIndex, float *result) const noexcept=0 |
Returns the samples for all channels at a given sample position. | |
size_t | getNumBytesUsed () const |
Returns the number of bytes currently being mapped. | |
Public Member Functions inherited from AudioFormatReader | |
virtual | ~AudioFormatReader () |
Destructor. | |
const String & | getFormatName () const noexcept |
Returns a description of what type of format this is. | |
bool | read (float *const *destChannels, int numDestChannels, int64 startSampleInSource, int numSamplesToRead) |
Reads samples from the stream. | |
bool | read (int *const *destChannels, int numDestChannels, int64 startSampleInSource, int numSamplesToRead, bool fillLeftoverChannelsWithCopies) |
Reads samples from the stream. | |
bool | read (AudioBuffer< float > *buffer, int startSampleInDestBuffer, int numSamples, int64 readerStartSample, bool useReaderLeftChan, bool useReaderRightChan) |
Fills a section of an AudioBuffer from this reader. | |
virtual void | readMaxLevels (int64 startSample, int64 numSamples, Range< float > *results, int numChannelsToRead) |
Finds the highest and lowest sample levels from a section of the audio stream. | |
virtual void | readMaxLevels (int64 startSample, int64 numSamples, float &lowestLeft, float &highestLeft, float &lowestRight, float &highestRight) |
Finds the highest and lowest sample levels from a section of the audio stream. | |
int64 | searchForLevel (int64 startSample, int64 numSamplesToSearch, double magnitudeRangeMinimum, double magnitudeRangeMaximum, int minimumConsecutiveSamples) |
Scans the source looking for a sample whose magnitude is in a specified range. | |
virtual AudioChannelSet | getChannelLayout () |
Get the channel layout of the audio stream. | |
virtual bool | readSamples (int *const *destChannels, int numDestChannels, int startOffsetInDestBuffer, int64 startSampleInFile, int numSamples)=0 |
Subclasses must implement this method to perform the low-level read operation. | |
Protected Member Functions | |
MemoryMappedAudioFormatReader (const File &file, const AudioFormatReader &details, int64 dataChunkStart, int64 dataChunkLength, int bytesPerFrame) | |
Creates an MemoryMappedAudioFormatReader object. | |
int64 | sampleToFilePos (int64 sample) const noexcept |
Converts a sample index to a byte position in the file. | |
int64 | filePosToSample (int64 filePos) const noexcept |
Converts a byte position in the file to a sample index. | |
const void * | sampleToPointer (int64 sample) const noexcept |
Converts a sample index to a pointer to the mapped file memory. | |
template<typename SampleType , typename Endianness > | |
Range< float > | scanMinAndMaxInterleaved (int channel, int64 startSampleInFile, int64 numSamples) const noexcept |
Used by AudioFormatReader subclasses to scan for min/max ranges in interleaved data. | |
Protected Member Functions inherited from AudioFormatReader | |
AudioFormatReader (InputStream *sourceStream, const String &formatName) | |
Creates an AudioFormatReader object. | |
Protected Attributes | |
File | file |
Range< int64 > | mappedSection |
std::unique_ptr< MemoryMappedFile > | map |
int64 | dataChunkStart |
int64 | dataLength |
int | bytesPerFrame |
Additional Inherited Members | |
Public Attributes inherited from AudioFormatReader | |
double | sampleRate = 0 |
The sample-rate of the stream. | |
unsigned int | bitsPerSample = 0 |
The number of bits per sample, e.g. | |
int64 | lengthInSamples = 0 |
The total number of samples in the audio stream. | |
unsigned int | numChannels = 0 |
The total number of channels in the audio stream. | |
bool | usesFloatingPointData = false |
Indicates whether the data is floating-point or fixed. | |
StringPairArray | metadataValues |
A set of metadata values that the reader has pulled out of the stream. | |
InputStream * | input |
The input stream, for use by subclasses. | |
Static Protected Member Functions inherited from AudioFormatReader | |
static void | clearSamplesBeyondAvailableLength (int *const *destChannels, int numDestChannels, int startOffsetInDestBuffer, int64 startSampleInFile, int &numSamples, int64 fileLengthInSamples) |
Used by AudioFormatReader subclasses to clear any parts of the data blocks that lie beyond the end of their available length. | |
A specialised type of AudioFormatReader that uses a MemoryMappedFile to read directly from an audio file.
This allows for incredibly fast random-access to sample data in the mapped region of the file, but not all audio formats support it - see AudioFormat::createMemoryMappedReader().
Note that before reading samples from a MemoryMappedAudioFormatReader, you must first call mapEntireFile() or mapSectionOfFile() to ensure that the region you want to read has been mapped.
|
protected |
Creates an MemoryMappedAudioFormatReader object.
Note that before attempting to read any data, you must call mapEntireFile() or mapSectionOfFile() to ensure that the region you want to read has been mapped.
|
noexcept |
Returns the file that is being mapped.
bool MemoryMappedAudioFormatReader::mapEntireFile | ( | ) |
Attempts to map the entire file into memory.
Attempts to map a section of the file into memory.
Returns the sample range that's currently memory-mapped and available for reading.
|
noexcept |
Touches the memory for the given sample, to force it to be loaded into active memory.
|
pure virtualnoexcept |
Returns the samples for all channels at a given sample position.
The result array must be large enough to hold a value for each channel that this reader contains.
size_t MemoryMappedAudioFormatReader::getNumBytesUsed | ( | ) | const |
Returns the number of bytes currently being mapped.
Converts a sample index to a byte position in the file.
Converts a byte position in the file to a sample index.
|
protectednoexcept |
Converts a sample index to a pointer to the mapped file memory.
References addBytesToPointer().
|
protectednoexcept |
Used by AudioFormatReader subclasses to scan for min/max ranges in interleaved data.
References addBytesToPointer(), and Range< ValueType >::findMinAndMax().
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |