home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fun Online 1996 September
/
FOL0996.iso
/
DOUBLE_T
/
PLAYABLE
/
AIL.H
< prev
next >
Wrap
Text File
|
1995-01-18
|
42KB
|
1,126 lines
//████████████████████████████████████████████████████████████████████████████
//██ ██
//██ IBM Audio Interface Library ██
//██ ██
//██ AIL.H: API function prototypes ██
//██ ██
//██ Flat-model source compatible with IBM 32-bit ANSI C/C++ ██
//██ ██
//██ Version 3.00 of 11-Apr-94: Initial version for AIL 3.0 ██
//██ 3.01 of 21-Oct-94: Added Watcom/FlashTek support ██
//██ AIL_restore_interrupts() changed to void ██
//██ 3.02 of 3-Jan-95: VDI_HDR updated to DDK rev 1.12 ██
//██ Added AIL_INI structure ██
//██ Added AIL_install_DIG/MDI_INI() functions ██
//██ ██
//██ Author: John Miles ██
//██ ██
//████████████████████████████████████████████████████████████████████████████
//██ ██
//██ Copyright (C) 1994-1995 Miles Design, Inc. ██
//██ ██
//██ Miles Design, Inc. ██
//██ 8301 Elander Drive ██
//██ Austin, TX 78750 ██
//██ ██
//██ (512) 345-2642 / FAX (512) 338-9630 / BBS (512) 454-9990 ██
//██ ██
//████████████████████████████████████████████████████████████████████████████
#ifndef AIL_VERSION
#define AIL_VERSION "3.02"
#define AIL_VERSION_DATE "18-Jan-95"
#endif
//
// Watcom/FlashTek support (for library build)
//
#ifdef INT21
#ifdef __WATCOMC__
#include "x32.h"
#endif
#endif
#ifndef AIL_H
#define AIL_H
//
// MetaWare support
//
#ifdef __HIGHC__
#define cdecl _CC(_REVERSE_PARMS | _NEAR_CALL)
#pragma Global_aliasing_convention("_%r");
#pragma Align_members(1)
#ifndef FAR_PTR_DEF
#define FAR_PTR_DEF
typedef struct // Union used to build far pointers under MetaWare
{
unsigned off;
unsigned short seg;
}
fp_ovl;
typedef union
{
_Far void *ptr;
fp_ovl part;
}
FARPTR;
#endif
#endif
//
// End of MetaWare conditionals
//
#ifdef __cplusplus
extern "C" {
#endif
//
// Misc. constant definitions
//
#define MAX_DRVRS 16 // Max. # of simultaneous drivers
#define MAX_TIMERS 16 // Max. # of simultaneous timers
#define MAX_NOTES 32 // Max # of notes "on"
#define FOR_NEST 4 // # of nested XMIDI FOR loops
#define NUM_CHANS 16 // # of possible MIDI channels
#define MAX_W_VOICES 16 // Max virtual wave synth voice cnt
#define MAX_W_ENTRIES 512 // 512 wave library entries max.
#define MIN_CHAN ( 1-1) // Min channel recognized (0-based)
#define MAX_CHAN (16-1) // Max channel recognized
#define MIN_LOCK_CHAN ( 2-1) // Min channel available for locking
#define MAX_LOCK_CHAN ( 9-1) // Max channel available for locking
#define PERCUSS_CHAN (10-1) // Percussion channel (no locking)
#define DIG_F_MONO_8 0 // PCM data formats
#define DIG_F_MONO_16 1
#define DIG_F_STEREO_8 2
#define DIG_F_STEREO_16 3
#define DIG_PCM_SIGN 0x0001 // PCM flags
#define DIG_PCM_ORDER 0x0002
#define DIG_PCM_POLARITY 0x0004 // PCM flags used by driver hardware
#define DIG_PCM_SPLIT 0x0008
#define DIG_BUFFER_SERVICE 0x0010
#define DIG_DUAL_DMA 0x0020
#define DIG_RECORDING_SUPPORTED 0x8000
#define AIL3DIG 0 // .DIG driver
#define AIL3MDI 1 // .MDI driver
#define DIG_DETECT_8_BIT_ONLY 0x0001 // Detect 8-bit DMA only
#define DIG_DETECT_16_BIT_ONLY 0x0002 // Detect 16-bit DMA only
#define DIG_DETECT_8_AND_16_BITS 0x0003 // Detect both 8- and 16-bit DMA
#define DRV_INIT 0x300 // Functions common to .MDI and .DIG
#define DRV_GET_INFO 0x301 // drivers
#define DRV_SERVE 0x302
#define DRV_PARSE_ENV 0x303
#define DRV_VERIFY_IO 0x304
#define DRV_INIT_DEV 0x305
#define DRV_SHUTDOWN_DEV 0x306
#define DIG_HW_VOLUME 0x400 // .DIG driver functions
#define DIG_START_P_CMD 0x401
#define DIG_STOP_P_REQ 0x402
#define DIG_START_R_CMD 0x403
#define DIG_STOP_R_REQ 0x404
#define DIG_VSE 0x405
#define MDI_HW_VOLUME 0x500 // .MDI driver functions
#define MDI_INIT_INS_MGR 0x501
#define MDI_MIDI_XMIT 0x502
#define MDI_INSTALL_T_SET 0x503
#define MDI_GET_T_STATUS 0x504
#define MDI_PROT_UNPROT_T 0x505
#define MDI_VSE 0x506
//
// Non-specific XMIDI/MIDI controllers and event types
//
#define CALLBACK_PFX 108
#define SEQ_BRANCH 109
#define CHAN_LOCK 110
#define CHAN_PROTECT 111
#define VOICE_PROTECT 112
#define TIMBRE_PROTECT 113
#define PATCH_BANK_SEL 114
#define INDIRECT_C_PFX 115
#define FOR_LOOP 116
#define NEXT_LOOP 117
#define CLEAR_BEAT_BAR 118
#define CALLBACK_TRIG 119
#define SEQ_INDEX 120
#define MODULATION 1
#define DATA_MSB 6
#define PART_VOLUME 7
#define PANPOT 10
#define EXPRESSION 11
#define DATA_LSB 38
#define SUSTAIN 64
#define REVERB 91
#define CHORUS 93
#define RPN_LSB 100
#define RPN_MSB 101
#define ALL_NOTES_OFF 123
#define EV_NOTE_OFF 0x80
#define EV_NOTE_ON 0x90
#define EV_POLY_PRESS 0xa0
#define EV_CONTROL 0xb0
#define EV_PROGRAM 0xc0
#define EV_CHAN_PRESS 0xd0
#define EV_PITCH 0xe0
#define EV_SYSEX 0xf0
#define EV_ESC 0xf7
#define EV_META 0xff
#define META_EOT 0x2f
#define META_TEMPO 0x51
#define META_TIME_SIG 0x58
//
// SAMPLE.system_data[] usage
//
#define SSD_EOD_CALLBACK 0 // Application end-of-data callback if not NULL
#define VOC_BLK_PTR 1 // Pointer to current block
#define VOC_REP_BLK 2 // Pointer to beginning of repeat loop block
#define VOC_N_REPS 3 // # of iterations left in repeat loop
#define VOC_MARKER 4 // Marker to search for, or -1 if all
#define VOC_MARKER_FOUND 5 // Desired marker found if 1, else 0
#define SSD_RELEASE 6 // Release sample handle upon termination if >0
#define SSD_TEMP 7 // Temporary storage location for general use
//
// SAMPLE.status flag values
//
#define SMP_FREE 0x0001 // Sample is available for allocation
#define SMP_DONE 0x0002 // Sample has finished playing, or has
// never been started
#define SMP_PLAYING 0x0004 // Sample is playing
#define SMP_STOPPED 0x0008 // Sample has been stopped
//
// SEQUENCE.status flag values
//
#define SEQ_FREE 0x0001 // Sequence is available for allocation
#define SEQ_DONE 0x0002 // Sequence has finished playing, or has
// never been started
#define SEQ_PLAYING 0x0004 // Sequence is playing
#define SEQ_STOPPED 0x0008 // Sequence has been stopped
//
// General type definitions for portability
//
#ifndef TYPEDEFS
#define TYPEDEFS
typedef unsigned char UBYTE;
typedef unsigned short UWORD;
typedef unsigned long ULONG;
typedef char BYTE;
typedef signed short WORD;
typedef signed long LONG;
#endif
typedef void * CALLBACK; // Generic callback function prototype
typedef ULONG REALFAR; // Real-mode far pointer type
#ifdef __HIGHC__ // Macro to convert REALFAR to protected *
#else
#ifdef _X32_H_INCLUDED
#ifndef REALPTR
#define REALPTR(x) ((void *) (ULONG) ((((ULONG) (x))>>16<<4) + ((x) & 0xffff) \
+ (ULONG) _x32_zero_base_ptr))
#endif
#else
#ifndef REALPTR
#define REALPTR(x) ((void *) (ULONG) ((((ULONG) (x))>>16<<4) + ((x) & 0xffff)))
#endif
#endif
#endif
#define MIN_VAL 0
#define NOM_VAL 1
#define MAX_VAL 2
#ifndef YES
#define YES 1
#endif
#ifndef NO
#define NO 0
#endif
//
// Preference names and default values
//
#define DIG_SERVICE_RATE 0
#define DEFAULT_DSR 200 // DMA buffer-polling rate = 200 Hz
#define DIG_HARDWARE_SAMPLE_RATE 1
#define DEFAULT_DHSR NOM_VAL // Use nominal sample rate by default
#define DIG_DMA_RESERVE 2
#define DEFAULT_DDR 32768 // Reserve 32K real-mode mem for DMA
#define DIG_LATENCY 3
#define DEFAULT_DL 100 // Half-buffer size in ms = 100
#define DIG_MIXER_CHANNELS 4
#define DEFAULT_DMC 16 // 16 allocatable SAMPLE structures
#define DIG_DEFAULT_VOLUME 5
#define DEFAULT_DDV 100 // Default sample volume = 100 (0-127)
#define DIG_RESAMPLING_TOLERANCE 6
#define DEFAULT_DRT 655 // Resampling triggered at +/- 1%
#define DIG_USE_STEREO 7
#define DEFAULT_DUS NO // Use mono output only
#define DIG_USE_16_BITS 8
#define DEFAULT_DU16 NO // Use 8-bit output by default
#define DIG_ALLOW_16_BIT_DMA 9
#define DEFAULT_DA16DMA YES // OK to use 16-bit DMA if necessary
#define MDI_SERVICE_RATE 10
#define DEFAULT_MSR 120 // XMIDI sequencer timing = 120 Hz
#define MDI_SEQUENCES 11
#define DEFAULT_MS 8 // 8 sequence handles/driver
#define MDI_DEFAULT_VOLUME 12
#define DEFAULT_MDV 127 // Default sequence volume = 127 (0-127)
#define MDI_QUANT_ADVANCE 13
#define DEFAULT_MQA 1 // Beat/bar count +1 interval
#define MDI_ALLOW_LOOP_BRANCHING 14
#define DEFAULT_ALB NO // Branches cancel XMIDI FOR loops
#define MDI_DEFAULT_BEND_RANGE 15
#define DEFAULT_MDBR 2 // Default pitch-bend range = 2
#define AIL_SCAN_FOR_HARDWARE 16
#define DEFAULT_ASH YES // Scan for I/O settings if necessary
#define AIL_ALLOW_VDM_EXECUTION 17
#define DEFAULT_AVE YES // Allow Windows "DOS box" execution
#define N_PREFS 18 // # of preference types
//
// Type definitions
//
typedef LONG HTIMER; // Handle to timer
typedef struct // I/O parameters structure
{
WORD IO;
WORD IRQ;
WORD DMA_8_bit;
WORD DMA_16_bit;
LONG IO_reserved[4];
}
IO_PARMS;
typedef struct // Standard AIL 3.X VDI driver header
{
BYTE ID[8]; // "AIL3xxx" ID string, followed by ^Z
ULONG driver_version;
REALFAR common_IO_configurations;
UWORD num_IO_configurations;
REALFAR environment_string;
IO_PARMS IO;
WORD service_rate;
UWORD busy;
UWORD driver_num; // Driver number
UWORD this_ISR; // Offset of INT 66H dispatcher
REALFAR prev_ISR; // Pointer to previous INT 66H ISR
BYTE scratch[128]; // Shared scratch workspace
BYTE dev_name[80]; // Device name (VDI version >= 1.12 only)
}
VDI_HDR;
typedef struct
{
UWORD minimum_physical_sample_rate;
UWORD nominal_physical_sample_rate;
UWORD maximum_physical_sample_rate;
UWORD minimum_DMA_half_buffer_size;
UWORD maximum_DMA_half_buffer_size;
ULONG flags;
}
DIG_MODE;
typedef struct
{
UBYTE format_supported[16];
DIG_MODE format_data[16];
}
DIG_DDT;
typedef struct
{
REALFAR DMA_buffer_A;
REALFAR DMA_buffer_B;
WORD active_buffer;
}
DIG_DST;
typedef struct
{
REALFAR library_environment;
REALFAR GTL_suffix;
UWORD num_voices;
UWORD max_melodic_channel;
UWORD min_melodic_channel;
UWORD percussion_channel;
}
MDI_DDT;
typedef struct
{
BYTE library_directory[128];
BYTE GTL_filename[128];
BYTE MIDI_data[512];
}
MDI_DST;
typedef struct // Initialization file structure
{
char device_name[128]; // Device name
char driver_name[128]; // Driver filename
IO_PARMS IO; // I/O parameters for driver
}
AIL_INI;
typedef struct // Handle to driver
{
REALFAR seg; // Seg:off pointer to driver (off=0)
ULONG sel; // Selector for driver (off=0)
void *buf; // Protected-mode pointer to driver
VDI_HDR *VHDR; // Pointer to driver header (same as buf)
LONG type; // AIL3DIG or AIL3MDI (see below)
LONG initialized; // 1 if hardware successfully init'd, else 0
LONG PM_ISR; // -1 if no PM ISR hooked, else IRQ #
HTIMER server; // DRV_SERVE periodic timer, if requested
// Vector to high-level destructor, if any
void (cdecl *destructor)(void *);
// High-level descriptor (DIG_ or MDI_DRIVER)
void *descriptor;
}
AIL_DRIVER;
struct _DIG_DRIVER;
typedef struct _SAMPLE // Sample instance
{
struct _DIG_DRIVER *driver; // Driver for playback
ULONG status; // SMP_ flags: _FREE, _DONE, _PLAYING
void *start[2]; // Sample buffer address (W)
ULONG len [2]; // Sample buffer size in bytes (W)
ULONG pos [2]; // Index to next byte (R/W)
ULONG done [2]; // Nonzero if buffer with len=0 sent by app
LONG current_buffer; // Buffer # active (0/1)
LONG last_buffer; // Last active buffer (for double-buffering)
LONG loop_count; // # of cycles-1 (0=one-shot, -1=indefinite)
LONG format; // DIG_F format (8/16 bits, mono/stereo)
ULONG flags; // DIG_PCM_SIGN / DIG_PCM_ORDER (stereo only)
LONG playback_rate; // Playback rate in hertz
LONG volume; // Sample volume 0-127
LONG pan; // Mono panpot/stereo balance (0=L ... 127=R)
LONG vol_scale[2][256]; // [left/mono=0,right=1][256] channel volume
CALLBACK SOB; // Start-of-block callback function
CALLBACK EOB; // End-of-buffer callback function
CALLBACK EOS; // End-of-sample callback function
LONG user_data [8]; // Miscellaneous user data
LONG system_data[8]; // Miscellaneous system data
}
SAMPLE;
typedef SAMPLE * HSAMPLE; // Handle to sample
typedef struct _DIG_DRIVER // Handle to digital audio driver
{
AIL_DRIVER *drvr; // Base driver descriptor
DIG_DDT *DDT; // Protected-mode pointer to DDT
DIG_DST *DST; // Protected-mode pointer to DST
HTIMER timer; // Buffer-polling timer
LONG half_buffer_size; // Size of DMA half-buffer
LONG DMA_rate; // Hardware sample rate
LONG hw_format; // DIG_F code in use
ULONG hw_mode_flags; // DIG_PCM_ flags for mode in use
REALFAR DMA_seg; // Seg:off pointer to DMA buffers (off=0)
ULONG DMA_sel; // Selector for DMA buffers (off=0)
void *DMA_buf; // Protected-mode pointer to DMA buffers
void *DMA[2]; // Protected-mode pointers to half-buffers
// (note that DMA[0] may != DMA_buf)
WORD *buffer_flag; // Protected-mode pointer to buffer flag
LONG last_buffer; // Last active buffer flag value in driver
LONG channels_per_sample; // # of channels per sample (1 or 2)
LONG bytes_per_channel; // # of bytes per channel (1 or 2)
LONG channels_per_buffer; // # of channels per half-buffer
LONG samples_per_buffer; // # of samples per half-buffer
LONG build_size; // # of bytes in build buffer
LONG *build_buffer; // Build buffer (4 * n_samples bytes)
LONG playing; // Playback active if non-zero
LONG quiet; // # of consecutive quiet sample periods
SAMPLE *samples; // Pointer to list of SAMPLEs
LONG n_samples; // # of SAMPLEs
LONG n_active_samples; // # of samples being processed
LONG system_data[8]; // Miscellaneous system data
}
DIG_DRIVER;
typedef struct // MIDI status log structure
{
LONG program [NUM_CHANS]; // Program Change
LONG pitch_l [NUM_CHANS]; // Pitch Bend LSB
LONG pitch_h [NUM_CHANS]; // Pitch Bend MSB
LONG c_lock [NUM_CHANS]; // Channel Lock
LONG c_prot [NUM_CHANS]; // Channel Lock Protection
LONG c_v_prot [NUM_CHANS]; // Voice Protection
LONG bank [NUM_CHANS]; // Patch Bank Select
LONG indirect [NUM_CHANS]; // ICA indirect controller value
LONG callback [NUM_CHANS]; // Callback Trigger
LONG mod [NUM_CHANS]; // Modulation
LONG vol [NUM_CHANS]; // Volume
LONG pan [NUM_CHANS]; // Panpot
LONG exp [NUM_CHANS]; // Expression
LONG sus [NUM_CHANS]; // Sustain
LONG reverb [NUM_CHANS]; // Reverb
LONG chorus [NUM_CHANS]; // Chorus
LONG bend_range[NUM_CHANS]; // Bender Range (data MSB, RPN 0 assumed)
}
CTRL_LOG;
struct _MDI_DRIVER;
typedef struct // XMIDI sequence state table
{
struct _MDI_DRIVER *driver; // Driver for playback
ULONG status; // SEQ_ flags
void *TIMB; // XMIDI IFF chunk pointers
void *RBRN;
void *EVNT;
BYTE *EVNT_ptr; // Current event pointer
BYTE *ICA; // Indirect Controller Array
CALLBACK prefix_callback; // XMIDI Callback Prefix handler
CALLBACK trigger_callback; // XMIDI Callback Trigger handler
CALLBACK EOS; // End-of-sequence callback function
LONG loop_count; // 0=one-shot, -1=indefinite, ...
LONG interval_count; // # of intervals until next event
LONG interval_num; // # of intervals since start
LONG volume; // Sequence volume 0-127
LONG volume_target; // Target sequence volume 0-127
LONG volume_accum; // Accumulated volume period
LONG volume_period; // Period for volume stepping
LONG tempo_percent; // Relative tempo percentage 0-100
LONG tempo_target; // Target tempo 0-100
LONG tempo_accum; // Accumulated tempo period
LONG tempo_period; // Period for tempo stepping
LONG tempo_error; // Error counter for tempo DDA
LONG beat_count; // Sequence playback position
LONG measure_count;
LONG time_numerator; // Sequence timing data
LONG time_fraction;
LONG beat_fraction;
LONG time_per_beat;
void *FOR_ptrs [FOR_NEST]; // Loop stack
LONG FOR_loop_count [FOR_NEST];
LONG chan_map [NUM_CHANS]; // Physical channel map for sequence
CTRL_LOG shadow; // Controller values for sequence
LONG note_count; // # of notes "on"
LONG note_chan [MAX_NOTES]; // Channel for queued note (-1=free)
LONG note_num [MAX_NOTES]; // Note # for queued note
LONG note_time [MAX_NOTES]; // Remaining duration in intervals
LONG user_data [8]; // Miscellaneous user data
LONG system_data[8]; // Miscellaneous system data
}
SEQUENCE;
typedef SEQUENCE * HSEQUENCE; // Handle to sequence
typedef struct _MDI_DRIVER // Handle to XMIDI driver
{
AIL_DRIVER *drvr; // Base driver descriptor
MDI_DDT *DDT; // Protected-mode pointer to DDT
MDI_DST *DST; // Protected-mode pointer to DST
HTIMER timer; // XMIDI quantization timer
LONG interval_time; // XMIDI quantization timer interval in uS
LONG disable; // > 0 to disable XMIDI service
SEQUENCE *sequences; // Pointer to list of SEQUENCEs
LONG n_sequences; // # of SEQUENCEs
LONG lock [NUM_CHANS]; // 1 if locked, 2 if protected, else 0
HSEQUENCE locker[NUM_CHANS]; // HSEQUENCE which locked channel
HSEQUENCE owner [NUM_CHANS]; // HSEQUENCE which owned locked channel
HSEQUENCE user [NUM_CHANS]; // Last sequence to use channel
LONG state [NUM_CHANS]; // Lock state prior to being locked
LONG notes [NUM_CHANS]; // # of active notes in channel
CALLBACK event_trap; // MIDI event trap callback function
CALLBACK timbre_trap; // MIDI timbre request callback function
LONG message_count; // MIDI message count
LONG offset; // MIDI buffer offset
LONG system_data[8]; // Miscellaneous system data
}
MDI_DRIVER;
typedef struct // XMIDI TIMB IFF chunk
{
BYTE name[4];
UBYTE msb;
UBYTE lsb;
UBYTE lsb2;
UBYTE lsb3;
UWORD n_entries;
UWORD timbre[1];
}
TIMB_chunk;
typedef struct // XMIDI RBRN IFF entry
{
WORD bnum;
ULONG offset;
}
RBRN_entry;
typedef struct // Wave library entry
{
LONG bank; // XMIDI bank, MIDI patch for sample
LONG patch;
LONG root_key; // Root MIDI note # for sample (or -1)
ULONG file_offset; // Offset of wave data from start-of-file
ULONG size; // Size of wave sample in bytes
LONG format; // DIG_F format (8/16 bits, mono/stereo)
ULONG flags; // DIG_PCM_SIGN / DIG_PCM_ORDER (stereo)
LONG playback_rate; // Playback rate in hertz
}
WAVE_ENTRY;
typedef struct // Virtual "wave synthesizer" descriptor
{
MDI_DRIVER *mdi; // MIDI driver for use with synthesizer
DIG_DRIVER *dig; // Digital driver for use with synthesizer
WAVE_ENTRY *library; // Pointer to wave library
CALLBACK *prev_event_fn; // Previous MIDI event trap function
CALLBACK *prev_timb_fn; // Previous timbre request trap function
CTRL_LOG controls; // MIDI controller states
WAVE_ENTRY *wave [NUM_CHANS]; // Pointer to WAVE_ENTRY for each channel
HSAMPLE S [MAX_W_VOICES]; // List of HSAMPLE voices
LONG n_voices; // Actual # of voices allocated to synth
LONG chan [MAX_W_VOICES]; // MIDI channel for each voice, or -1
LONG note [MAX_W_VOICES]; // MIDI note number for voice
LONG root [MAX_W_VOICES]; // MIDI root note for voice
LONG rate [MAX_W_VOICES]; // Playback rate for voice
LONG vel [MAX_W_VOICES]; // MIDI note velocity for voice
ULONG time [MAX_W_VOICES]; // Timestamp for voice
ULONG event; // Event counter for LRU timestamps
}
WAVE_SYNTH;
typedef WAVE_SYNTH * HWAVE; // Handle to virtual wave synthesizer
typedef struct // VDI interface register structure
{
WORD AX;
WORD BX;
WORD CX;
WORD DX;
WORD SI;
WORD DI;
}
VDI_CALL;
//
// Global preference array
//
extern LONG AIL_preference [N_PREFS];
//
// AIL fatal error type string
//
extern BYTE AIL_error [256];
//
// Last IO_PARMS structure used to attempt device detection
//
extern IO_PARMS AIL_last_IO_attempt;
//
// High-level support services
//
extern void cdecl AIL_startup (void);
extern void cdecl AIL_shutdown (void);
extern LONG cdecl AIL_set_preference (ULONG number,
LONG value);
//
// Low-level support services
//
extern void cdecl AIL_lock (void);
extern void cdecl AIL_unlock (void);
extern REALFAR cdecl AIL_get_real_vect (ULONG vectnum);
extern void cdecl AIL_set_real_vect (ULONG vectnum,
REALFAR real_ptr);
extern void cdecl AIL_set_USE16_ISR (LONG IRQ,
REALFAR real_base,
ULONG ISR_offset);
extern void cdecl AIL_restore_USE16_ISR (LONG IRQ);
extern ULONG cdecl AIL_disable_interrupts (void);
extern void cdecl AIL_restore_interrupts (ULONG FD_register);
extern void cdecl AIL_switch_stack (void *stack,
ULONG size,
ULONG *SS,
void **ESP,
void **EBP);
extern void cdecl AIL_restore_stack (ULONG SS,
void *ESP,
void *EBP);
extern LONG cdecl AIL_call_driver (AIL_DRIVER *drvr,
LONG fn,
VDI_CALL *in,
VDI_CALL *out);
extern void cdecl AIL_delay (LONG intervals);
extern LONG cdecl AIL_background (void);
extern LONG cdecl AIL_read_INI (AIL_INI *INI,
BYTE *filename);
//
// Process services
//
extern HTIMER cdecl AIL_register_timer (CALLBACK callback_fn);
extern ULONG cdecl AIL_set_timer_user (HTIMER timer,
ULONG user);
extern void cdecl AIL_set_timer_period (HTIMER timer,
ULONG microseconds);
extern void cdecl AIL_set_timer_frequency (HTIMER timer,
ULONG hertz);
extern void cdecl AIL_set_timer_divisor (HTIMER timer,
ULONG PIT_divisor);
extern ULONG cdecl AIL_interrupt_divisor (void);
extern void cdecl AIL_start_timer (HTIMER timer);
extern void cdecl AIL_start_all_timers (void);
extern void cdecl AIL_stop_timer (HTIMER timer);
extern void cdecl AIL_stop_all_timers (void);
extern void cdecl AIL_release_timer_handle (HTIMER timer);
extern void cdecl AIL_release_all_timers (void);
//
// Low-level installation services
//
extern IO_PARMS * cdecl AIL_get_IO_environment (AIL_DRIVER *drvr);
extern AIL_DRIVER * cdecl AIL_install_driver (UBYTE *driver_image,
ULONG n_bytes);
extern void cdecl AIL_uninstall_driver (AIL_DRIVER *drvr);
//
// SoundStream(TM) high-level digital services
//
extern DIG_DRIVER * cdecl AIL_install_DIG_INI (void);
extern DIG_DRIVER * cdecl AIL_install_DIG_driver_file
(BYTE *filename,
IO_PARMS *IO);
extern void cdecl AIL_uninstall_DIG_driver (DIG_DRIVER *dig);
extern HSAMPLE cdecl AIL_allocate_sample_handle
(DIG_DRIVER *dig);
extern HSAMPLE cdecl AIL_allocate_file_sample (DIG_DRIVER *dig,
void *file_image,
LONG block);
extern void cdecl AIL_release_sample_handle (HSAMPLE S);
extern void cdecl AIL_init_sample (HSAMPLE S);
extern LONG cdecl AIL_set_sample_file (HSAMPLE S,
void *file_image,
LONG block);
extern void cdecl AIL_set_sample_address (HSAMPLE S,
void *start,
ULONG len);
extern void cdecl AIL_set_sample_type (HSAMPLE S,
LONG format,
ULONG flags);
extern void cdecl AIL_start_sample (HSAMPLE S);
extern void cdecl AIL_stop_sample (HSAMPLE S);
extern void cdecl AIL_resume_sample (HSAMPLE S);
extern void cdecl AIL_end_sample (HSAMPLE S);
extern void cdecl AIL_set_sample_playback_rate
(HSAMPLE S,
LONG playback_rate);
extern void cdecl AIL_set_sample_volume (HSAMPLE S,
LONG volume);
extern void cdecl AIL_set_sample_pan (HSAMPLE S,
LONG pan);
extern void cdecl AIL_set_sample_loop_count (HSAMPLE S,
LONG loop_count);
extern ULONG cdecl AIL_sample_status (HSAMPLE S);
extern LONG cdecl AIL_sample_playback_rate (HSAMPLE S);
extern LONG cdecl AIL_sample_volume (HSAMPLE S);
extern LONG cdecl AIL_sample_pan (HSAMPLE S);
extern LONG cdecl AIL_sample_loop_count (HSAMPLE S);
//
// SoundStream(TM) low-level digital services
//
extern DIG_DRIVER * cdecl AIL_install_DIG_driver_image
(void *driver_image,
ULONG size,
IO_PARMS *IO);
extern LONG cdecl AIL_minimum_sample_buffer_size(DIG_DRIVER *dig,
LONG playback_rate,
LONG format);
extern LONG cdecl AIL_sample_buffer_ready (HSAMPLE S);
extern void cdecl AIL_load_sample_buffer (HSAMPLE S,
ULONG buff_num,
void *buffer,
ULONG len);
extern void cdecl AIL_set_sample_position (HSAMPLE S,
ULONG pos);
extern ULONG cdecl AIL_sample_position (HSAMPLE S);
extern CALLBACK cdecl AIL_register_SOB_callback (HSAMPLE S,
CALLBACK SOB);
extern CALLBACK cdecl AIL_register_EOB_callback (HSAMPLE S,
CALLBACK EOB);
extern CALLBACK cdecl AIL_register_EOS_callback (HSAMPLE S,
CALLBACK EOS);
extern CALLBACK cdecl AIL_register_EOF_callback (HSAMPLE S,
CALLBACK EOFILE);
extern void cdecl AIL_set_sample_user_data (HSAMPLE S,
ULONG index,
LONG value);
extern LONG cdecl AIL_sample_user_data (HSAMPLE S,
ULONG index);
extern LONG cdecl AIL_active_sample_count (DIG_DRIVER *dig);
//
// High-level XMIDI services
//
extern MDI_DRIVER * cdecl AIL_install_MDI_INI (void);
extern MDI_DRIVER * cdecl AIL_install_MDI_driver_file
(BYTE *filename,
IO_PARMS *IO);
extern void cdecl AIL_uninstall_MDI_driver (MDI_DRIVER *mdi);
extern HSEQUENCE cdecl AIL_allocate_sequence_handle
(MDI_DRIVER *mdi);
extern void cdecl AIL_release_sequence_handle
(HSEQUENCE S);
extern LONG cdecl AIL_init_sequence (HSEQUENCE S,
void *start,
LONG sequence_num);
extern void cdecl AIL_start_sequence (HSEQUENCE S);
extern void cdecl AIL_stop_sequence (HSEQUENCE S);
extern void cdecl AIL_resume_sequence (HSEQUENCE S);
extern void cdecl AIL_end_sequence (HSEQUENCE S);
extern void cdecl AIL_set_sequence_tempo (HSEQUENCE S,
LONG tempo,
LONG milliseconds);
extern void cdecl AIL_set_sequence_volume (HSEQUENCE S,
LONG volume,
LONG milliseconds);
extern void cdecl AIL_set_sequence_loop_count
(HSEQUENCE S,
LONG loop_count);
extern ULONG cdecl AIL_sequence_status (HSEQUENCE S);
extern LONG cdecl AIL_sequence_tempo (HSEQUENCE S);
extern LONG cdecl AIL_sequence_volume (HSEQUENCE S);
extern LONG cdecl AIL_sequence_loop_count (HSEQUENCE S);
//
// Low-level XMIDI services
//
extern MDI_DRIVER * cdecl AIL_install_MDI_driver_image
(void *driver_image,
ULONG size,
IO_PARMS *IO);
extern void cdecl AIL_set_GTL_filename_prefix (BYTE *prefix);
extern LONG cdecl AIL_timbre_status (MDI_DRIVER *mdi,
LONG bank,
LONG patch);
extern LONG cdecl AIL_install_timbre (MDI_DRIVER *mdi,
LONG bank,
LONG patch);
extern void cdecl AIL_protect_timbre (MDI_DRIVER *mdi,
LONG bank,
LONG patch);
extern void cdecl AIL_unprotect_timbre (MDI_DRIVER *mdi,
LONG bank,
LONG patch);
extern LONG cdecl AIL_active_sequence_count (MDI_DRIVER *mdi);
extern LONG cdecl AIL_controller_value (HSEQUENCE S,
LONG channel,
LONG controller_num);
extern LONG cdecl AIL_channel_notes (HSEQUENCE S,
LONG channel);
extern void cdecl AIL_sequence_position (HSEQUENCE S,
LONG *beat,
LONG *measure);
extern void cdecl AIL_branch_index (HSEQUENCE S,
ULONG marker);
extern CALLBACK cdecl AIL_register_prefix_callback (HSEQUENCE S,
CALLBACK callback);
extern CALLBACK cdecl AIL_register_trigger_callback (HSEQUENCE S,
CALLBACK callback);
extern CALLBACK cdecl AIL_register_sequence_callback
(HSEQUENCE S,
CALLBACK callback);
extern CALLBACK cdecl AIL_register_event_callback (MDI_DRIVER *mdi,
CALLBACK callback);
extern CALLBACK cdecl AIL_register_timbre_callback (MDI_DRIVER *mdi,
CALLBACK callback);
extern void cdecl AIL_set_sequence_user_data (HSEQUENCE S,
ULONG index,
LONG value);
extern LONG cdecl AIL_sequence_user_data (HSEQUENCE S,
ULONG index);
extern void cdecl AIL_register_ICA_array (HSEQUENCE S,
BYTE *array);
extern LONG cdecl AIL_lock_channel (MDI_DRIVER *mdi);
extern void cdecl AIL_release_channel (MDI_DRIVER *mdi,
LONG channel);
extern void cdecl AIL_map_sequence_channel (HSEQUENCE S,
LONG seq_channel,
LONG new_channel);
extern LONG cdecl AIL_true_sequence_channel (HSEQUENCE S,
LONG seq_channel);
extern void cdecl AIL_send_channel_voice_message
(MDI_DRIVER *mdi,
HSEQUENCE S,
LONG status,
LONG data_1,
LONG data_2);
extern void cdecl AIL_send_sysex_message (MDI_DRIVER *mdi,
void *buffer);
extern HWAVE cdecl AIL_create_wave_synthesizer (DIG_DRIVER *dig,
MDI_DRIVER *mdi,
void *wave_lib,
LONG polyphony);
extern void cdecl AIL_destroy_wave_synthesizer (HWAVE W);
#ifdef __cplusplus
}
#endif
//
// MetaWare support
//
#ifdef __HIGHC__
#pragma Global_aliasing_convention();
#endif
#endif