/*
**  SOUND.H
**
**  Original Copyright 1988-1991 by Bob Stout as part of
**  the MicroFirm Function Library (MFL)
**
**  This subset version is functionally identical to the
**  version originally published by the author in Tech Specialist
**  magazine and is hereby donated to the public domain.
*/

#if defined(__ZTC__)

 #include <int.h>

 #undef int_on

 #undef int_off

#elif defined(__TURBOC__)

 #define int_on         enable

 #define int_off        disable

 #ifndef inp

  #define inp           inportb

 #endif

 #ifndef outp

  #define outp          outportb

 #endif

#else /* assume MSC/QC */

 #include <conio.h>

 #define int_on         _enable

 #define int_off        _disable

 #define getvect        _dos_getvect

 #define setvect        _dos_setvect

#endif


/* defines for mktone() update parameter: */

#define ON 0          /* turn the speaker on */

#define UPDATE 1      /* sound is on, just change freq */

#define TOGGLE 2      /* for delay use, turn on, then off */


/* port equates */

#define SCNTRL 0x61   /* sound control port */

#define SOUNDON 0x03  /* bit mask to enable speaker */

#define SOUNDOFF 0xfc /* bit mask to disable speaker */

#define C8253 0x43    /* port address to control 8253 */

#define SETIMER 0xb6  /* tell 8253 to expect freq data next */

#define F8253 0x42    /* frequency address on 8253 */


/* frequency equates (muscical scale) */
/* digit in label is octave number, S indicates Sharp (#) */

#define C0      36489

#define CS0     34445

#define D0      32512

#define DS0     30673

#define E0      28961

#define F0      27329

#define FS0     25804

#define G0      24351

#define GS0     22981

#define A0      21694

#define AS0     20473

#define B0      19326


#define C1      18244

#define CS1     17218

#define D1      16251

#define DS1     15340

#define E1      14480

#define F1      13668

#define FS1     12899

#define G1      12175

#define GS1     11493

#define A1      10847

#define AS1     10238

#define B1      9663


#define C2      9121

#define CS2     8609

#define D2      8126

#define DS2     7670

#define E2      7239

#define F2      6833

#define FS2     6450

#define G2      6088

#define GS2     5746

#define A2      5424

#define AS2     5119

#define B2      4832


#define C3      4561

#define CS3     4305

#define D3      4063

#define DS3     3835

#define E3      3620

#define F3      3417

#define FS3     3225

#define G3      3044

#define GS3     2873

#define A3      2712

#define AS3     2560

#define B3      2416


#define C4      2280

#define CS4     2152

#define D4      2032

#define DS4     1917

#define E4      1810

#define F4      1708

#define FS4     1612

#define G4      1522

#define GS4     1437

#define A4      1356

#define AS4     1280

#define B4      1210


#define C5      1140

#define CS5     1076

#define D5      1016

#define DS5     959

#define E5      905

#define F5      854

#define FS5     806

#define G5      761

#define GS5     718

#define A5      678

#define AS5     640

#define B5      604


#define C6      570

#define CS6     538

#define D6      508

#define DS6     479

#define E6      449

#define F6      427

#define FS6     403

#define G6      380

#define GS6     359

#define A6      339

#define AS6     320

#define B6      302


#define C7      285

#define CS7     269

#define D7      254

#define DS7     240

#define E7      226

#define F7      214

#define FS7     202

#define G7      190

#define GS7     180

#define A7      169

#define AS7     160

#define B7      151


#define C8      143


#define REST    0


typedef struct
{
        unsigned int      freq;
        unsigned int      duration;
} NOTE;

#if __cplusplus

 extern "C" {
#endif


void  mktone(int, int, unsigned),
      dosound(int),
      soundon(void),
      soundoff(void),
      playb_close(void);

int   playb_note(unsigned, unsigned);

NOTE *playb_open(unsigned);

#if __cplusplus

 }
#endif



syntax highlighted by Code2HTML, v. 0.9.1