Loading...
Searching...
No Matches
juce_AudioFormatManager.cpp
/*
==============================================================================
This file is part of the JUCE library.
Copyright (c) 2022 - Raw Material Software Limited
JUCE is an open source library subject to commercial or open-source
licensing.
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
Agreement and JUCE Privacy Policy.
End User License Agreement: www.juce.com/juce-7-licence
Privacy Policy: www.juce.com/juce-privacy-policy
Or: You may also use this code under the terms of the GPL v3 (see
www.gnu.org/licenses).
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
namespace juce
{
AudioFormatManager::AudioFormatManager() {}
AudioFormatManager::~AudioFormatManager() {}
//==============================================================================
void AudioFormatManager::registerFormat (AudioFormat* newFormat, bool makeThisTheDefaultFormat)
{
jassert (newFormat != nullptr);
if (newFormat != nullptr)
{
#if JUCE_DEBUG
for (auto* af : knownFormats)
{
if (af->getFormatName() == newFormat->getFormatName())
jassertfalse; // trying to add the same format twice!
}
#endif
if (makeThisTheDefaultFormat)
defaultFormatIndex = getNumKnownFormats();
knownFormats.add (newFormat);
}
}
void AudioFormatManager::registerBasicFormats()
{
registerFormat (new WavAudioFormat(), true);
registerFormat (new AiffAudioFormat(), false);
#if JUCE_USE_FLAC
registerFormat (new FlacAudioFormat(), false);
#endif
#if JUCE_USE_OGGVORBIS
registerFormat (new OggVorbisAudioFormat(), false);
#endif
#if JUCE_MAC || JUCE_IOS
registerFormat (new CoreAudioFormat(), false);
#endif
#if JUCE_USE_MP3AUDIOFORMAT
registerFormat (new MP3AudioFormat(), false);
#endif
#if JUCE_USE_WINDOWS_MEDIA_FORMAT
registerFormat (new WindowsMediaAudioFormat(), false);
#endif
}
void AudioFormatManager::clearFormats()
{
knownFormats.clear();
defaultFormatIndex = 0;
}
int AudioFormatManager::getNumKnownFormats() const { return knownFormats.size(); }
AudioFormat* AudioFormatManager::getKnownFormat (int index) const { return knownFormats[index]; }
AudioFormat* AudioFormatManager::getDefaultFormat() const { return getKnownFormat (defaultFormatIndex); }
AudioFormat* AudioFormatManager::findFormatForFileExtension (const String& fileExtension) const
{
if (! fileExtension.startsWithChar ('.'))
return findFormatForFileExtension ("." + fileExtension);
for (auto* af : knownFormats)
if (af->getFileExtensions().contains (fileExtension, true))
return af;
return nullptr;
}
String AudioFormatManager::getWildcardForAllFormats() const
{
StringArray extensions;
for (auto* af : knownFormats)
extensions.addArray (af->getFileExtensions());
extensions.trim();
extensions.removeEmptyStrings();
for (auto& e : extensions)
e = (e.startsWithChar ('.') ? "*" : "*.") + e;
extensions.removeDuplicates (true);
return extensions.joinIntoString (";");
}
//==============================================================================
AudioFormatReader* AudioFormatManager::createReaderFor (const File& file)
{
// you need to actually register some formats before the manager can
// use them to open a file!
jassert (getNumKnownFormats() > 0);
for (auto* af : knownFormats)
if (af->canHandleFile (file))
if (auto in = file.createInputStream())
if (auto* r = af->createReaderFor (in.release(), true))
return r;
return nullptr;
}
AudioFormatReader* AudioFormatManager::createReaderFor (std::unique_ptr<InputStream> audioFileStream)
{
// you need to actually register some formats before the manager can
// use them to open a file!
jassert (getNumKnownFormats() > 0);
if (audioFileStream != nullptr)
{
auto originalStreamPos = audioFileStream->getPosition();
for (auto* af : knownFormats)
{
if (auto* r = af->createReaderFor (audioFileStream.get(), false))
{
audioFileStream.release();
return r;
}
audioFileStream->setPosition (originalStreamPos);
// the stream that is passed-in must be capable of being repositioned so
// that all the formats can have a go at opening it.
jassert (audioFileStream->getPosition() == originalStreamPos);
}
}
return nullptr;
}
} // namespace juce
juce::AiffAudioFormat
Definition juce_AiffAudioFormat.h:38
juce::AudioFormatManager::createReaderFor
AudioFormatReader * createReaderFor(const File &audioFile)
Definition juce_AudioFormatManager.cpp:120
juce::AudioFormatManager::AudioFormatManager
AudioFormatManager()
Definition juce_AudioFormatManager.cpp:29
juce::AudioFormatManager::getKnownFormat
AudioFormat * getKnownFormat(int index) const
Definition juce_AudioFormatManager.cpp:87
juce::AudioFormatManager::registerFormat
void registerFormat(AudioFormat *newFormat, bool makeThisTheDefaultFormat)
Definition juce_AudioFormatManager.cpp:33
juce::AudioFormatManager::~AudioFormatManager
~AudioFormatManager()
Definition juce_AudioFormatManager.cpp:30
juce::AudioFormatManager::getDefaultFormat
AudioFormat * getDefaultFormat() const
Definition juce_AudioFormatManager.cpp:88
juce::AudioFormatManager::findFormatForFileExtension
AudioFormat * findFormatForFileExtension(const String &fileExtension) const
Definition juce_AudioFormatManager.cpp:90
juce::AudioFormatManager::getNumKnownFormats
int getNumKnownFormats() const
Definition juce_AudioFormatManager.cpp:86
juce::AudioFormatManager::getWildcardForAllFormats
String getWildcardForAllFormats() const
Definition juce_AudioFormatManager.cpp:102
juce::AudioFormatManager::clearFormats
void clearFormats()
Definition juce_AudioFormatManager.cpp:80
juce::AudioFormatManager::registerBasicFormats
void registerBasicFormats()
Definition juce_AudioFormatManager.cpp:54
juce::AudioFormatReader
Definition juce_AudioFormatReader.h:44
juce::AudioFormat
Definition juce_AudioFormat.h:39
juce::AudioFormat::getFormatName
const String & getFormatName() const
Definition juce_AudioFormat.cpp:52
juce::File
Definition juce_File.h:45
juce::File::createInputStream
std::unique_ptr< FileInputStream > createInputStream() const
Definition juce_File.cpp:732
juce::StringArray
Definition juce_StringArray.h:35
juce::StringArray::joinIntoString
String joinIntoString(StringRef separatorString, int startIndex=0, int numberOfElements=-1) const
Definition juce_StringArray.cpp:289
juce::StringArray::removeEmptyStrings
void removeEmptyStrings(bool removeWhitespaceStrings=true)
Definition juce_StringArray.cpp:250
juce::StringArray::addArray
void addArray(const StringArray &other, int startIndex=0, int numElementsToAdd=-1)
Definition juce_StringArray.cpp:159
juce::StringArray::removeDuplicates
void removeDuplicates(bool ignoreCase)
Definition juce_StringArray.cpp:411
juce::StringArray::trim
void trim()
Definition juce_StringArray.cpp:266
juce::String
Definition juce_String.h:53
juce::String::startsWithChar
bool startsWithChar(juce_wchar character) const noexcept
Definition juce_String.cpp:1403
juce::WavAudioFormat
Definition juce_WavAudioFormat.h:38