OpenShot Audio Library | OpenShotAudio  0.3.1
juce_AudioSubsectionReader.cpp
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2017 - ROLI Ltd.
6 
7  JUCE is an open source library subject to commercial or open-source
8  licensing.
9 
10  By using JUCE, you agree to the terms of both the JUCE 5 End-User License
11  Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
12  27th April 2017).
13 
14  End User License Agreement: www.juce.com/juce-5-licence
15  Privacy Policy: www.juce.com/juce-5-privacy-policy
16 
17  Or: You may also use this code under the terms of the GPL v3 (see
18  www.gnu.org/licenses).
19 
20  JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
21  EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
22  DISCLAIMED.
23 
24  ==============================================================================
25 */
26 
27 namespace juce
28 {
29 
31  int64 startSampleToUse, int64 lengthToUse,
32  bool deleteSource)
33  : AudioFormatReader (nullptr, sourceToUse->getFormatName()),
34  source (sourceToUse),
35  startSample (startSampleToUse),
36  deleteSourceWhenDeleted (deleteSource)
37 {
38  length = jmin (jmax ((int64) 0, source->lengthInSamples - startSample), lengthToUse);
39 
40  sampleRate = source->sampleRate;
41  bitsPerSample = source->bitsPerSample;
42  lengthInSamples = length;
43  numChannels = source->numChannels;
45 }
46 
48 {
49  if (deleteSourceWhenDeleted)
50  delete source;
51 }
52 
53 //==============================================================================
54 bool AudioSubsectionReader::readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer,
55  int64 startSampleInFile, int numSamples)
56 {
57  clearSamplesBeyondAvailableLength (destSamples, numDestChannels, startOffsetInDestBuffer,
58  startSampleInFile, numSamples, length);
59 
60  return source->readSamples (destSamples, numDestChannels, startOffsetInDestBuffer,
61  startSampleInFile + startSample, numSamples);
62 }
63 
64 void AudioSubsectionReader::readMaxLevels (int64 startSampleInFile, int64 numSamples, Range<float>* results, int numChannelsToRead)
65 {
66  startSampleInFile = jmax ((int64) 0, startSampleInFile);
67  numSamples = jmax ((int64) 0, jmin (numSamples, length - startSampleInFile));
68 
69  source->readMaxLevels (startSampleInFile + startSample, numSamples, results, numChannelsToRead);
70 }
71 
72 } // namespace juce
static void clearSamplesBeyondAvailableLength(int **destChannels, int numDestChannels, int startOffsetInDestBuffer, int64 startSampleInFile, int &numSamples, int64 fileLengthInSamples)
AudioSubsectionReader(AudioFormatReader *sourceReader, int64 subsectionStartSample, int64 subsectionLength, bool deleteSourceWhenDeleted)
virtual void readMaxLevels(int64 startSample, int64 numSamples, Range< float > *results, int numChannelsToRead)
void readMaxLevels(int64 startSample, int64 numSamples, Range< float > *results, int numChannelsToRead) override
bool readSamples(int **destSamples, int numDestChannels, int startOffsetInDestBuffer, int64 startSampleInFile, int numSamples) override
virtual bool readSamples(int **destChannels, int numDestChannels, int startOffsetInDestBuffer, int64 startSampleInFile, int numSamples)=0