Browse Source

Added support for getting metadata from .caf files in the CoreAudioFormat class

tags/2021-05-28
jules 9 years ago
parent
commit
bb1b362162
1 changed files with 18 additions and 9 deletions
  1. +18
    -9
      modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp

+ 18
- 9
modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp View File

@@ -112,19 +112,28 @@ struct CoreAudioFormatMetatdata
}; };
//============================================================================== //==============================================================================
struct UserDefinedChunk
static StringPairArray parseUserDefinedChunk (InputStream& input, int64 size)
{ {
UserDefinedChunk (InputStream& input, int64 size)
StringPairArray infoStrings;
const int64 originalPosition = input.getPosition();
uint8 uuid[16];
input.read (uuid, sizeof (uuid));
if (memcmp (uuid, "\x29\x81\x92\x73\xB5\xBF\x4A\xEF\xB7\x8D\x62\xD1\xEF\x90\xBB\x2C", 16) == 0)
{ {
// a user defined chunk contains 16 bytes of a UUID first
uuid[1] = input.readInt64BigEndian();
uuid[0] = input.readInt64BigEndian();
const uint32 numEntries = (uint32) input.readIntBigEndian();
input.skipNextBytes (size - 16);
for (uint32 i = 0; i < numEntries && input.getPosition() < originalPosition + size; ++i)
{
String keyName = input.readString();
infoStrings.set (keyName, input.readString());
}
} }
int64 uuid[2];
};
input.setPosition (originalPosition + size);
return infoStrings;
}
//============================================================================== //==============================================================================
static StringPairArray parseMidiChunk (InputStream& input, int64 size) static StringPairArray parseMidiChunk (InputStream& input, int64 size)
@@ -288,7 +297,7 @@ struct CoreAudioFormatMetatdata
} }
else if (chunkHeader.chunkType == chunkName ("uuid")) else if (chunkHeader.chunkType == chunkName ("uuid"))
{ {
UserDefinedChunk userDefinedChunk (input, chunkHeader.chunkSize);
metadataValues.addArray (parseUserDefinedChunk (input, chunkHeader.chunkSize));
} }
else if (chunkHeader.chunkType == chunkName ("data")) else if (chunkHeader.chunkType == chunkName ("data"))
{ {


Loading…
Cancel
Save