Mercurial > otakunoraifu
diff music2/wavfile.h @ 0:223b71206888
Initial import
author | thib |
---|---|
date | Fri, 01 Aug 2008 16:32:45 +0000 |
parents | |
children | 3a6aaeab7b4e |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/music2/wavfile.h @@ -0,0 +1,121 @@ +/* + * wavfile.h WAV file´ØÏ¢ + * + * Copyright: wavfile.c (c) Erik de Castro Lopo erikd@zip.com.au + * + * Modified : 1997-1998 Masaki Chikama (Wren) <chikama@kasumi.ipl.mech.nagoya-u.ac.jp> + * 1998- <masaki-c@is.aist-nara.ac.jp> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * +*/ +#ifndef __WAVEFILE__ +#define __WAVEFILE__ + +#define WW_BADOUTPUTFILE 1 +#define WW_BADWRITEHEADER 2 + +#define WR_BADALLOC 3 +#define WR_BADSEEK 4 +#define WR_BADRIFF 5 +#define WR_BADWAVE 6 +#define WR_BADFORMAT 7 +#define WR_BADFORMATSIZE 8 + +#define WR_NOTPCMFORMAT 9 +#define WR_NODATACHUNK 10 +#define WR_BADFORMATDATA 11 + +/* + * These values represent values found in/or destined for a + * WAV file. + */ +typedef struct { + unsigned int SamplingRate; /* Sampling rate in Hz */ + int Channels; /* Mono or Stereo */ + unsigned short DataBits; /* Sample bit size (8/12/16) */ +} WAVINF; + +struct WAVFILE{ + WAVINF wavinfo; /* WAV file hdr info */ + WAVFILE(void); + static int freq; + static int format; + static int channels; + virtual ~WAVFILE() {}; + virtual int Read(char* buf, int blksize, int blklen) = 0; + virtual void Seek(int count) = 0; + static WAVFILE* MakeConverter(WAVFILE* new_reader); +}; + +struct WAVFILE_Converter : WAVFILE { + WAVFILE* original; + struct SDL_AudioCVT* cvt; + int datasize; + char* tmpbuf; + int Read(char* buf, int blksize, int blklen); + void Seek(int count) { original->Seek(count);} + WAVFILE_Converter(WAVFILE* orig, struct SDL_AudioCVT* cvt); + ~WAVFILE_Converter(); +}; + +struct WAVFILE_Stream : WAVFILE{ + char *data; /* real data */ + char *data_orig; + int data_length; + FILE* stream; + int stream_length; + int stream_length_orig; + int stream_top; + int Read(char* buf, int blksize, int blklen); + void Seek(int count); + WAVFILE_Stream(FILE* stream, int length); + ~WAVFILE_Stream(); +}; + +struct NWAFILE : WAVFILE { + int skip_count; + FILE* stream; + struct NWAData* nwa; + char* data; + int block_size; + int data_len; + + NWAFILE(FILE* stream); + ~NWAFILE(); + void Seek(int count); + int Read(char* buf, int blksize, int blklen); + static char* ReadAll(FILE* stream, int& size); +}; + +struct OggFILE : WAVFILE { + struct OggFILE_impl* pimpl; + + OggFILE(FILE* stream, int size); + ~OggFILE(); + void Seek(int count); + int Read(char* buf, int blksize, int blklen); +}; + +struct MP3FILE : WAVFILE { + struct MP3FILE_impl* pimpl; + + MP3FILE(FILE* stream, int size); + ~MP3FILE(); + void Seek(int count); + int Read(char* buf, int blksize, int blklen); +}; + +#endif /* !__WAVEFILE__ */