This repository has been archived on 2022-06-27. You can view files and clone it, but cannot push or open issues or pull requests.
Xash3DArchive/launch/soundlib/soundlib.h

107 lines
3.3 KiB
C

//=======================================================================
// Copyright XashXT Group 2010 ©
// soundlib.h - engine sound lib
//=======================================================================
#ifndef SOUNDLIB_H
#define SOUNDLIB_H
#include "launch.h"
typedef struct loadwavformat_s
{
const char *formatstring;
const char *ext;
qboolean (*loadfunc)( const char *name, const byte *buffer, size_t filesize );
} loadwavformat_t;
typedef struct savewavformat_s
{
const char *formatstring;
const char *ext;
qboolean (*savefunc)( const char *name, wavdata_t *pix );
} savewavformat_t;
typedef struct streamformat_s
{
const char *formatstring;
const char *ext;
stream_t *(*openfunc)( const char *filename );
long (*readfunc)( stream_t *stream, long bytes, void *buffer );
void (*freefunc)( stream_t *stream );
} streamformat_t;
typedef struct sndlib_s
{
const loadwavformat_t *baseformats; // used for loading internal images
const loadwavformat_t *loadformats;
const savewavformat_t *saveformats;
const streamformat_t *streamformat; // music stream
// current sound state
int type; // sound type
int rate; // num samples per second (e.g. 11025 - 11 khz)
int width; // resolution - bum bits divided by 8 (8 bit is 1, 16 bit is 2)
int channels; // num channels (1 - mono, 2 - stereo)
int loopstart; // start looping from
uint samples; // total samplecount in sound
uint flags; // additional sound flags
size_t size; // sound unpacked size (for bounds checking)
byte *wav; // sound pointer (see sound_type for details)
byte *tempbuffer; // for convert operations
int cmd_flags;
} sndlib_t;
typedef struct stream_s
{
const streamformat_t *format; // streamformat to operate
// current stream state
file_t *file; // stream file
int width; // resolution - num bits divided by 8 (8 bit is 1, 16 bit is 2)
int rate; // stream rate
int channels; // stream channels
int type; // wavtype
size_t size; // total stream size
int pos; // keep track wav position
void *ptr;
};
/*
========================================================================
.OGG sound format (OGG Vorbis)
========================================================================
*/
// defined in sound_ogg.c
extern sndlib_t sound;
//
// formats load
//
qboolean Sound_LoadWAV( const char *name, const byte *buffer, size_t filesize );
qboolean Sound_LoadOGG( const char *name, const byte *buffer, size_t filesize );
qboolean Sound_LoadMPG( const char *name, const byte *buffer, size_t filesize );
qboolean Sound_LoadSND( const char *name, const byte *buffer, size_t filesize ); // snd - doom1 sounds
//
// stream operate
//
stream_t *Stream_OpenWAV( const char *filename );
long Stream_ReadWAV( stream_t *stream, long bytes, void *buffer );
void Stream_FreeWAV( stream_t *stream );
stream_t *Stream_OpenOGG( const char *filename );
long Stream_ReadOGG( stream_t *stream, long bytes, void *buffer );
void Stream_FreeOGG( stream_t *stream );
stream_t *Stream_OpenMPG( const char *filename );
long Stream_ReadMPG( stream_t *stream, long bytes, void *buffer );
void Stream_FreeMPG( stream_t *stream );
//
// formats save
//
qboolean Sound_SaveWAV( const char *name, wavdata_t *pix );
#endif//SOUNDLIB_H