mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
CoreAudioFormat: Only register suitable file extensions for given StreamKind
This commit is contained in:
parent
e247e06fb7
commit
a4b92bd6c8
1 changed files with 58 additions and 38 deletions
|
|
@ -36,22 +36,69 @@ namespace
|
|||
{
|
||||
const char* const coreAudioFormatName = "CoreAudio supported file";
|
||||
|
||||
StringArray findFileExtensionsForCoreAudioCodecs()
|
||||
StringArray getStringInfo (AudioFilePropertyID property, UInt32 size, void* data)
|
||||
{
|
||||
StringArray extensionsArray;
|
||||
CFObjectHolder<CFArrayRef> extensions;
|
||||
UInt32 sizeOfArray = sizeof (extensions.object);
|
||||
|
||||
if (AudioFileGetGlobalInfo (kAudioFileGlobalInfo_AllExtensions, 0, nullptr, &sizeOfArray, &extensions.object) == noErr)
|
||||
{
|
||||
auto numValues = CFArrayGetCount (extensions.object);
|
||||
const auto err = AudioFileGetGlobalInfo (property,
|
||||
size,
|
||||
data,
|
||||
&sizeOfArray,
|
||||
&extensions.object);
|
||||
|
||||
for (CFIndex i = 0; i < numValues; ++i)
|
||||
extensionsArray.add ("." + String::fromCFString ((CFStringRef) CFArrayGetValueAtIndex (extensions.object, i)));
|
||||
}
|
||||
if (err != noErr)
|
||||
return {};
|
||||
|
||||
const auto numValues = CFArrayGetCount (extensions.object);
|
||||
|
||||
StringArray extensionsArray;
|
||||
|
||||
for (CFIndex i = 0; i < numValues; ++i)
|
||||
extensionsArray.add ("." + String::fromCFString ((CFStringRef) CFArrayGetValueAtIndex (extensions.object, i)));
|
||||
|
||||
return extensionsArray;
|
||||
}
|
||||
|
||||
StringArray findFileExtensionsForCoreAudioCodec (AudioFileTypeID type)
|
||||
{
|
||||
return getStringInfo (kAudioFileGlobalInfo_ExtensionsForType, sizeof (AudioFileTypeID), &type);
|
||||
}
|
||||
|
||||
StringArray findFileExtensionsForCoreAudioCodecs()
|
||||
{
|
||||
return getStringInfo (kAudioFileGlobalInfo_AllExtensions, 0, nullptr);
|
||||
}
|
||||
|
||||
static AudioFileTypeID toAudioFileTypeID (CoreAudioFormat::StreamKind kind)
|
||||
{
|
||||
using StreamKind = CoreAudioFormat::StreamKind;
|
||||
|
||||
switch (kind)
|
||||
{
|
||||
case StreamKind::kAiff: return kAudioFileAIFFType;
|
||||
case StreamKind::kAifc: return kAudioFileAIFCType;
|
||||
case StreamKind::kWave: return kAudioFileWAVEType;
|
||||
case StreamKind::kSoundDesigner2: return kAudioFileSoundDesigner2Type;
|
||||
case StreamKind::kNext: return kAudioFileNextType;
|
||||
case StreamKind::kMp3: return kAudioFileMP3Type;
|
||||
case StreamKind::kMp2: return kAudioFileMP2Type;
|
||||
case StreamKind::kMp1: return kAudioFileMP1Type;
|
||||
case StreamKind::kAc3: return kAudioFileAC3Type;
|
||||
case StreamKind::kAacAdts: return kAudioFileAAC_ADTSType;
|
||||
case StreamKind::kMpeg4: return kAudioFileMPEG4Type;
|
||||
case StreamKind::kM4a: return kAudioFileM4AType;
|
||||
case StreamKind::kM4b: return kAudioFileM4BType;
|
||||
case StreamKind::kCaf: return kAudioFileCAFType;
|
||||
case StreamKind::k3gp: return kAudioFile3GPType;
|
||||
case StreamKind::k3gp2: return kAudioFile3GP2Type;
|
||||
case StreamKind::kAmr: return kAudioFileAMRType;
|
||||
|
||||
case StreamKind::kNone: break;
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -559,45 +606,18 @@ private:
|
|||
return noErr;
|
||||
}
|
||||
|
||||
static AudioFileTypeID toAudioFileTypeID (StreamKind kind)
|
||||
{
|
||||
switch (kind)
|
||||
{
|
||||
case StreamKind::kAiff: return kAudioFileAIFFType;
|
||||
case StreamKind::kAifc: return kAudioFileAIFCType;
|
||||
case StreamKind::kWave: return kAudioFileWAVEType;
|
||||
case StreamKind::kSoundDesigner2: return kAudioFileSoundDesigner2Type;
|
||||
case StreamKind::kNext: return kAudioFileNextType;
|
||||
case StreamKind::kMp3: return kAudioFileMP3Type;
|
||||
case StreamKind::kMp2: return kAudioFileMP2Type;
|
||||
case StreamKind::kMp1: return kAudioFileMP1Type;
|
||||
case StreamKind::kAc3: return kAudioFileAC3Type;
|
||||
case StreamKind::kAacAdts: return kAudioFileAAC_ADTSType;
|
||||
case StreamKind::kMpeg4: return kAudioFileMPEG4Type;
|
||||
case StreamKind::kM4a: return kAudioFileM4AType;
|
||||
case StreamKind::kM4b: return kAudioFileM4BType;
|
||||
case StreamKind::kCaf: return kAudioFileCAFType;
|
||||
case StreamKind::k3gp: return kAudioFile3GPType;
|
||||
case StreamKind::k3gp2: return kAudioFile3GP2Type;
|
||||
case StreamKind::kAmr: return kAudioFileAMRType;
|
||||
|
||||
case StreamKind::kNone: break;
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreAudioReader)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
CoreAudioFormat::CoreAudioFormat()
|
||||
: CoreAudioFormat (StreamKind::kNone)
|
||||
: AudioFormat (coreAudioFormatName, findFileExtensionsForCoreAudioCodecs()),
|
||||
streamKind (StreamKind::kNone)
|
||||
{
|
||||
}
|
||||
|
||||
CoreAudioFormat::CoreAudioFormat (StreamKind kind)
|
||||
: AudioFormat (coreAudioFormatName, findFileExtensionsForCoreAudioCodecs()),
|
||||
: AudioFormat (coreAudioFormatName, findFileExtensionsForCoreAudioCodec (toAudioFileTypeID (kind))),
|
||||
streamKind (kind)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue