57 int64 dataChunkStart, int64 dataChunkLength,
int bytesPerFrame);
67 virtual bool mapSectionOfFile (
Range<int64> samplesToMap);
73 void touchSample (int64 sample)
const noexcept;
79 virtual void getSample (int64 sampleIndex,
float* result)
const noexcept = 0;
87 std::unique_ptr<MemoryMappedFile> map;
88 int64 dataChunkStart, dataLength;
92 inline int64
sampleToFilePos (int64 sample)
const noexcept {
return dataChunkStart + sample * bytesPerFrame; }
95 inline int64
filePosToSample (int64 filePos)
const noexcept {
return (filePos - dataChunkStart) / bytesPerFrame; }
98 inline const void*
sampleToPointer (int64 sample)
const noexcept {
return addBytesToPointer (map->getData(), sampleToFilePos (sample) - map->getRange().getStart()); }
101 template <
typename SampleType,
typename Endianness>
104 using SourceType = AudioData::Pointer <SampleType, Endianness, AudioData::Interleaved, AudioData::Const>;
106 return SourceType (addBytesToPointer (sampleToPointer (startSampleInFile), ((
int) bitsPerSample / 8) * channel), (
int) numChannels)
107 .findMinAndMax ((
size_t) numSamples);