#ifndef GMS_SOUND_H
#define GMS_SOUND_H TRUE

/*
**	$VER: sound.h 0.4 (01.11.96)
**	Includes Release xx.xx
**
**	games library sound structures
**
**	(C) Copyright 1996 DreamWorld Productions.
**	    All Rights Reserved
*/

#define SMV1 'S','M',0,0,0

 struct   Sound
  { char  Version[4];         /* SMV1 */
    APTR  Stats;              /* Reserved */
    WORD  Channel;            /* Channel, 0-3 */
    WORD  Priority;           /* Priority, 0-127 */
    APTR  Header;             /* Ptr to sample info header, if any */
    APTR  Data;               /* Address of sample data */
    ULONG Length;             /* Length of sample data in WORDS */
    UWORD Octave;             /* Octave/Note setting */
    UWORD Volume;             /* Volume of sample (1 - 100) */
    ULONG Attrib;             /* Sound attributes (SBIT8/SBIT16) */
    char  *File;              /* File for the sound, if required */
  };

#define CHAN_FREE   0         /* For Check_Channel() */

/* - Flags for SAM_Channel */

#define CHANNEL_ALL -1        /* Search for first available channel */
#define CHANNEL1    0         /* Channel 1 (left speaker) */
#define CHANNEL2    1         /* Channel 2 (right speaker) */
#define CHANNEL3    2         /* Channel 3 (left speaker) */
#define CHANNEL4    3         /* Channel 4 (right speaker) */

/* - Flags for SAM_Attrib */

#define SBIT8   0x00000000    /* Sound data is 8 bit */
#define SBIT16  0x00000001    /* Sound data is 16 bit */
#define SMODVOL 0x00000002    /* Modulate volume with next channel */
#define SMODPER 0x00000004    /* Modulate period with next channel */
#define SREPEAT 0x00000008    /* Repeat sample forever */
#define SEMPTY  0x00000010    /* Only play sound if channel is empty */

/* -- Octave definitions for SAM_Octave.  An 'S' at the end of an octave
**    definition indicates a sharp note.  The comments on the right tell
**    you the period resulting from the octant used.  This is good if
**    you are converting an old program that programmed the periods
**    directly.
*/

#define OCT_G0S	0
#define OCT_G0	2
#define OCT_F0S	4
#define OCT_F0	6
#define OCT_E0	8
#define OCT_D0S	10
#define OCT_D0	12
#define OCT_C0S	14
#define OCT_C0	16
#define OCT_B0	18
#define OCT_A0S	20
#define OCT_A0	22

#define OCT_G1S	24
#define OCT_G1	26
#define OCT_F1S	28
#define OCT_F1	30
#define OCT_E1	32
#define OCT_D1S	34
#define OCT_D1	36
#define OCT_C1S	38
#define OCT_C1	40
#define OCT_B1	42
#define OCT_A1S	44
#define OCT_A1	46

#define OCT_G2S	48
#define OCT_G2	50
#define OCT_F2S	52
#define OCT_F2	54
#define OCT_E2	56
#define OCT_D2S	58
#define OCT_D2	60
#define OCT_C2S	62
#define OCT_C2	64
#define OCT_B2	66
#define OCT_A2S	68
#define OCT_A2	70

#define OCT_G3S	72
#define OCT_G3	74
#define OCT_F3S	76
#define OCT_F3	78
#define OCT_E3	80
#define OCT_D3S	82
#define OCT_D3	84
#define OCT_C3S	86
#define OCT_C3	88
#define OCT_B3	90
#define OCT_A3S	92
#define OCT_A3	94

#define OCT_G4S	96
#define OCT_G4	98
#define OCT_F4S	100
#define OCT_F4	102
#define OCT_E4	104
#define OCT_D4S	106
#define OCT_D4	108
#define OCT_C4S	110
#define OCT_C4	112
#define OCT_B4	114
#define OCT_A4S	116
#define OCT_A4	118

#define OCT_G5S	120
#define OCT_G5	122
#define OCT_F5S	124
#define OCT_F5	126
#define OCT_E5	128
#define OCT_D5S	130
#define OCT_D5	132
#define OCT_C5S	134
#define OCT_C5	136
#define OCT_B5	138
#define OCT_A5S	140
#define OCT_A5	142

#define OCT_G6S	144
#define OCT_G6	146
#define OCT_F6S	148
#define OCT_F6	150
#define OCT_E6	152
#define OCT_D6S	154
#define OCT_D6	156
#define OCT_C6S	158
#define OCT_C6	160
#define OCT_B6	162
#define OCT_A6S	164
#define OCT_A6	166

#define OCT_G7S	168
#define OCT_G7	170
#define OCT_F7S	172
#define OCT_F7	174
#define OCT_E7	176
#define OCT_D7S	178
#define OCT_D7	180
#define OCT_C7S	182
#define OCT_C7	184
#define OCT_B7	186
#define OCT_A7S	188

#endif
