openshot-audio  0.1.2
juce_AudioFormatReader.h
Go to the documentation of this file.
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2015 - ROLI Ltd.
6 
7  Permission is granted to use this software under the terms of either:
8  a) the GPL v2 (or any later version)
9  b) the Affero GPL v3
10 
11  Details of these licenses can be found at: www.gnu.org/licenses
12 
13  JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
14  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15  A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 
17  ------------------------------------------------------------------------------
18 
19  To release a closed-source product which uses JUCE, commercial licenses are
20  available: visit www.juce.com for more information.
21 
22  ==============================================================================
23 */
24 
25 #ifndef JUCE_AUDIOFORMATREADER_H_INCLUDED
26 #define JUCE_AUDIOFORMATREADER_H_INCLUDED
27 
28 
29 //==============================================================================
39 {
40 protected:
41  //==============================================================================
51  AudioFormatReader (InputStream* sourceStream,
52  const String& formatName);
53 
54 public:
56  virtual ~AudioFormatReader();
57 
58  //==============================================================================
63  const String& getFormatName() const noexcept { return formatName; }
64 
65  //==============================================================================
104  bool read (int* const* destSamples,
105  int numDestChannels,
106  int64 startSampleInSource,
107  int numSamplesToRead,
108  bool fillLeftoverChannelsWithCopies);
109 
117  void read (AudioSampleBuffer* buffer,
118  int startSampleInDestBuffer,
119  int numSamples,
120  int64 readerStartSample,
121  bool useReaderLeftChan,
122  bool useReaderRightChan);
123 
140  virtual void readMaxLevels (int64 startSample, int64 numSamples,
141  Range<float>* results, int numChannelsToRead);
142 
160  virtual void readMaxLevels (int64 startSample, int64 numSamples,
161  float& lowestLeft, float& highestLeft,
162  float& lowestRight, float& highestRight);
163 
186  int64 searchForLevel (int64 startSample,
187  int64 numSamplesToSearch,
188  double magnitudeRangeMinimum,
189  double magnitudeRangeMaximum,
190  int minimumConsecutiveSamples);
191 
192 
193  //==============================================================================
195  double sampleRate;
196 
198  unsigned int bitsPerSample;
199 
202 
204  unsigned int numChannels;
205 
208 
216 
219 
220 
221  //==============================================================================
237  virtual bool readSamples (int** destSamples,
238  int numDestChannels,
239  int startOffsetInDestBuffer,
240  int64 startSampleInFile,
241  int numSamples) = 0;
242 
243 
244 protected:
245  //==============================================================================
247  template <class DestSampleType, class SourceSampleType, class SourceEndianness>
248  struct ReadHelper
249  {
252 
253  template <typename TargetType>
254  static void read (TargetType* const* destData, int destOffset, int numDestChannels,
255  const void* sourceData, int numSourceChannels, int numSamples) noexcept
256  {
257  for (int i = 0; i < numDestChannels; ++i)
258  {
259  if (void* targetChan = destData[i])
260  {
261  DestType dest (targetChan);
262  dest += destOffset;
263 
264  if (i < numSourceChannels)
265  dest.convertSamples (SourceType (addBytesToPointer (sourceData, i * SourceType::getBytesPerSample()), numSourceChannels), numSamples);
266  else
267  dest.clearSamples (numSamples);
268  }
269  }
270  }
271  };
272 
276  static void clearSamplesBeyondAvailableLength (int** destSamples, int numDestChannels,
277  int startOffsetInDestBuffer, int64 startSampleInFile,
278  int& numSamples, int64 fileLengthInSamples)
279  {
280  jassert (destSamples != nullptr);
281  const int64 samplesAvailable = fileLengthInSamples - startSampleInFile;
282 
283  if (samplesAvailable < numSamples)
284  {
285  for (int i = numDestChannels; --i >= 0;)
286  if (destSamples[i] != nullptr)
287  zeromem (destSamples[i] + startOffsetInDestBuffer, sizeof (int) * (size_t) numSamples);
288 
289  numSamples = (int) samplesAvailable;
290  }
291  }
292 
293 private:
294  String formatName;
295 
297 };
298 
299 
300 #endif // JUCE_AUDIOFORMATREADER_H_INCLUDED
Definition: juce_AudioSampleBuffer.h:34
Definition: juce_StringPairArray.h:39
double sampleRate
Definition: juce_AudioFormatReader.h:195
unsigned int numChannels
Definition: juce_AudioFormatReader.h:204
bool usesFloatingPointData
Definition: juce_AudioFormatReader.h:207
StringPairArray metadataValues
Definition: juce_AudioFormatReader.h:215
#define noexcept
Definition: juce_CompilerSupport.h:141
const String & getFormatName() const noexcept
Definition: juce_AudioFormatReader.h:63
Definition: juce_AudioDataConverters.h:355
void zeromem(void *memory, size_t numBytes) noexcept
Definition: juce_Memory.h:34
Definition: juce_AudioFormatReader.h:248
static void read(TargetType *const *destData, int destOffset, int numDestChannels, const void *sourceData, int numSourceChannels, int numSamples) noexcept
Definition: juce_AudioFormatReader.h:254
Definition: juce_Range.h:44
TOUCHINPUT int
Definition: juce_win32_Windowing.cpp:123
Type * addBytesToPointer(Type *basePointer, IntegerType bytes) noexcept
Definition: juce_Memory.h:53
Definition: juce_InputStream.h:41
Definition: juce_String.h:43
AudioData::Pointer< SourceSampleType, SourceEndianness, AudioData::Interleaved, AudioData::Const > SourceType
Definition: juce_AudioFormatReader.h:251
int64 lengthInSamples
Definition: juce_AudioFormatReader.h:201
#define JUCE_API
Definition: juce_StandardHeader.h:139
#define const
JOCTET * buffer
Definition: juce_JPEGLoader.cpp:302
static void clearSamplesBeyondAvailableLength(int **destSamples, int numDestChannels, int startOffsetInDestBuffer, int64 startSampleInFile, int &numSamples, int64 fileLengthInSamples)
Definition: juce_AudioFormatReader.h:276
unsigned int bitsPerSample
Definition: juce_AudioFormatReader.h:198
Definition: juce_AudioFormatReader.h:38
void convertSamples(Pointer source, int numSamples) const noexcept
Definition: juce_AudioDataConverters.h:441
long long int64
Definition: juce_MathsFunctions.h:60
#define jassert(a)
Definition: juce_PlatformDefs.h:146
InputStream * input
Definition: juce_AudioFormatReader.h:218
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
Definition: juce_PlatformDefs.h:198
void clearSamples(int numSamples) const noexcept
Definition: juce_AudioDataConverters.h:483
AudioData::Pointer< DestSampleType, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::NonConst > DestType
Definition: juce_AudioFormatReader.h:250