audio.h 2.18 KB
/*
 *  NINTENDO64 SAMPLE PROGRAM
 *
 *  FILE : audio.h
 *
 *  Copyright (C) 1997, NINTENDO Co,Ltd.
 */


#define  AUDIO_HEAP_SIZE  500000

#define  NUM_ACMD_LISTS  2
#define  MAX_RSP_CMDS    4096

#define  NUM_OUTPUT_BUFFERS  3

#define  MAX_SEQ_LENGTH  20000

#define  MAX_VOICES    24
#define  MAX_UPDATES   128
#define  MAX_EVENTS    128
#define  MAX_CHANNELS  16

#define  NUM_FIELDS  1

/* 再生周波数 */
#define  OUTPUT_RATE  44100

/* オーディオマネージャ用 */
#define  AUDIO_PRIORITY   12
#define  AUDIO_STACKSIZE  0x8000

/* n_audio 用 */
#define  SAMPLES        184
#define  EXTRA_SAMPLES  0

/* for DMA */
#define  NUM_DMA_BUFFERS    128
#define  DMA_BUFFER_LENGTH  512
#define  NUM_DMA_MESSAGES   64
#define  FRAME_LAG          1


/* オーディオバッファ構造体 */
typedef struct AudioInfo_s {

  /* オーディオバッファ */
  s16  *data;

  /* オーディオフレームサイズ */
  s16  frameSamples;

  /* タスク構造体 */
  MYScTask  task;

} AudioInfo;


/* オーディオマネージャ構造体 */
typedef struct {

  /* コマンドリストバッファ */
  Acmd  *ACMDList[NUM_ACMD_LISTS];

  /* オーディオバッファ */
  AudioInfo  *audioInfo[NUM_OUTPUT_BUFFERS];

  /* オーディオマネージャスレッド */
  OSThread  thread;

  /* リトレース用 */
  OSMesgQueue  audioFrameMsgQ;
  OSMesg       audioFrameMsgBuf;

  /* Gfx CPU 処理終了用 */
  OSMesgQueue  audioStartMsgQ;
  OSMesg       audioStartMsgBuf;

  N_ALGlobals   g;

} AMAudioMgr;


/* DMA BUFFER */
typedef struct 
{
    ALLink   node;
    u32      startAddr;
    u32      lastFrame;
    s8      *ptr;
} AMDMABuffer;


/* DMA STATE */
typedef struct 
{
    u8           initialized;
    AMDMABuffer  *firstUsed;
    AMDMABuffer  *firstFree;
} AMDMAState;


/*
 *  extern 宣言
 */
/* オーディオヒープ */
extern  ALHeap  hp;

/* シーケンスバンクファイル */
extern  ALSeqFile  *seqfile;

/* コンパクトシーケンスプレイヤー */
extern  N_ALCSPlayer  *seqp;

/* コンパクトシーケンス */
extern  ALCSeq  *seq;

/* オーディオマネージャ */
extern  AMAudioMgr  __am;

/* シーケンスデータへのポインタ */
extern  u8  *seqptr;

/* サウンドプレイヤー */
extern  N_ALSndPlayer  *sndp;

/* サウンドへのポインタ */
extern  ALSndId  *sndid;


/*
 *  プロトタイプ宣言
 */
/* オーディオの初期化 */
void  initAudio(void);