159 lines
7.1 KiB
C
159 lines
7.1 KiB
C
//
|
|
// Copyright 2020 Electronic Arts Inc.
|
|
//
|
|
// TiberianDawn.DLL and RedAlert.dll and corresponding source code 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 3 of the License, or (at your option) any later version.
|
|
|
|
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
|
|
// in the hope that it will be useful, but with permitted additional restrictions
|
|
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
|
|
// distributed with this program. You should have received a copy of the
|
|
// GNU General Public License along with permitted additional restrictions
|
|
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
|
|
|
|
/***************************************************************************
|
|
** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
|
|
***************************************************************************
|
|
* *
|
|
* Project Name : Westwood 32 bit Library *
|
|
* *
|
|
* File Name : AUDIO.H *
|
|
* *
|
|
* Programmer : Phil W. Gorrow *
|
|
* *
|
|
* Start Date : March 10, 1995 *
|
|
* *
|
|
* Last Update : March 10, 1995 [PWG] *
|
|
* *
|
|
*-------------------------------------------------------------------------*
|
|
* Functions: *
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
|
#include "wwstd.h"
|
|
|
|
/*=========================================================================*/
|
|
/* AUD file header type */
|
|
/*=========================================================================*/
|
|
#define AUD_FLAG_STEREO 1
|
|
#define AUD_FLAG_16BIT 2
|
|
|
|
// PWG 3-14-95: This structure used to have bit fields defined for Stereo
|
|
// and Bits. These were removed because watcom packs them into a 32 bit
|
|
// flag entry even though they could have fit in a 8 bit entry.
|
|
//#pragma pack(1);
|
|
#pragma pack(push,1)
|
|
typedef struct {
|
|
unsigned short int Rate; // Playback rate (hertz).
|
|
long Size; // Size of data (bytes).
|
|
long UncompSize; // Size of data (bytes).
|
|
unsigned char Flags; // Holds flags for info
|
|
// 1: Is the sample stereo?
|
|
// 2: Is the sample 16 bits?
|
|
unsigned char Compression; // What kind of compression for this sample?
|
|
} AUDHeaderType;
|
|
#pragma pack(pop)
|
|
|
|
/*=========================================================================*/
|
|
/* There can be a different sound driver for sound effects, digitized */
|
|
/* samples, and musical scores. Each one must be of these specified */
|
|
/* types. */
|
|
/*=========================================================================*/
|
|
typedef enum {
|
|
SAMPLE_NONE, // No digitized sounds will be played.
|
|
SAMPLE_SB, // Sound Blaster digitized driver.
|
|
SAMPLE_SBPRO, // Sound Blaster Pro digitized driver.
|
|
SAMPLE_PAS, // Pro-Audio Spectrum digitized driver.
|
|
SAMPLE_ADLIBG, // Adlib-Gold digitized driver.
|
|
SAMPLE_TANDY, // Tandy 'compatible' driver.
|
|
SAMPLE_PCSPKR, // PC speaker digitized driver (The Audio Solution driver).
|
|
SAMPLE_ADLIB, // Adlib digitized driver (The Audio Solution driver).
|
|
SAMPLE_TEMP=0x1000,
|
|
SAMPLE_LAST
|
|
} Sample_Type;
|
|
|
|
typedef enum {
|
|
SCORE_NONE, // No scores will be played.
|
|
SCORE_ALFX, // Westwood's ALFX adlib compatable driver.
|
|
SCORE_WWPCSPKR, // Westwood's PC-speaker driver (obsolete).
|
|
SCORE_WWTANDY, // Westwood's PC-speaker driver with Tandy mod (obsolete).
|
|
SCORE_PCSPKR, // PC speaker XMIDI driver.
|
|
SCORE_TANDY, // Tandy XMIDI driver.
|
|
SCORE_MT32, // MT-32 / LAPC-1 Roland XMIDI driver.
|
|
SCORE_CANVAS, // Sound Canvas SC-55.
|
|
SCORE_ADLIB, // Adlib XMIDI driver.
|
|
SCORE_ADLIBG, // Adlib Gold XMIDI driver.
|
|
SCORE_PASFM, // Pro Audio Spectrum XMIDI driver.
|
|
SCORE_SBFM, // Sound Blaster XMIDI driver.
|
|
SCORE_SBP1FM, // Sound Blaster Pro (YM3812) XMIDI driver.
|
|
SCORE_SBP2FM, // Sound Blaster Pro (OPL3) XMIDI driver (Can't use with SFX_ALFX).
|
|
SCORE_TEMP=0x1000,
|
|
SCORE_LAST
|
|
} Score_Type;
|
|
|
|
typedef enum {
|
|
SFX_NONE, // No sound effects will be played.
|
|
SFX_ALFX, // Westwood's ALFX adlib compatable driver.
|
|
SFX_WWPCSPKR, // Westwood's PC-speaker driver.
|
|
SFX_WWTANDY, // Westwood's PC-speaker driver with Tandy mod.
|
|
SFX_PCSPKR, // PC speaker XMIDI driver.
|
|
SFX_TANDY, // Tandy XMIDI driver.
|
|
SFX_MT32, // MT-32 / LAPC-1 Roland XMIDI driver.
|
|
SFX_CANVAS, // Sound Canvas SC-55.
|
|
SFX_ADLIB, // Adlib XMIDI driver.
|
|
SFX_ADLIBG, // Adlib Gold XMIDI driver.
|
|
SFX_PASFM, // Pro Audio Spectrum XMIDI driver.
|
|
SFX_SBFM, // Sound Blaster XMIDI driver.
|
|
SFX_SBP1FM, // Sound Blaster Pro (YM3812) XMIDI driver.
|
|
SFX_SBP2FM, // Sound Blaster Pro (OPL3) XMIDI driver.
|
|
SFX_TEMP=0x1000,
|
|
SFX_LAST
|
|
} SFX_Type;
|
|
|
|
|
|
|
|
/*=========================================================================*/
|
|
/* The following prototypes are for the file: SOUNDIO.CPP */
|
|
/*=========================================================================*/
|
|
int File_Stream_Sample(char const *filename, BOOL real_time_start = FALSE);
|
|
int File_Stream_Sample_Vol(char const *filename, int volume, BOOL real_time_start = FALSE);
|
|
void __cdecl Sound_Callback(void);
|
|
void __cdecl far maintenance_callback(void);
|
|
void *Load_Sample(char const *filename);
|
|
long Load_Sample_Into_Buffer(char const *filename, void *buffer, long size);
|
|
long Sample_Read(int fh, void *buffer, long size);
|
|
void Free_Sample(void const *sample);
|
|
BOOL Audio_Init( HWND window , int bits_per_sample, BOOL stereo , int rate , int reverse_channels);
|
|
void Sound_End(void);
|
|
void Stop_Sample(int handle);
|
|
BOOL Sample_Status(int handle);
|
|
BOOL Is_Sample_Playing(void const * sample);
|
|
void Stop_Sample_Playing(void const * sample);
|
|
int Play_Sample(void const *sample, int priority=0xFF, int volume=0xFF, signed short panloc = 0x0);
|
|
int Play_Sample_Handle(void const *sample, int priority, int volume, signed short panloc, int id);
|
|
int Set_Sound_Vol(int volume);
|
|
int Set_Score_Vol(int volume);
|
|
void Fade_Sample(int handle, int ticks);
|
|
int Get_Free_Sample_Handle(int priority);
|
|
int Get_Digi_Handle(void);
|
|
long Sample_Length(void const *sample);
|
|
void Restore_Sound_Buffers (void);
|
|
BOOL Set_Primary_Buffer_Format(void);
|
|
BOOL Start_Primary_Sound_Buffer (BOOL forced);
|
|
void Stop_Primary_Sound_Buffer (void);
|
|
|
|
/*
|
|
** Function to call if we detect focus loss
|
|
*/
|
|
extern void (*Audio_Focus_Loss_Function)(void);
|
|
|
|
|
|
extern int Misc;
|
|
extern SFX_Type SoundType;
|
|
extern Sample_Type SampleType;
|
|
|
|
extern CRITICAL_SECTION GlobalAudioCriticalSection;
|
|
|
|
extern int StreamLowImpact;
|