//============================================================================== static bool read (InputStream& input, StringPairArray& metadataValues) { const int64 originalPos = input.getPosition(); const FileHeader cafFileHeader (input); const bool isCafFile = cafFileHeader.fileType == chunkName ("caff"); if (isCafFile) { while (! input.isExhausted()) { const ChunkHeader chunkHeader (input); if (chunkHeader.chunkType == chunkName ("desc")) { AudioDescriptionChunk audioDescriptionChunk (input); } else if (chunkHeader.chunkType == chunkName ("uuid")) { UserDefinedChunk userDefinedChunk (input, chunkHeader.chunkSize); } else if (chunkHeader.chunkType == chunkName ("data")) { // -1 signifies an unknown data size so the data has to be at the // end of the file so we must have finished the header if (chunkHeader.chunkSize == -1) break; input.skipNextBytes (chunkHeader.chunkSize); } else if (chunkHeader.chunkType == chunkName ("midi")) { metadataValues.addArray (parseMidiChunk (input, chunkHeader.chunkSize)); } else if (chunkHeader.chunkType == chunkName ("info")) { metadataValues.addArray (parseInformationChunk (input)); } else { // we aren't decoding this chunk yet so just skip over it input.skipNextBytes (chunkHeader.chunkSize); } } } input.setPosition (originalPos); return isCafFile; }
//============================================================================== static void setData (const AnalyticsDestination::AnalyticsEvent& event, StringPairArray& data) { data.set ("ea", event.name); if (event.parameters.getAllKeys().contains ("label")) data.set ("el", event.parameters.getValue ("label", {})); data.addArray (event.userProperties); }