#ifndef _DOSAUDIO_H_
 
#define _DOSAUDIO_H_
 
 
 
#include "brender/brender.h"
 
#include "s3_defs.h"
 
 
 
extern int gS3_enabled;
 
extern int gS3_last_error;
 
extern tS3_channel gS3_channel_template;
 
extern tS3_sound_source* gS3_sound_sources;
 
extern int gS3_service_time_delta;
 
extern int gS3_inside_cockpit;
 
 
 
int S3Init(char* path, int low_memory_mode);
 
 
 
void S3Enable(void);
 
void S3Disable(void);
 
 
 
int S3OpenOutputDevices(void);
 
int S3OpenSampleDevice(void);
 
int S3OpenCDADevice(void);
 
 
 
int S3OpenSampleDevice(void);
 
void S3CloseDevices(void);
 
tS3_outlet* S3CreateOutlet(int unk1, int pChannel_count);
 
int S3CreateOutletChannels(tS3_outlet* outlet, int pChannel_count);
 
void S3ReleaseOutlet(tS3_outlet* outlet);
 
int S3UnbindChannels(tS3_outlet* outlet);
 
void S3ReleaseUnboundChannels(void);
 
tS3_channel* S3AllocateChannel(tS3_outlet* outlet, int priority);
 
int S3StopChannel(tS3_channel* chan);
 
 
 
void S3ReleaseOutlet(tS3_outlet* outlet);
 
int S3StopOutletSound(tS3_outlet* pOutlet);
 
void S3StopAllOutletSounds(void);
 
 
 
int S3ReleaseSound(tS3_sound_id id);
 
 
 
char* S3LoadSoundBankFile(char* pThe_path);
 
int S3LoadSoundbank(const char* pSoundbank_filename, int pLow_memory_mode);
 
 
 
void S3SoundBankReaderNextLine(tS3_soundbank_read_ctx* ctx);
 
void S3SoundBankReaderSkipWhitespace(tS3_soundbank_read_ctx* ctx);
 
void S3SoundBankReaderSkipToNewline(tS3_soundbank_read_ctx* ctx);
 
void S3SoundBankReaderAdvance(tS3_soundbank_read_ctx* buffer, int bytes_read);
 
int S3SoundBankReaderReadFilename(char** filename, tS3_soundbank_read_ctx* ctx, const char* dir_name);
 
int S3SoundBankReadEntry(tS3_soundbank_read_ctx* ctx, char* dir_name, int low_memory_mode);
 
 
 
tS3_descriptor* S3CreateDescriptor(void);
 
tS3_descriptor* S3GetDescriptorByID(tS3_sound_id id);
 
 
 
char* S3GetCurrentDir(void);
 
 
 
void S3CalculateRandomizedFields(tS3_channel* chan, tS3_descriptor* desc);
 
int S3IRandomBetween(int pMin, int pMax, int pDefault);
 
int S3IRandomBetweenLog(int pMin, int pMax, int pDefault);
 
double S3FRandomBetween(double pMin, double pMax);
 
 
 
int S3GenerateTag(tS3_outlet* outlet);
 
int S3ReleaseSound(tS3_sound_id id);
 
int S3SetOutletVolume(tS3_outlet* pOutlet, tS3_volume pVolume);
 
tS3_channel* S3GetChannelForTag(tS3_sound_tag tag);
 
int S3ChangeVolume(tS3_sound_tag pTag, tS3_volume pVolume);
 
 
 
void S3ServiceOutlets(void);
 
int S3ServiceChannel(tS3_channel* chan);
 
void S3Service(int inside_cockpit, int unk1);
 
 
 
int S3SoundStillPlaying(tS3_sound_tag pSound);
 
 
 
tS3_sound_source* S3CreateSoundSourceBR(br_vector3* pPosition, br_vector3* pVelocity, tS3_outlet* pBound_outlet);
 
tS3_sound_source* S3CreateSoundSource(void* pPosition, void* pVelocity, tS3_outlet* pBound_outlet);
 
 
 
#endif