Logo Search packages:      
Sourcecode: nas version File versions  Download package

sound.h

/*
 * Copyright 1993 Network Computing Devices, Inc.
 * 
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name Network Computing Devices, Inc. not be
 * used in advertising or publicity pertaining to distribution of this
 * software without specific, written prior permission.
 * 
 * THIS SOFTWARE IS PROVIDED 'AS-IS'.  NETWORK COMPUTING DEVICES, INC.,
 * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT
 * LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NONINFRINGEMENT.  IN NO EVENT SHALL NETWORK
 * COMPUTING DEVICES, INC., BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING
 * SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, INCLUDING LOSS OF USE, DATA,
 * OR PROFITS, EVEN IF ADVISED OF THE POSSIBILITY THEREOF, AND REGARDLESS OF
 * WHETHER IN AN ACTION IN CONTRACT, TORT OR NEGLIGENCE, ARISING OUT OF OR IN
 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 * 
 * $NCDId: @(#)sound.h,v 1.22 1995/12/06 01:24:53 greg Exp $
 */

/*
 * generic sound file handling
 */

#ifndef _SOUND_H_
#define _SOUND_H_

#include    <audio/snd.h>
#include    <audio/voc.h>
#include    <audio/wave.h>
#include    <audio/aiff.h>
#include    <audio/8svx.h>
#include    <audio/audio.h>

#ifndef _SoundConst
#if __STDC__ || defined(__cplusplus) || defined(c_plusplus) || (FUNCPROTO&4)
#define _SoundConst const
#else
#define _SoundConst                       /**/
#endif
#endif                                    /* _SoundConst */

#ifndef _FUNCPROTOBEGIN
#ifdef __cplusplus                  /* for C++ V2.0 */
#define _FUNCPROTOBEGIN extern "C" {      /* do not leave open across includes */
#define _FUNCPROTOEND }
#else
#define _FUNCPROTOBEGIN
#define _FUNCPROTOEND
#endif
#endif /* _FUNCPROTOBEGIN */

/*
 * !!! WARNING !!!
 * 
 * Applications should not reference this structure directly.  They should use
 * the macros defined below.
 */
typedef struct
{
    int             fileFormat,
                    dataFormat,
                    numTracks,
                    sampleRate,
                    numSamples;
    char           *comment;
    void           *formatInfo;
}               SoundRec, *Sound;

typedef int (*SoundFileInfoProc)(Sound);

extern char *SoundFileFormatString(Sound s);
extern int   SoundValidDataFormat(int _f, int _d);

#define SoundFileFormat(_s)   ((_s)->fileFormat)
#define SoundDataFormat(_s)   ((_s)->dataFormat)
#define SoundDataFormatString(_s) (AuFormatToString(SoundDataFormat(_s)))
#define SoundNumTracks(_s)    ((_s)->numTracks)
#define SoundSampleRate(_s)   ((_s)->sampleRate)
#define SoundNumSamples(_s)   ((_s)->numSamples)
#define SoundComment(_s)      ((_s)->comment)
#define SoundBytesPerSample(_s)     (AuSizeofFormat(SoundDataFormat(_s)))
#define SoundNumBytes(_s)                                         \
    (SoundNumSamples(_s) * SoundBytesPerSample(_s) * SoundNumTracks(_s))
#define SoundValidateDataFormat(_s)                               \
    SoundValidDataFormat(SoundFileFormat(_s), SoundDataFormat(_s))

#define SoundUnknownNumSamples      0xffffffff

_FUNCPROTOBEGIN

extern          Sound
SoundOpenFileForReading(
                  _SoundConst char *      /* file name */
);

extern          Sound
SoundOpenFileForWriting(
                  _SoundConst char *,     /* file name */
                  Sound             /* sound */
);

#define SoundDestroy SoundCloseFile

extern int
SoundCloseFile(
             Sound
);

extern int
SoundReadFile(
            char *,                       /* buffer */
            int,                    /* num bytes */
            Sound
);

extern int
SoundWriteFile(
            char *,                       /* buffer */
            int,                    /* num bytes */
            Sound
);

extern          Sound
SoundCreate(
          int,                      /* file format */
          int,                      /* data format */
          int,                      /* num tracks */
          int,                      /* sample rate */
          int,                      /* num samples */
          _SoundConst char *              /* comment */
);

extern int
SoundStringToFileFormat(
                  _SoundConst char *      /* string */
);

extern int
SoundAbbrevToFileFormat(
                  _SoundConst char *      /* string */
);

extern int
SoundRewindFile(
            Sound
);

extern int
SoundSeekFile(
            int,                    /* number of audio bytes */
            Sound
);

extern int
SoundTellFile(
            Sound
);

extern int
SoundFlushFile(
            Sound
);

_FUNCPROTOEND

#define SoundDataFormatBit(_i)            (1L << (_i))

char *SoundFileFormatToString(int _i);
char *SoundFileFormatToAbbrev(int _i);
char *SoundFileFormatToSuffixes(int _i);

/*
 * these must be in the same order as the formats are defined in
 * _SoundFileInfo in sound.c
 */
enum _SoundFileFormatsID
{
    SoundFileFormatSnd,
    SoundFileFormatVoc,
    SoundFileFormatWave,
    SoundFileFormatAiff,
    SoundFileFormatSvx,

    SoundFileFormatNone                   /* must be last */
};

/* for backwards compatibility */
#define SND_MAGIC SoundFileFormatSnd
#define VOC_MAGIC SoundFileFormatVoc
#define WAVE_MAGIC      SoundFileFormatWave
#define AIFF_MAGIC      SoundFileFormatAiff
#define SVX_MAGIC SoundFileFormatSvx

typedef struct
{
    char           *string,
                   *abbrev,
                   *suffixes;
    AuUint32        dataFormats;
    void           *(*openFileForReading) (),
                   *(*openFileForWriting) ();
    int             (*readFile) (),
                    (*writeFile) (),
                    (*closeFile) (),
                    (*rewindFile) (),
                    (*seekFile) (),
                    (*tellFile) (),
                    (*flushFile) (),
                    (*toSound) (),
                    (*fromSound) ();
}               SoundInfo;

#define SoundFileInfoProcTo 0
#define SoundFileInfoProcFrom 1

extern SoundFileInfoProc SoundFileGetProc(int format, int proc);

extern _SoundConst int SoundNumFileFormats;

#endif                                    /* _SOUND_H_ */

Generated by  Doxygen 1.6.0   Back to index