OpenShot Audio Library | OpenShotAudio  0.6.0
juce_WavAudioFormat.h
1 /*
2  ==============================================================================
3 
4  This file is part of the JUCE library.
5  Copyright (c) 2022 - Raw Material Software Limited
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 7 End-User License
11  Agreement and JUCE Privacy Policy.
12 
13  End User License Agreement: www.juce.com/juce-7-licence
14  Privacy Policy: www.juce.com/juce-privacy-policy
15 
16  Or: You may also use this code under the terms of the GPL v3 (see
17  www.gnu.org/licenses).
18 
19  JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20  EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21  DISCLAIMED.
22 
23  ==============================================================================
24 */
25 
26 namespace juce
27 {
28 
29 //==============================================================================
37 class JUCE_API WavAudioFormat : public AudioFormat
38 {
39 public:
40  //==============================================================================
43 
45  ~WavAudioFormat() override;
46 
47  //==============================================================================
48  // BWAV chunk properties:
49 
50  static const char* const bwavDescription;
51  static const char* const bwavOriginator;
52  static const char* const bwavOriginatorRef;
53  static const char* const bwavOriginationDate;
54  static const char* const bwavOriginationTime;
55  static const char* const bwavCodingHistory;
65  static const char* const bwavTimeReference;
66 
72  static StringPairArray createBWAVMetadata (const String& description,
73  const String& originator,
74  const String& originatorRef,
75  Time dateAndTime,
76  int64 timeReferenceSamples,
77  const String& codingHistory);
78 
79  //==============================================================================
80  // 'acid' chunk properties:
81 
82  static const char* const acidOneShot;
83  static const char* const acidRootSet;
84  static const char* const acidStretch;
85  static const char* const acidDiskBased;
86  static const char* const acidizerFlag;
87  static const char* const acidRootNote;
88  static const char* const acidBeats;
89  static const char* const acidDenominator;
90  static const char* const acidNumerator;
91  static const char* const acidTempo;
93  //==============================================================================
94  // INFO chunk properties:
95 
96  static const char* const riffInfoArchivalLocation;
97  static const char* const riffInfoArtist;
98  static const char* const riffInfoBaseURL;
99  static const char* const riffInfoCinematographer;
100  static const char* const riffInfoComment;
101  static const char* const riffInfoComment2;
102  static const char* const riffInfoComments;
103  static const char* const riffInfoCommissioned;
104  static const char* const riffInfoCopyright;
105  static const char* const riffInfoCostumeDesigner;
106  static const char* const riffInfoCountry;
107  static const char* const riffInfoCropped;
108  static const char* const riffInfoDateCreated;
109  static const char* const riffInfoDateTimeOriginal;
110  static const char* const riffInfoDefaultAudioStream;
111  static const char* const riffInfoDimension;
112  static const char* const riffInfoDirectory;
113  static const char* const riffInfoDistributedBy;
114  static const char* const riffInfoDotsPerInch;
115  static const char* const riffInfoEditedBy;
116  static const char* const riffInfoEighthLanguage;
117  static const char* const riffInfoEncodedBy;
118  static const char* const riffInfoEndTimecode;
119  static const char* const riffInfoEngineer;
120  static const char* const riffInfoFifthLanguage;
121  static const char* const riffInfoFirstLanguage;
122  static const char* const riffInfoFourthLanguage;
123  static const char* const riffInfoGenre;
124  static const char* const riffInfoKeywords;
125  static const char* const riffInfoLanguage;
126  static const char* const riffInfoLength;
127  static const char* const riffInfoLightness;
128  static const char* const riffInfoLocation;
129  static const char* const riffInfoLogoIconURL;
130  static const char* const riffInfoLogoURL;
131  static const char* const riffInfoMedium;
132  static const char* const riffInfoMoreInfoBannerImage;
133  static const char* const riffInfoMoreInfoBannerURL;
134  static const char* const riffInfoMoreInfoText;
135  static const char* const riffInfoMoreInfoURL;
136  static const char* const riffInfoMusicBy;
137  static const char* const riffInfoNinthLanguage;
138  static const char* const riffInfoNumberOfParts;
139  static const char* const riffInfoOrganisation;
140  static const char* const riffInfoPart;
141  static const char* const riffInfoProducedBy;
142  static const char* const riffInfoProductName;
143  static const char* const riffInfoProductionDesigner;
144  static const char* const riffInfoProductionStudio;
145  static const char* const riffInfoRate;
146  static const char* const riffInfoRated;
147  static const char* const riffInfoRating;
148  static const char* const riffInfoRippedBy;
149  static const char* const riffInfoSecondaryGenre;
150  static const char* const riffInfoSecondLanguage;
151  static const char* const riffInfoSeventhLanguage;
152  static const char* const riffInfoSharpness;
153  static const char* const riffInfoSixthLanguage;
154  static const char* const riffInfoSoftware;
155  static const char* const riffInfoSoundSchemeTitle;
156  static const char* const riffInfoSource;
157  static const char* const riffInfoSourceFrom;
158  static const char* const riffInfoStarring_ISTR;
159  static const char* const riffInfoStarring_STAR;
160  static const char* const riffInfoStartTimecode;
161  static const char* const riffInfoStatistics;
162  static const char* const riffInfoSubject;
163  static const char* const riffInfoTapeName;
164  static const char* const riffInfoTechnician;
165  static const char* const riffInfoThirdLanguage;
166  static const char* const riffInfoTimeCode;
167  static const char* const riffInfoTitle;
168  static const char* const riffInfoTrackNo;
169  static const char* const riffInfoTrackNumber;
170  static const char* const riffInfoURL;
171  static const char* const riffInfoVegasVersionMajor;
172  static const char* const riffInfoVegasVersionMinor;
173  static const char* const riffInfoVersion;
174  static const char* const riffInfoWatermarkURL;
175  static const char* const riffInfoWrittenBy;
176  static const char* const riffInfoYear;
178  //==============================================================================
179  // ASWG chunk properties:
180 
181  static const char* const aswgContentType;
182  static const char* const aswgProject;
183  static const char* const aswgOriginator;
184  static const char* const aswgOriginatorStudio;
185  static const char* const aswgNotes;
186  static const char* const aswgSession;
187  static const char* const aswgState;
188  static const char* const aswgEditor;
189  static const char* const aswgMixer;
190  static const char* const aswgFxChainName;
191  static const char* const aswgChannelConfig;
192  static const char* const aswgAmbisonicFormat;
193  static const char* const aswgAmbisonicChnOrder;
194  static const char* const aswgAmbisonicNorm;
195  static const char* const aswgMicType;
196  static const char* const aswgMicConfig;
197  static const char* const aswgMicDistance;
198  static const char* const aswgRecordingLoc;
199  static const char* const aswgIsDesigned;
200  static const char* const aswgRecEngineer;
201  static const char* const aswgRecStudio;
202  static const char* const aswgImpulseLocation;
203  static const char* const aswgCategory;
204  static const char* const aswgSubCategory;
205  static const char* const aswgCatId;
206  static const char* const aswgUserCategory;
207  static const char* const aswgUserData;
208  static const char* const aswgVendorCategory;
209  static const char* const aswgFxName;
210  static const char* const aswgLibrary;
211  static const char* const aswgCreatorId;
212  static const char* const aswgSourceId;
213  static const char* const aswgRmsPower;
214  static const char* const aswgLoudness;
215  static const char* const aswgLoudnessRange;
216  static const char* const aswgMaxPeak;
217  static const char* const aswgSpecDensity;
218  static const char* const aswgZeroCrossRate;
219  static const char* const aswgPapr;
220  static const char* const aswgText;
221  static const char* const aswgEfforts;
222  static const char* const aswgEffortType;
223  static const char* const aswgProjection;
224  static const char* const aswgLanguage;
225  static const char* const aswgTimingRestriction;
226  static const char* const aswgCharacterName;
227  static const char* const aswgCharacterGender;
228  static const char* const aswgCharacterAge;
229  static const char* const aswgCharacterRole;
230  static const char* const aswgActorName;
231  static const char* const aswgActorGender;
232  static const char* const aswgDirector;
233  static const char* const aswgDirection;
234  static const char* const aswgFxUsed;
235  static const char* const aswgUsageRights;
236  static const char* const aswgIsUnion;
237  static const char* const aswgAccent;
238  static const char* const aswgEmotion;
239  static const char* const aswgComposor;
240  static const char* const aswgArtist;
241  static const char* const aswgSongTitle;
242  static const char* const aswgGenre;
243  static const char* const aswgSubGenre;
244  static const char* const aswgProducer;
245  static const char* const aswgMusicSup;
246  static const char* const aswgInstrument;
247  static const char* const aswgMusicPublisher;
248  static const char* const aswgRightsOwner;
249  static const char* const aswgIsSource;
250  static const char* const aswgIsLoop;
251  static const char* const aswgIntensity;
252  static const char* const aswgIsFinal;
253  static const char* const aswgOrderRef;
254  static const char* const aswgIsOst;
255  static const char* const aswgIsCinematic;
256  static const char* const aswgIsLicensed;
257  static const char* const aswgIsDiegetic;
258  static const char* const aswgMusicVersion;
259  static const char* const aswgIsrcId;
260  static const char* const aswgTempo;
261  static const char* const aswgTimeSig;
262  static const char* const aswgInKey;
263  static const char* const aswgBillingCode;
264  static const char* const aswgVersion;
266  //==============================================================================
268  [[deprecated ("This string is identical to riffInfoSource, making it impossible to differentiate between the two")]]
269  static const char* const ISRC;
270 
272  static const char* const internationalStandardRecordingCode;
273 
275  static const char* const tracktionLoopInfo;
276 
277  //==============================================================================
278  Array<int> getPossibleSampleRates() override;
279  Array<int> getPossibleBitDepths() override;
280  bool canDoStereo() override;
281  bool canDoMono() override;
282  bool isChannelLayoutSupported (const AudioChannelSet& channelSet) override;
283 
284  //==============================================================================
285  AudioFormatReader* createReaderFor (InputStream* sourceStream,
286  bool deleteStreamIfOpeningFails) override;
287 
288  MemoryMappedAudioFormatReader* createMemoryMappedReader (const File&) override;
289  MemoryMappedAudioFormatReader* createMemoryMappedReader (FileInputStream*) override;
290 
291  AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo,
292  double sampleRateToUse,
293  unsigned int numberOfChannels,
294  int bitsPerSample,
295  const StringPairArray& metadataValues,
296  int qualityOptionIndex) override;
297 
298  AudioFormatWriter* createWriterFor (OutputStream* streamToWriteTo,
299  double sampleRateToUse,
300  const AudioChannelSet& channelLayout,
301  int bitsPerSample,
302  const StringPairArray& metadataValues,
303  int qualityOptionIndex) override;
305 
306  //==============================================================================
312  bool replaceMetadataInFile (const File& wavFile, const StringPairArray& newMetadata);
313 
314 
315 private:
316  JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WavAudioFormat)
317 };
318 
319 } // namespace juce
virtual AudioFormatWriter * createWriterFor(OutputStream *streamToWriteTo, double sampleRateToUse, unsigned int numberOfChannels, int bitsPerSample, const StringPairArray &metadataValues, int qualityOptionIndex)=0
static const char *const aswgRecStudio
static const char *const aswgBillingCode
static const char *const aswgMicDistance
static const char *const riffInfoCopyright
static const char *const acidRootSet
static const char *const aswgUserData
static const char *const riffInfoDirectory
static const char *const bwavCodingHistory
static const char *const bwavTimeReference
static const char *const acidDiskBased
static const char *const aswgEfforts
static const char *const aswgMusicSup
static const char *const aswgTimeSig
static const char *const acidOneShot
static const char *const aswgIsDesigned
static const char *const riffInfoOrganisation
static const char *const aswgCharacterName
static const char *const aswgIsUnion
static const char *const aswgLibrary
static const char *const riffInfoFirstLanguage
static const char *const aswgAmbisonicChnOrder
static const char *const aswgRecordingLoc
static const char *const aswgCreatorId
static const char *const riffInfoEncodedBy
static const char *const riffInfoCommissioned
static const char *const riffInfoMusicBy
static const char *const riffInfoSharpness
static const char *const aswgProducer
static const char *const aswgFxUsed
static const char *const riffInfoStatistics
static const char *const riffInfoNinthLanguage
static const char *const riffInfoDefaultAudioStream
static const char *const riffInfoGenre
static const char *const riffInfoMoreInfoBannerImage
static const char *const aswgProjection
static const char *const riffInfoVegasVersionMajor
static const char *const aswgContentType
static const char *const aswgOriginator
static const char *const riffInfoLocation
static const char *const aswgIsOst
static const char *const aswgRmsPower
static const char *const riffInfoRate
static const char *const riffInfoCostumeDesigner
static const char *const riffInfoVersion
static const char *const aswgActorGender
static const char *const riffInfoLightness
static const char *const riffInfoProductionStudio
static const char *const aswgIsLoop
static const char *const aswgState
static const char *const aswgSongTitle
static const char *const riffInfoProducedBy
static const char *const aswgSpecDensity
static const char *const riffInfoEighthLanguage
static const char *const riffInfoCropped
static const char *const aswgCharacterAge
static const char *const riffInfoRating
static const char *const aswgMicType
static const char *const aswgIsDiegetic
static const char *const riffInfoURL
static const char *const aswgVersion
static const char *const ISRC
static const char *const riffInfoMoreInfoBannerURL
static const char *const riffInfoStartTimecode
static const char *const aswgLoudnessRange
static const char *const bwavOriginatorRef
static const char *const aswgChannelConfig
static const char *const riffInfoTitle
static const char *const aswgIsFinal
static const char *const riffInfoArtist
static const char *const aswgMusicPublisher
static const char *const riffInfoSixthLanguage
static const char *const riffInfoSecondaryGenre
static const char *const riffInfoFifthLanguage
static const char *const riffInfoDotsPerInch
static const char *const riffInfoDistributedBy
static const char *const riffInfoStarring_ISTR
static const char *const aswgAccent
static const char *const riffInfoProductName
static const char *const riffInfoKeywords
static const char *const aswgInstrument
static const char *const aswgSession
static const char *const riffInfoRippedBy
static const char *const riffInfoLanguage
static const char *const riffInfoDateTimeOriginal
static const char *const acidizerFlag
static const char *const riffInfoBaseURL
static const char *const aswgArtist
static const char *const riffInfoProductionDesigner
static const char *const acidDenominator
static const char *const aswgCharacterRole
static const char *const aswgDirection
static const char *const aswgIsSource
static const char *const aswgFxChainName
static const char *const aswgFxName
static const char *const aswgOriginatorStudio
static const char *const riffInfoVegasVersionMinor
static const char *const riffInfoLength
static const char *const aswgUsageRights
static const char *const riffInfoTechnician
static const char *const riffInfoSoftware
static const char *const riffInfoStarring_STAR
static const char *const riffInfoDateCreated
static const char *const riffInfoSeventhLanguage
static const char *const aswgActorName
static const char *const aswgAmbisonicFormat
static const char *const acidBeats
static const char *const aswgMusicVersion
static const char *const aswgMixer
static const char *const riffInfoLogoIconURL
static const char *const tracktionLoopInfo
static const char *const acidNumerator
static const char *const bwavOriginationDate
static const char *const internationalStandardRecordingCode
static const char *const aswgSourceId
static const char *const riffInfoComments
static const char *const riffInfoNumberOfParts
static const char *const aswgVendorCategory
static const char *const bwavDescription
static const char *const riffInfoSoundSchemeTitle
static const char *const aswgPapr
static const char *const aswgEditor
static const char *const aswgComposor
static const char *const aswgSubGenre
static const char *const aswgEffortType
static const char *const riffInfoWatermarkURL
static const char *const aswgLoudness
static const char *const riffInfoTrackNo
static const char *const riffInfoMedium
static const char *const acidStretch
static const char *const aswgRightsOwner
static const char *const aswgImpulseLocation
static const char *const riffInfoThirdLanguage
static const char *const bwavOriginationTime
static const char *const aswgLanguage
static const char *const riffInfoArchivalLocation
static const char *const aswgTimingRestriction
static const char *const aswgIsrcId
static const char *const aswgIsLicensed
static const char *const aswgCategory
static const char *const aswgZeroCrossRate
static const char *const aswgGenre
static const char *const aswgMaxPeak
static const char *const riffInfoMoreInfoText
static const char *const aswgCharacterGender
static const char *const riffInfoCinematographer
static const char *const riffInfoFourthLanguage
static const char *const riffInfoSubject
static const char *const aswgEmotion
static const char *const aswgInKey
static const char *const aswgMicConfig
static const char *const riffInfoRated
static const char *const riffInfoDimension
static const char *const aswgProject
static const char *const aswgIntensity
static const char *const riffInfoEditedBy
static const char *const riffInfoYear
static const char *const riffInfoComment2
static const char *const riffInfoTrackNumber
static const char *const riffInfoEngineer
static const char *const riffInfoWrittenBy
static const char *const aswgSubCategory
static const char *const aswgText
static const char *const riffInfoTimeCode
static const char *const riffInfoSourceFrom
static const char *const riffInfoSource
static const char *const riffInfoLogoURL
static const char *const aswgOrderRef
static const char *const riffInfoCountry
static const char *const aswgAmbisonicNorm
static const char *const aswgUserCategory
static const char *const aswgNotes
static const char *const riffInfoSecondLanguage
static const char *const aswgTempo
static const char *const riffInfoComment
static const char *const riffInfoTapeName
static const char *const aswgDirector
static const char *const aswgRecEngineer
static const char *const aswgCatId
static const char *const riffInfoEndTimecode
static const char *const aswgIsCinematic
static const char *const riffInfoPart
static const char *const bwavOriginator
static const char *const acidTempo
static const char *const acidRootNote
static const char *const riffInfoMoreInfoURL