2011-03-25 05:06:49 +00:00
|
|
|
/* SPU2-X, A plugin for Emulating the Sound Processing Unit of the Playstation 2
|
|
|
|
* Developed and maintained by the Pcsx2 Development Team.
|
|
|
|
*
|
|
|
|
* The file is based on WavFile.h from SoundTouch library.
|
|
|
|
* Original portions are (c) 2009 by Olli Parviainen (oparviai 'at' iki.fi)
|
|
|
|
*
|
|
|
|
* SPU2-X 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 Found-
|
|
|
|
* ation, either version 3 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* SPU2-X 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 SPU2-X. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
// Note the file is mostly a copy paste of the WavFile.h from SoundTouch library. It was
|
|
|
|
// shrunken to support only output 16 bits wav files
|
|
|
|
|
|
|
|
#ifndef WAVFILE_H
|
|
|
|
#define WAVFILE_H
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#ifndef uint
|
|
|
|
typedef unsigned int uint;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/// WAV audio file 'riff' section header
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
char riff_char[4];
|
|
|
|
int package_len;
|
|
|
|
char wave[4];
|
|
|
|
} WavRiff;
|
|
|
|
|
|
|
|
/// WAV audio file 'format' section header
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
char fmt[4];
|
|
|
|
int format_len;
|
|
|
|
short fixed;
|
|
|
|
short channel_number;
|
|
|
|
int sample_rate;
|
|
|
|
int byte_rate;
|
|
|
|
short byte_per_sample;
|
|
|
|
short bits_per_sample;
|
|
|
|
} WavFormat;
|
|
|
|
|
|
|
|
/// WAV audio file 'data' section header
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
char data_field[4];
|
|
|
|
uint data_len;
|
|
|
|
} WavData;
|
|
|
|
|
|
|
|
|
|
|
|
/// WAV audio file header
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
WavRiff riff;
|
|
|
|
WavFormat format;
|
|
|
|
WavData data;
|
|
|
|
} WavHeader;
|
|
|
|
|
|
|
|
|
|
|
|
/// Class for writing WAV audio files.
|
|
|
|
class WavOutFile
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
/// Pointer to the WAV file
|
|
|
|
FILE *fptr;
|
|
|
|
|
|
|
|
/// WAV file header data.
|
|
|
|
WavHeader header;
|
|
|
|
|
|
|
|
/// Counter of how many bytes have been written to the file so far.
|
|
|
|
int bytesWritten;
|
|
|
|
|
|
|
|
/// Fills in WAV file header information.
|
|
|
|
void fillInHeader(const uint sampleRate, const uint bits, const uint channels);
|
|
|
|
|
|
|
|
/// Finishes the WAV file header by supplementing information of amount of
|
|
|
|
/// data written to file etc
|
|
|
|
void finishHeader();
|
|
|
|
|
|
|
|
/// Writes the WAV file header.
|
|
|
|
void writeHeader();
|
|
|
|
|
|
|
|
public:
|
|
|
|
/// Constructor: Creates a new WAV file. Throws a 'runtime_error' exception
|
|
|
|
/// if file creation fails.
|
|
|
|
WavOutFile(const char *fileName, ///< Filename
|
|
|
|
int sampleRate, ///< Sample rate (e.g. 44100 etc)
|
|
|
|
int bits, ///< Bits per sample (8 or 16 bits)
|
|
|
|
int channels ///< Number of channels (1=mono, 2=stereo)
|
|
|
|
);
|
|
|
|
|
|
|
|
/// Destructor: Finalizes & closes the WAV file.
|
|
|
|
~WavOutFile();
|
|
|
|
|
|
|
|
/// Write data to WAV file. Throws a 'runtime_error' exception if writing to
|
|
|
|
/// file fails.
|
|
|
|
void write(const short *buffer, ///< Pointer to sample data buffer.
|
|
|
|
int numElems ///< How many array items are to be written to file.
|
|
|
|
);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|