|
|
|
@@ -55,6 +55,17 @@ StringPairArray WavAudioFormat::createBWAVMetadata (const String& description, |
|
|
|
return m;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char* const WavAudioFormat::acidOneShot = "acid one shot";
|
|
|
|
const char* const WavAudioFormat::acidRootSet = "acid root set";
|
|
|
|
const char* const WavAudioFormat::acidStretch = "acid stretch";
|
|
|
|
const char* const WavAudioFormat::acidDiskBased = "acid disk based";
|
|
|
|
const char* const WavAudioFormat::acidizerFlag = "acidizer flag";
|
|
|
|
const char* const WavAudioFormat::acidRootNote = "acid root note";
|
|
|
|
const char* const WavAudioFormat::acidBeats = "acid beats";
|
|
|
|
const char* const WavAudioFormat::acidDenominator = "acid denominator";
|
|
|
|
const char* const WavAudioFormat::acidNumerator = "acid numerator";
|
|
|
|
const char* const WavAudioFormat::acidTempo = "acid tempo";
|
|
|
|
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
namespace WavFileHelpers
|
|
|
|
@@ -457,6 +468,49 @@ namespace WavFileHelpers |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
struct AcidChunk
|
|
|
|
{
|
|
|
|
/** Reads an acid RIFF chunk from a stream positioned just after the size byte. */
|
|
|
|
AcidChunk (InputStream& input, int length)
|
|
|
|
{
|
|
|
|
zerostruct (*this);
|
|
|
|
input.read (this, jmin ((int) sizeof (*this), length));
|
|
|
|
}
|
|
|
|
|
|
|
|
void addToMetadata (StringPairArray& values) const
|
|
|
|
{
|
|
|
|
setBoolFlag (values, WavAudioFormat::acidOneShot, 0x01);
|
|
|
|
setBoolFlag (values, WavAudioFormat::acidRootSet, 0x02);
|
|
|
|
setBoolFlag (values, WavAudioFormat::acidStretch, 0x04);
|
|
|
|
setBoolFlag (values, WavAudioFormat::acidDiskBased, 0x08);
|
|
|
|
setBoolFlag (values, WavAudioFormat::acidizerFlag, 0x10);
|
|
|
|
|
|
|
|
if (flags & 0x02) // root note set
|
|
|
|
values.set (WavAudioFormat::acidRootNote, String (rootNote));
|
|
|
|
|
|
|
|
values.set (WavAudioFormat::acidBeats, String (numBeats));
|
|
|
|
values.set (WavAudioFormat::acidDenominator, String (meterDenominator));
|
|
|
|
values.set (WavAudioFormat::acidNumerator, String (meterNumerator));
|
|
|
|
values.set (WavAudioFormat::acidTempo, String (tempo));
|
|
|
|
}
|
|
|
|
|
|
|
|
void setBoolFlag (StringPairArray& values, const char* name, int32 mask) const
|
|
|
|
{
|
|
|
|
values.set (name, (flags & mask) ? "1" : "0");
|
|
|
|
}
|
|
|
|
|
|
|
|
int32 flags;
|
|
|
|
int16 rootNote;
|
|
|
|
int16 reserved1;
|
|
|
|
float reserved2;
|
|
|
|
int32 numBeats;
|
|
|
|
int16 meterDenominator;
|
|
|
|
int16 meterNumerator;
|
|
|
|
float tempo;
|
|
|
|
|
|
|
|
} JUCE_PACKED;
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
struct ExtensibleWavSubFormat
|
|
|
|
{
|
|
|
|
@@ -693,6 +747,10 @@ public: |
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (chunkType == chunkName ("acid"))
|
|
|
|
{
|
|
|
|
AcidChunk (*input, length).addToMetadata (metadataValues);
|
|
|
|
}
|
|
|
|
else if (chunkEnd <= input->getPosition())
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
|