[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

#ifndef DATATYPES_SOUNDCLASS_H
#define DATATYPES_SOUNDCLASS_H
/*
**      $VER: soundclass.h 44.7 (6.6.1999)
**      Includes Release 44.1
**
**      Interface definitions for DataType sound objects.
**
**      Copyright © 1992-1999 Amiga, Inc.
**          All Rights Reserved
*/

#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif

#ifndef DATATYPES_DATATYPESCLASS_H
#include <datatypes/datatypesclass.h>
#endif

#ifndef LIBRARIES_IFFPARSE_H
#include <libraries/iffparse.h>
#endif

#ifndef DEVICES_TIMER_H
#include <devices/timer.h>
#endif

/*****************************************************************************/

#define SOUNDDTCLASS            "sound.datatype"

/*****************************************************************************/

/* Sound attributes */
#define SDTA_Dummy              (DTA_Dummy + 500)
#define SDTA_VoiceHeader        (SDTA_Dummy + 1)

/* (BYTE *) Sample data */
#define SDTA_Sample             (SDTA_Dummy + 2)

/* (ULONG) Length of the sample data in UBYTEs */
#define SDTA_SampleLength       (SDTA_Dummy + 3)

/* (UWORD) Period */
#define SDTA_Period             (SDTA_Dummy + 4)

/* (UWORD) Volume. Range from 0 to 64 */
#define SDTA_Volume             (SDTA_Dummy + 5)

#define SDTA_Cycles             (SDTA_Dummy + 6)

/* The following tags are new for V40 */

/* (struct Task *) Task to signal when sound is complete or next buffer needed. */
#define SDTA_SignalTask         (SDTA_Dummy + 7)

/* (ULONG) Signal mask to use on completion or 0 to disable
 *
 *         NOTE: Due to a bug in sound.datatype V40 SDTA_SignalBit
 *               was actually implemented as a signal mask as opposed
 *               to a bit number. The documentation now reflects
 *               this. If you intend to use a signal bit number
 *               instead of the mask, use the new V44 tag
 *               SDTA_SignalBitNumber below.
 */
#define SDTA_SignalBit          (SDTA_Dummy + 8)
#define SDTA_SignalBitMask      SDTA_SignalBit

/* (BOOL) Playing a continuous stream of data.  Defaults to FALSE. */
#define SDTA_Continuous         (SDTA_Dummy + 9)

/* The following tags are new for V44 */

/* (BYTE) Signal bit to use on completion or -1 to disable */
#define SDTA_SignalBitNumber    (SDTA_Dummy + 10)

/* (UWORD) Samples per second */
#define SDTA_SamplesPerSec      (SDTA_Dummy + 11)

/* (struct timeval *) Sample replay period */
#define SDTA_ReplayPeriod       (SDTA_Dummy + 12)

/* (BYTE *) Sample data */
#define SDTA_LeftSample         (SDTA_Dummy + 13)
#define SDTA_RightSample        (SDTA_Dummy + 14)

/* (BYTE) Stereo panning */
#define SDTA_Pan                (SDTA_Dummy + 15)

/* (BOOL) FreeVec() all sample data upon OM_DISPOSE. */
#define SDTA_FreeSampleData     (SDTA_Dummy + 16)

/* (BOOL) Wait for the current sample to be played back before
 * switching to the new sample data.
 */
#define SDTA_SyncSampleChange   (SDTA_Dummy + 17)

/*****************************************************************************/

/* Data compression methods */
#define CMP_NONE     0
#define CMP_FIBDELTA 1

/*****************************************************************************/

/* Unity = Fixed 1.0 = maximum volume */
#define Unity 0x10000UL

/*****************************************************************************/

struct VoiceHeader
{
        ULONG vh_OneShotHiSamples;      /* # samples in the high octave 1-shot part */
        ULONG vh_RepeatHiSamples;       /* # samples in the high octave repeat part */
        ULONG vh_SamplesPerHiCycle;     /* # samples/cycle in high octave, else 0 */
        UWORD vh_SamplesPerSec;         /* data sampling rate */
        UBYTE vh_Octaves;               /* # of octaves of waveforms */
        UBYTE vh_Compression;           /* data compression technique used */
        ULONG vh_Volume;                /* playback nominal volume from 0 to Unity
                                         * (full volume). Map this value into
                                         * the output hardware's dynamic range.
                                         */
};

/*****************************************************************************/

/* Channel allocation */
#define SAMPLETYPE_Left         (2L)
#define SAMPLETYPE_Right        (4L)
#define SAMPLETYPE_Stereo       (6L)

typedef long SampleType;

/*****************************************************************************/

/* IFF types */
#define ID_8SVX MAKE_ID('8','S','V','X')
#define ID_VHDR MAKE_ID('V','H','D','R')
#define ID_CHAN MAKE_ID('C','H','A','N')
#define ID_BODY MAKE_ID('B','O','D','Y')

/*****************************************************************************/

#endif  /* DATATYPES_SOUNDCLASS_H */