58 int64 dataChunkStart, int64 dataChunkLength,
int bytesPerFrame);
68 virtual bool mapSectionOfFile (
Range<int64> samplesToMap);
74 void touchSample (int64 sample)
const noexcept;
80 virtual void getSample (int64 sampleIndex,
float* result)
const noexcept = 0;
88 std::unique_ptr<MemoryMappedFile> map;
89 int64 dataChunkStart, dataLength;
93 inline int64
sampleToFilePos (int64 sample)
const noexcept {
return dataChunkStart + sample * bytesPerFrame; }
96 inline int64
filePosToSample (int64 filePos)
const noexcept {
return (filePos - dataChunkStart) / bytesPerFrame; }
99 inline const void*
sampleToPointer (int64 sample)
const noexcept {
return addBytesToPointer (map->getData(), sampleToFilePos (sample) - map->getRange().getStart()); }
102 template <
typename SampleType,
typename Endianness>
105 using SourceType = AudioData::Pointer <SampleType, Endianness, AudioData::Interleaved, AudioData::Const>;
107 return SourceType (addBytesToPointer (sampleToPointer (startSampleInFile), ((
int) bitsPerSample / 8) * channel), (
int) numChannels)
108 .findMinAndMax ((
size_t) numSamples);