Browse Source

Added acid chunk metadata loading to WavAudioFormat

tags/2021-05-28
jules 12 years ago
parent
commit
5618f6b904
2 changed files with 80 additions and 0 deletions
  1. +58
    -0
      modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp
  2. +22
    -0
      modules/juce_audio_formats/codecs/juce_WavAudioFormat.h

+ 58
- 0
modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp View File

@@ -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;


+ 22
- 0
modules/juce_audio_formats/codecs/juce_WavAudioFormat.h View File

@@ -110,6 +110,28 @@ public:
const int64 timeReferenceSamples,
const String& codingHistory);
//==============================================================================
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidOneShot;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidRootSet;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidStretch;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidDiskBased;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidizerFlag;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidRootNote;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidBeats;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidDenominator;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidNumerator;
/** Metadata property name used when reading a WAV file with an acid chunk. */
static const char* const acidTempo;
//==============================================================================
Array<int> getPossibleSampleRates();
Array<int> getPossibleBitDepths();


Loading…
Cancel
Save