sm64pc/tools/audiofile-0.3.6/libaudiofile/WAVE.h
2020-05-07 20:21:22 +02:00

101 lines
2.8 KiB
C++

/*
Audio File Library
Copyright (C) 1998-2000, 2003, 2010-2012, Michael Pruett <michael@68k.org>
Copyright (C) 2002-2003, Davy Durham
Copyright (C) 2000-2001, Silicon Graphics, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301 USA
*/
/*
WAVE.h
This file contains structures and constants related to the RIFF
WAVE sound file format.
*/
#ifndef WAVE_H
#define WAVE_H
#include "Compiler.h"
#include "FileHandle.h"
#include <stdint.h>
#define _AF_WAVE_NUM_INSTPARAMS 7
extern const InstParamInfo _af_wave_inst_params[_AF_WAVE_NUM_INSTPARAMS];
#define _AF_WAVE_NUM_COMPTYPES 4
extern const int _af_wave_compression_types[_AF_WAVE_NUM_COMPTYPES];
struct UUID;
class WAVEFile : public _AFfilehandle
{
public:
static bool recognize(File *fh);
static AFfilesetup completeSetup(AFfilesetup);
WAVEFile();
status readInit(AFfilesetup) OVERRIDE;
status writeInit(AFfilesetup) OVERRIDE;
status update() OVERRIDE;
bool isInstrumentParameterValid(AUpvlist, int) OVERRIDE;
private:
AFfileoffset m_factOffset; // start of fact (frame count) chunk
AFfileoffset m_miscellaneousOffset;
AFfileoffset m_markOffset;
AFfileoffset m_dataSizeOffset;
/*
The index into the coefficient array is of type
uint8_t, so we can safely limit msadpcmCoefficients to
be 256 coefficient pairs.
*/
int m_msadpcmNumCoefficients;
int16_t m_msadpcmCoefficients[256][2];
status parseFrameCount(const Tag &type, uint32_t size);
status parseFormat(const Tag &type, uint32_t size);
status parseData(const Tag &type, uint32_t size);
status parsePlayList(const Tag &type, uint32_t size);
status parseCues(const Tag &type, uint32_t size);
status parseADTLSubChunk(const Tag &type, uint32_t size);
status parseINFOSubChunk(const Tag &type, uint32_t size);
status parseList(const Tag &type, uint32_t size);
status parseInstrument(const Tag &type, uint32_t size);
status writeFormat();
status writeFrameCount();
status writeMiscellaneous();
status writeCues();
status writeData();
bool readUUID(UUID *g);
bool writeUUID(const UUID *g);
bool writeZString(const char *);
size_t zStringLength(const char *);
void initCompressionParams();
void initIMACompressionParams();
void initMSADPCMCompressionParams();
};
#endif