audio.h 4.13 KB
/*============================================================================

		NINTENDO64 TECHNICAL SUPPORT CENTER 
		
		    NINTENDO64 SAMPLE PROGRAM 2

		Copyright (C) 1997, NINTENDO Co,Ltd.

============================================================================*/
#ifndef _AUDIO_H_
#define _AUDIO_H_

/*------------------------- debug flag ----------------------------*/

#ifdef _AUDIO_DEBUG_
/*
   以下のフラグを使用する場合は_AUDIO_DEBUG_フラグを有効にする
   必要があります
*/
#undef _AUDIO_DEBUG_DMA_       /* DMA起動数の表示 */
#undef _AUDIO_DEBUG_PROC_      /* CPU占有率の表示 */

#endif /* _AUDIO_DEBUG */
/*------------------------- define --------------------------------*/
/*
   コンパクトMIDI形式のデータを使用する場合は
   このフラグを使用してください。
   Type0 MIDIシーケンスプレイヤーを使用する場合は
   unddefしてください
*/
#undef  _AUDIO_COMPACTMIDI_

/*
   この部分のパラメータは適宜変更する必要があります。
   適当だとうまく動作しません。
*/
#define AUDIO_HEAP_SIZE          500000  /* ヒープ領域のサイズ */
#define AUDIO_CLIST_SIZE_MAX     5000    /* コマンドリストのバッファサイズ */
#define AUDIO_BUFFER_MAX         0x2000  /* シンセサイザ用バッファサイズ */
#define AUDIO_OUTPUT_RATE        44100   /* 周波数設定 */
#define AUDIO_VVOICE_MAX         64      /* 最大仮想ボイス数 */
#define AUDIO_PVOICE_MAX         32      /* 最大物理ボイス数 */
#define AUDIO_UPDATE_MAX         64      /* シンセサイザのパラメータ更新最大数 */

/* シーケンスプレイヤーのパラメータ設定 */
#define AUDIO_SEQ_VVOICE_MAX     64      /* 最大仮想ボイス数 */
#define AUDIO_SEQ_EVTCOUNT_MAX   64      /* イベント数 */
#define AUDIO_SEQ_CHANNEL_MAX    16      /* MIDIチャンネル数(普通は16) */

/* サウンドプレイヤーのパラメータ設定 */
#define AUDIO_SND_VOICE_MAX      32      /* 最大サウンド数 */  
#define AUDIO_SND_EVTCOUNT_MAX   64      /* 最大イベント数 */

#define AUDIO_MESGS_MAX          8

/*
   シーケンスデータバッファ

   シーケンスデータファイルのうち最大値を設定
   固定的にデータバッファを割り当てる
   必要なら動的に割り当てるように変更してちょ
 */
#define AUDIO_SEQDATA_SIZE_MAX   0x10000

#define AUDIO_EXTRA_SAMPLES      80

/*
   シーケンスプレイヤーで使用するDMA用のバッファ数 
   キャッシュ的に使用される仕組みでAUDIO_BUFFER_USE_FRAME数経過すると
   消去される。実際にどの程度のDMAbuffer数・サイズが必要かは
   ソフトにより異なるので、調べる必要がある。
*/
#define AUDIO_DMA_BUFFER_NUM    32        /* DMA buffer数 */
#define AUDIO_DMA_BUFFER_SIZE   2048      /* DMA buffer size */
#define AUDIO_DMA_QUEUE_SIZE    32        /* DMA message queue size */
#define AUDIO_BUFFER_USE_FRAME  2         /* DMABufferをクリアーするフレーム間隔 */


#define AUDIO_STACKSIZE        0x2000         /* audio thread stack size */
#define AUDIO_THREAD_PRI       50
#define AUDIO_THREAD_ID        5

#define AUDIO_NUM_FIELDS       1             /* リトレース間隔(1 or 2)*/

/*------------------------- values --------------------------------*/
/* シーケンスプレイヤー構造体 */
typedef struct {
  ALSeqpConfig seqconfig;
#ifdef _AUDIO_COMPACTMIDI_
  ALCSPlayer  seqplayer;     /* シーケンスプレイヤー構造体  */
  ALCSeq       sequence;
#else
  ALSeqPlayer seqplayer;      /* シーケンスプレイヤー構造体 */
  ALSeq       sequence;
#endif /*_AUDIO_COMPACTMIDI_ */

  u8  *seqdata_ptr;           /* シーケンスデータ */
  u32 seqno;                  /* シーケンスNo. */
  u32 state;                  /* シーケンスプレイヤーの状態 */
} Audio_seqplayer;

extern Audio_seqplayer seqplayer[2];

/*------------------------- functions --------------------------------*/
void auRomRead(u32 , void* , u32);
extern void auAudioInit(void);
extern void auReadMidiData(u32, u32);
extern void auReadSoundData(u32, u32);
extern void auReadSeqFileHeader(u32);
extern void auReadSeqFile(s32);
extern void auCleanDMABuffers(void);
extern void auCreateAudioThread(NNSched* );
extern void auSeqPlayerInit(u8* , u8*, u8*, u8*, u8*);
extern void auSeqPlayerSetFile(u32,s32);
extern int  auSeqPlayerPlay(u32);
extern s32  auSeqPlayerState(u32);
extern void auSeqPlayerStop(u32);
extern void auSndPlayerInit(u8* ,u8* ,u8*);
extern void auSndPlay(u32);
extern void auSndStop(u32);
extern s32  auSndGetState(u32);
#endif /* _AUDIO_H_ */