OpenShot Library | OpenShotAudio  0.2.1
juce_WavAudioFormat.h
1 
2 /** @weakgroup juce_audio_formats-codecs
3  * @{
4  */
5 /*
6  ==============================================================================
7 
8  This file is part of the JUCE library.
9  Copyright (c) 2017 - ROLI Ltd.
10 
11  JUCE is an open source library subject to commercial or open-source
12  licensing.
13 
14  By using JUCE, you agree to the terms of both the JUCE 5 End-User License
15  Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
16  27th April 2017).
17 
18  End User License Agreement: www.juce.com/juce-5-licence
19  Privacy Policy: www.juce.com/juce-5-privacy-policy
20 
21  Or: You may also use this code under the terms of the GPL v3 (see
22  www.gnu.org/licenses).
23 
24  JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
25  EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
26  DISCLAIMED.
27 
28  ==============================================================================
29 */
30 
31 namespace juce
32 {
33 
34 //==============================================================================
35 /**
36  Reads and Writes WAV format audio files.
37 
38  @see AudioFormat
39 
40  @tags{Audio}
41 */
43 {
44 public:
45  //==============================================================================
46  /** Creates a format object. */
48 
49  /** Destructor. */
50  ~WavAudioFormat() override;
51 
52  //==============================================================================
53  // BWAV chunk properties:
54 
55  static const char* const bwavDescription; /**< Metadata property name used in BWAV chunks. */
56  static const char* const bwavOriginator; /**< Metadata property name used in BWAV chunks. */
57  static const char* const bwavOriginatorRef; /**< Metadata property name used in BWAV chunks. */
58  static const char* const bwavOriginationDate; /**< Metadata property name used in BWAV chunks. The format should be: yyyy-mm-dd */
59  static const char* const bwavOriginationTime; /**< Metadata property name used in BWAV chunks. The format should be: format is: hh-mm-ss */
60  static const char* const bwavCodingHistory; /**< Metadata property name used in BWAV chunks. */
61 
62  /** Metadata property name used in BWAV chunks.
63  This is the number of samples from the start of an edit that the
64  file is supposed to begin at. Seems like an obvious mistake to
65  only allow a file to occur in an edit once, but that's the way
66  it is..
67 
68  @see AudioFormatReader::metadataValues, createWriterFor
69  */
70  static const char* const bwavTimeReference;
71 
72  /** Utility function to fill out the appropriate metadata for a BWAV file.
73 
74  This just makes it easier than using the property names directly, and it
75  fills out the time and date in the right format.
76  */
77  static StringPairArray createBWAVMetadata (const String& description,
78  const String& originator,
79  const String& originatorRef,
80  Time dateAndTime,
81  int64 timeReferenceSamples,
82  const String& codingHistory);
83 
84  //==============================================================================
85  // 'acid' chunk properties:
86 
87  static const char* const acidOneShot; /**< Metadata property name used in acid chunks. */
88  static const char* const acidRootSet; /**< Metadata property name used in acid chunks. */
89  static const char* const acidStretch; /**< Metadata property name used in acid chunks. */
90  static const char* const acidDiskBased; /**< Metadata property name used in acid chunks. */
91  static const char* const acidizerFlag; /**< Metadata property name used in acid chunks. */
92  static const char* const acidRootNote; /**< Metadata property name used in acid chunks. */
93  static const char* const acidBeats; /**< Metadata property name used in acid chunks. */
94  static const char* const acidDenominator; /**< Metadata property name used in acid chunks. */
95  static const char* const acidNumerator; /**< Metadata property name used in acid chunks. */
96  static const char* const acidTempo; /**< Metadata property name used in acid chunks. */
97 
98  //==============================================================================
99  // INFO chunk properties:
100 
101  static const char* const riffInfoArchivalLocation; /**< Metadata property name used in INFO chunks. */
102  static const char* const riffInfoArtist; /**< Metadata property name used in INFO chunks. */
103  static const char* const riffInfoBaseURL; /**< Metadata property name used in INFO chunks. */
104  static const char* const riffInfoCinematographer; /**< Metadata property name used in INFO chunks. */
105  static const char* const riffInfoComment; /**< Metadata property name used in INFO chunks. */
106  static const char* const riffInfoComment2; /**< Metadata property name used in INFO chunks. */
107  static const char* const riffInfoComments; /**< Metadata property name used in INFO chunks. */
108  static const char* const riffInfoCommissioned; /**< Metadata property name used in INFO chunks. */
109  static const char* const riffInfoCopyright; /**< Metadata property name used in INFO chunks. */
110  static const char* const riffInfoCostumeDesigner; /**< Metadata property name used in INFO chunks. */
111  static const char* const riffInfoCountry; /**< Metadata property name used in INFO chunks. */
112  static const char* const riffInfoCropped; /**< Metadata property name used in INFO chunks. */
113  static const char* const riffInfoDateCreated; /**< Metadata property name used in INFO chunks. */
114  static const char* const riffInfoDateTimeOriginal; /**< Metadata property name used in INFO chunks. */
115  static const char* const riffInfoDefaultAudioStream; /**< Metadata property name used in INFO chunks. */
116  static const char* const riffInfoDimension; /**< Metadata property name used in INFO chunks. */
117  static const char* const riffInfoDirectory; /**< Metadata property name used in INFO chunks. */
118  static const char* const riffInfoDistributedBy; /**< Metadata property name used in INFO chunks. */
119  static const char* const riffInfoDotsPerInch; /**< Metadata property name used in INFO chunks. */
120  static const char* const riffInfoEditedBy; /**< Metadata property name used in INFO chunks. */
121  static const char* const riffInfoEighthLanguage; /**< Metadata property name used in INFO chunks. */
122  static const char* const riffInfoEncodedBy; /**< Metadata property name used in INFO chunks. */
123  static const char* const riffInfoEndTimecode; /**< Metadata property name used in INFO chunks. */
124  static const char* const riffInfoEngineer; /**< Metadata property name used in INFO chunks. */
125  static const char* const riffInfoFifthLanguage; /**< Metadata property name used in INFO chunks. */
126  static const char* const riffInfoFirstLanguage; /**< Metadata property name used in INFO chunks. */
127  static const char* const riffInfoFourthLanguage; /**< Metadata property name used in INFO chunks. */
128  static const char* const riffInfoGenre; /**< Metadata property name used in INFO chunks. */
129  static const char* const riffInfoKeywords; /**< Metadata property name used in INFO chunks. */
130  static const char* const riffInfoLanguage; /**< Metadata property name used in INFO chunks. */
131  static const char* const riffInfoLength; /**< Metadata property name used in INFO chunks. */
132  static const char* const riffInfoLightness; /**< Metadata property name used in INFO chunks. */
133  static const char* const riffInfoLocation; /**< Metadata property name used in INFO chunks. */
134  static const char* const riffInfoLogoIconURL; /**< Metadata property name used in INFO chunks. */
135  static const char* const riffInfoLogoURL; /**< Metadata property name used in INFO chunks. */
136  static const char* const riffInfoMedium; /**< Metadata property name used in INFO chunks. */
137  static const char* const riffInfoMoreInfoBannerImage; /**< Metadata property name used in INFO chunks. */
138  static const char* const riffInfoMoreInfoBannerURL; /**< Metadata property name used in INFO chunks. */
139  static const char* const riffInfoMoreInfoText; /**< Metadata property name used in INFO chunks. */
140  static const char* const riffInfoMoreInfoURL; /**< Metadata property name used in INFO chunks. */
141  static const char* const riffInfoMusicBy; /**< Metadata property name used in INFO chunks. */
142  static const char* const riffInfoNinthLanguage; /**< Metadata property name used in INFO chunks. */
143  static const char* const riffInfoNumberOfParts; /**< Metadata property name used in INFO chunks. */
144  static const char* const riffInfoOrganisation; /**< Metadata property name used in INFO chunks. */
145  static const char* const riffInfoPart; /**< Metadata property name used in INFO chunks. */
146  static const char* const riffInfoProducedBy; /**< Metadata property name used in INFO chunks. */
147  static const char* const riffInfoProductName; /**< Metadata property name used in INFO chunks. */
148  static const char* const riffInfoProductionDesigner; /**< Metadata property name used in INFO chunks. */
149  static const char* const riffInfoProductionStudio; /**< Metadata property name used in INFO chunks. */
150  static const char* const riffInfoRate; /**< Metadata property name used in INFO chunks. */
151  static const char* const riffInfoRated; /**< Metadata property name used in INFO chunks. */
152  static const char* const riffInfoRating; /**< Metadata property name used in INFO chunks. */
153  static const char* const riffInfoRippedBy; /**< Metadata property name used in INFO chunks. */
154  static const char* const riffInfoSecondaryGenre; /**< Metadata property name used in INFO chunks. */
155  static const char* const riffInfoSecondLanguage; /**< Metadata property name used in INFO chunks. */
156  static const char* const riffInfoSeventhLanguage; /**< Metadata property name used in INFO chunks. */
157  static const char* const riffInfoSharpness; /**< Metadata property name used in INFO chunks. */
158  static const char* const riffInfoSixthLanguage; /**< Metadata property name used in INFO chunks. */
159  static const char* const riffInfoSoftware; /**< Metadata property name used in INFO chunks. */
160  static const char* const riffInfoSoundSchemeTitle; /**< Metadata property name used in INFO chunks. */
161  static const char* const riffInfoSource; /**< Metadata property name used in INFO chunks. */
162  static const char* const riffInfoSourceFrom; /**< Metadata property name used in INFO chunks. */
163  static const char* const riffInfoStarring_ISTR; /**< Metadata property name used in INFO chunks. */
164  static const char* const riffInfoStarring_STAR; /**< Metadata property name used in INFO chunks. */
165  static const char* const riffInfoStartTimecode; /**< Metadata property name used in INFO chunks. */
166  static const char* const riffInfoStatistics; /**< Metadata property name used in INFO chunks. */
167  static const char* const riffInfoSubject; /**< Metadata property name used in INFO chunks. */
168  static const char* const riffInfoTapeName; /**< Metadata property name used in INFO chunks. */
169  static const char* const riffInfoTechnician; /**< Metadata property name used in INFO chunks. */
170  static const char* const riffInfoThirdLanguage; /**< Metadata property name used in INFO chunks. */
171  static const char* const riffInfoTimeCode; /**< Metadata property name used in INFO chunks. */
172  static const char* const riffInfoTitle; /**< Metadata property name used in INFO chunks. */
173  static const char* const riffInfoTrackNo; /**< Metadata property name used in INFO chunks. */
174  static const char* const riffInfoTrackNumber; /**< Metadata property name used in INFO chunks. */
175  static const char* const riffInfoURL; /**< Metadata property name used in INFO chunks. */
176  static const char* const riffInfoVegasVersionMajor; /**< Metadata property name used in INFO chunks. */
177  static const char* const riffInfoVegasVersionMinor; /**< Metadata property name used in INFO chunks. */
178  static const char* const riffInfoVersion; /**< Metadata property name used in INFO chunks. */
179  static const char* const riffInfoWatermarkURL; /**< Metadata property name used in INFO chunks. */
180  static const char* const riffInfoWrittenBy; /**< Metadata property name used in INFO chunks. */
181  static const char* const riffInfoYear; /**< Metadata property name used in INFO chunks. */
182 
183  //==============================================================================
184  /** Metadata property name used when reading an ISRC code from an AXML chunk. */
185  static const char* const ISRC;
186 
187  /** Metadata property name used when reading a WAV file with a Tracktion chunk. */
188  static const char* const tracktionLoopInfo;
189 
190  //==============================================================================
191  Array<int> getPossibleSampleRates() override;
192  Array<int> getPossibleBitDepths() override;
193  bool canDoStereo() override;
194  bool canDoMono() override;
195  bool isChannelLayoutSupported (const AudioChannelSet& channelSet) override;
196 
197  //==============================================================================
198  AudioFormatReader* createReaderFor (InputStream* sourceStream,
199  bool deleteStreamIfOpeningFails) override;
200 
201  MemoryMappedAudioFormatReader* createMemoryMappedReader (const File&) override;
202  MemoryMappedAudioFormatReader* createMemoryMappedReader (FileInputStream*) override;
203 
204  AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo,
205  double sampleRateToUse,
206  unsigned int numberOfChannels,
207  int bitsPerSample,
208  const StringPairArray& metadataValues,
209  int qualityOptionIndex) override;
210 
211  AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo,
212  double sampleRateToUse,
213  const AudioChannelSet& channelLayout,
214  int bitsPerSample,
215  const StringPairArray& metadataValues,
216  int qualityOptionIndex) override;
218 
219  //==============================================================================
220  /** Utility function to replace the metadata in a wav file with a new set of values.
221 
222  If possible, this cheats by overwriting just the metadata region of the file, rather
223  than by copying the whole file again.
224  */
225  bool replaceMetadataInFile (const File& wavFile, const StringPairArray& newMetadata);
226 
227 
228 private:
229  JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavAudioFormat)
230 };
231 
232 } // namespace juce
233 
234 /** @}*/
static const char *const riffInfoOrganisation
Metadata property name used in INFO chunks.
static const char *const riffInfoTapeName
Metadata property name used in INFO chunks.
Represents a set of audio channel types.
static const char *const bwavOriginatorRef
Metadata property name used in BWAV chunks.
static const char *const riffInfoComment2
Metadata property name used in INFO chunks.
#define JUCE_API
This macro is added to all JUCE public class declarations.
static const char *const riffInfoMoreInfoBannerURL
Metadata property name used in INFO chunks.
static const char *const acidDenominator
Metadata property name used in acid chunks.
static const char *const tracktionLoopInfo
Metadata property name used when reading a WAV file with a Tracktion chunk.
static const char *const riffInfoWatermarkURL
Metadata property name used in INFO chunks.
static const char *const acidNumerator
Metadata property name used in acid chunks.
static const char *const riffInfoProductionStudio
Metadata property name used in INFO chunks.
static const char *const acidDiskBased
Metadata property name used in acid chunks.
static const char *const riffInfoCountry
Metadata property name used in INFO chunks.
static const char *const riffInfoTechnician
Metadata property name used in INFO chunks.
static const char *const riffInfoStartTimecode
Metadata property name used in INFO chunks.
static const char *const riffInfoSeventhLanguage
Metadata property name used in INFO chunks.
static const char *const riffInfoRate
Metadata property name used in INFO chunks.
static const char *const riffInfoMoreInfoBannerImage
Metadata property name used in INFO chunks.
static const char *const riffInfoLength
Metadata property name used in INFO chunks.
static const char *const riffInfoFifthLanguage
Metadata property name used in INFO chunks.
virtual AudioFormatWriter * createWriterFor(OutputStream *streamToWriteTo, double sampleRateToUse, unsigned int numberOfChannels, int bitsPerSample, const StringPairArray &metadataValues, int qualityOptionIndex)=0
Tries to create an object that can write to a stream with this audio format.
static const char *const riffInfoStarring_ISTR
Metadata property name used in INFO chunks.
static const char *const riffInfoSecondLanguage
Metadata property name used in INFO chunks.
static const char *const riffInfoNumberOfParts
Metadata property name used in INFO chunks.
static const char *const riffInfoVegasVersionMajor
Metadata property name used in INFO chunks.
The base class for streams that read data.
static const char *const riffInfoProductName
Metadata property name used in INFO chunks.
static const char *const bwavCodingHistory
Metadata property name used in BWAV chunks.
static const char *const acidBeats
Metadata property name used in acid chunks.
static const char *const riffInfoSixthLanguage
Metadata property name used in INFO chunks.
static const char *const riffInfoEndTimecode
Metadata property name used in INFO chunks.
The JUCE String class!
Definition: juce_String.h:42
static const char *const riffInfoMusicBy
Metadata property name used in INFO chunks.
static const char *const riffInfoVegasVersionMinor
Metadata property name used in INFO chunks.
static const char *const riffInfoRating
Metadata property name used in INFO chunks.
static const char *const riffInfoURL
Metadata property name used in INFO chunks.
static const char *const riffInfoComment
Metadata property name used in INFO chunks.
static const char *const riffInfoFourthLanguage
Metadata property name used in INFO chunks.
static const char *const riffInfoTrackNo
Metadata property name used in INFO chunks.
static const char *const riffInfoEighthLanguage
Metadata property name used in INFO chunks.
static const char *const riffInfoDateCreated
Metadata property name used in INFO chunks.
static const char *const riffInfoFirstLanguage
Metadata property name used in INFO chunks.
static const char *const riffInfoStarring_STAR
Metadata property name used in INFO chunks.
static const char *const riffInfoSubject
Metadata property name used in INFO chunks.
static const char *const bwavDescription
Metadata property name used in BWAV chunks.
static const char *const riffInfoBaseURL
Metadata property name used in INFO chunks.
static const char *const riffInfoDimension
Metadata property name used in INFO chunks.
static const char *const riffInfoSource
Metadata property name used in INFO chunks.
static const char *const riffInfoDotsPerInch
Metadata property name used in INFO chunks.
static const char *const riffInfoLogoURL
Metadata property name used in INFO chunks.
static const char *const riffInfoStatistics
Metadata property name used in INFO chunks.
static const char *const riffInfoEditedBy
Metadata property name used in INFO chunks.
Reads and Writes WAV format audio files.
static const char *const riffInfoArchivalLocation
Metadata property name used in INFO chunks.
static const char *const riffInfoMedium
Metadata property name used in INFO chunks.
static const char *const riffInfoMoreInfoURL
Metadata property name used in INFO chunks.
static const char *const riffInfoSoundSchemeTitle
Metadata property name used in INFO chunks.
static const char *const riffInfoGenre
Metadata property name used in INFO chunks.
static const char *const riffInfoDefaultAudioStream
Metadata property name used in INFO chunks.
static const char *const riffInfoSourceFrom
Metadata property name used in INFO chunks.
static const char *const bwavOriginationTime
Metadata property name used in BWAV chunks.
static const char *const riffInfoProductionDesigner
Metadata property name used in INFO chunks.
Subclasses of AudioFormat are used to read and write different audio file formats.
static const char *const bwavOriginationDate
Metadata property name used in BWAV chunks.
static const char *const riffInfoMoreInfoText
Metadata property name used in INFO chunks.
static const char *const riffInfoKeywords
Metadata property name used in INFO chunks.
static const char *const riffInfoPart
Metadata property name used in INFO chunks.
static const char *const riffInfoDistributedBy
Metadata property name used in INFO chunks.
static const char *const ISRC
Metadata property name used when reading an ISRC code from an AXML chunk.
static const char *const acidRootNote
Metadata property name used in acid chunks.
Represents a local file or directory.
Definition: juce_File.h:44
The base class for streams that write data to some kind of destination.
static const char *const acidTempo
Metadata property name used in acid chunks.
static const char *const riffInfoCopyright
Metadata property name used in INFO chunks.
static const char *const riffInfoYear
Metadata property name used in INFO chunks.
static const char *const riffInfoLocation
Metadata property name used in INFO chunks.
static const char *const riffInfoTrackNumber
Metadata property name used in INFO chunks.
static const char *const riffInfoDirectory
Metadata property name used in INFO chunks.
static const char *const riffInfoLanguage
Metadata property name used in INFO chunks.
An input stream that reads from a local file.
static const char *const riffInfoVersion
Metadata property name used in INFO chunks.
Writes samples to an audio file stream.
static const char *const riffInfoSoftware
Metadata property name used in INFO chunks.
static const char *const riffInfoRated
Metadata property name used in INFO chunks.
static const char *const riffInfoSharpness
Metadata property name used in INFO chunks.
static const char *const riffInfoWrittenBy
Metadata property name used in INFO chunks.
static const char *const acidOneShot
Metadata property name used in acid chunks.
static const char *const riffInfoDateTimeOriginal
Metadata property name used in INFO chunks.
static const char *const riffInfoNinthLanguage
Metadata property name used in INFO chunks.
static const char *const riffInfoCostumeDesigner
Metadata property name used in INFO chunks.
A container for holding a set of strings which are keyed by another string.
Reads samples from an audio file stream.
static const char *const riffInfoLogoIconURL
Metadata property name used in INFO chunks.
static const char *const riffInfoEngineer
Metadata property name used in INFO chunks.
static const char *const riffInfoComments
Metadata property name used in INFO chunks.
static const char *const riffInfoArtist
Metadata property name used in INFO chunks.
static const char *const bwavOriginator
Metadata property name used in BWAV chunks.
static const char *const riffInfoTimeCode
Metadata property name used in INFO chunks.
static const char *const riffInfoLightness
Metadata property name used in INFO chunks.
static const char *const acidStretch
Metadata property name used in acid chunks.
static const char *const riffInfoThirdLanguage
Metadata property name used in INFO chunks.
static const char *const riffInfoTitle
Metadata property name used in INFO chunks.
Holds an absolute date and time.
Definition: juce_Time.h:40
static const char *const riffInfoSecondaryGenre
Metadata property name used in INFO chunks.
A specialised type of AudioFormatReader that uses a MemoryMappedFile to read directly from an audio f...
static const char *const riffInfoProducedBy
Metadata property name used in INFO chunks.
static const char *const riffInfoCinematographer
Metadata property name used in INFO chunks.
static const char *const acidizerFlag
Metadata property name used in acid chunks.
static const char *const acidRootSet
Metadata property name used in acid chunks.
static const char *const riffInfoCommissioned
Metadata property name used in INFO chunks.
static const char *const riffInfoCropped
Metadata property name used in INFO chunks.
static const char *const riffInfoEncodedBy
Metadata property name used in INFO chunks.
static const char *const bwavTimeReference
Metadata property name used in BWAV chunks.
static const char *const riffInfoRippedBy
Metadata property name used in INFO chunks.