player.h 2.21 KB
/*====================================================================
 * player.h
 *
 * Copyright 1993, Silicon Graphics, Inc.
 * All Rights Reserved.
 *
 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
 * Inc.; the contents of this file may not be disclosed to third
 * parties, copied or duplicated in any form, in whole or in part,
 * without the prior written permission of Silicon Graphics, Inc.
 *
 * RESTRICTED RIGHTS LEGEND:
 * Use, duplication or disclosure by the Government is subject to
 * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
 * in Technical Data and Computer Software clause at DFARS
 * 252.227-7013, and/or in similar or successor clauses in the FAR,
 * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
 * Copyright Laws of the United States.
 *====================================================================*/

#ifndef __Player__
#define __Player__

#include <libaudio.h>

#define MAX_VECTORS     8
#define MAX_VOICES      16
#define MAX_WAVES       2

typedef enum {
    START = 0,
    READY = 1,
    PLAY  = 2
} State;

typedef void (*StateAction)(void *, int);

typedef struct {
    State       next;
    StateAction action;
    int         weight;
    int         count;          /* number of times visited */
} StateVector;

typedef struct {
    int         numVectors;
    int         weightTotal;
    StateVector vector[MAX_VECTORS];
} StateMachine;

typedef struct {
    State       state;
    ALVoice     *voice;
} VoiceState;

typedef struct {
    int         numVoices;
} MyPlayerConfig;

typedef struct MyPlayer_s {
    ALPlayer            node;           /* note: must be first in structure */
    StateMachine        sm[3];
    VoiceState          voices[MAX_VOICES];
    int                 numVoices;
    ALSynth             *drvr;
    int                 numWaveTables;
    ALWaveTable         *waves[MAX_WAVES];
    int                 state;
} MyPlayer;

extern  int     playerHeapSize(MyPlayerConfig *c);

extern  void    playerNew(MyPlayer *p, MyPlayerConfig *c);
extern  void    playerDelete(MyPlayer *p);

extern  void    playerSetBank(MyPlayer *p, ALBank *bank);

extern  int     playerPlay(MyPlayer *p);
extern  int     playerStop(MyPlayer *p);

#endif