nualstl.h 12 KB
/*======================================================================*/
/*		NuSYS	Audio Library for SoundTools Library & n_audio	*/
/*		nualstl_n.h						*/
/*									*/
/*		Copyright (C) 1997, NINTENDO Co,Ltd.			*/
/*									*/
/*======================================================================*/
/* $Id: nualstl.h,v 1.1.1.1 2002/10/30 02:07:09 blythe Exp $		*/
/*======================================================================*/
#ifndef _NUALSTL_H_
#define _NUALSTL_H_

#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif

/*----------------------------------------------------------------------*/    
/*----------------------------------------------------------------------*/
/*	DEFINE								*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
#define	NU_AU_SEQPLAYER_NUM	2
    
#define NU_AU_FIFO_LENGTH	64
#define NU_AU_CHANNELS		24
#define NU_AU_SYN_UPDATE_MAX	256
    
/*--------------------------------------*/
/* AUDIO DMA DEFINE			*/
/*--------------------------------------*/
#define	NU_AU_DMA_BUFFER_NUM	64	/* DMA転送バッファ数	*/
#define	NU_AU_DMA_BUFFER_SIZE	1024    /* DMAバッファサイズ	*/

/*--------------------------------------*/
/* SOUND DEFINE				*/
/*--------------------------------------*/
#define	NU_AU_MGR_THREAD_PRI	70
#define	NU_AU_MGR_THREAD_ID	6
#define	NU_AU_CLIST_LEN		0x800   /* コマンドリストのバッファサイズ */
#define	NU_AU_OUTPUT_RATE	32000	/* 周波数設定 			*/
#define	NU_AU_MESG_MAX		4


#define NU_AU_HEAP_SIZE		0x50000	/* デフォルトのHEAPサイズ */
#define NU_AU_HEAP_ADDR		(NU_GFX_FRAMEBUFFER_ADDR - NU_AU_HEAP_SIZE)
#define NU_AU_SONG_SIZE		0x4000
#define NU_AU_SAMPLE_SIZE	0x4000
#define NU_AU_SE_SIZE		0x4000
    
#define NU_AU_TASK_STOP		0	/* オーディオタスク実行停止 */
#define NU_AU_TASK_RUN		1	/* オーディオタスク実行可   */
    
#define NU_AU_SEQ_PLAYER0	0
#define NU_AU_SEQ_PLAYER1	1

#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#include <ultra64.h>
    
#include <PR/libmus.h>
#include <PR/libmus_data.h>
    
#ifdef N_AUDIO
#include <PR/n_libaudio_sc.h>
#include <PR/n_libaudio_sn_sc.h>
#endif	/* N_AUDIO */
    
/*--------------------------------------*/
/* audio typedef			*/
/*--------------------------------------*/
/* シーケンスプレイヤー構造体 */
typedef struct st_Seqence {
    musHandle	handle;
    u8*		data_ptr;       /* シーケンスデータ */
} NUAuSeqPlayer;


/*--------------------------------------*/
/* CALL BACK Function	typedef		*/
/*--------------------------------------*/
typedef void (*NUAuPreNMIFunc)(NUScMsg,u32);	/* PRENMIコールバック関数 */

/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/* extern variables 							*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/    
/*--------------------------------------*/
/*  audio variables 			*/
/*--------------------------------------*/
extern u8		nuAuTaskStop;
extern u8		nuAuPreNMI;
extern NUAuPreNMIFunc	nuAuPreNMIFunc;
extern void*		nuAuEffect_ptr;
extern void*		nuAuPtrBank_ptr;
extern NUScTask		nuAuTask;
extern OSMesgQueue	nuAuMesgQ;
extern NUAuSeqPlayer	nuAuSeqPlayer[];
extern musConfig	nuAuStlConfig;
extern NUScClient	nuAuClient;

/*----------------------------------------------------------------------*/    
/*----------------------------------------------------------------------*/
/* Global Function 							*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*--------------------------------------*/
/* audio manager function		*/
/*--------------------------------------*/
extern s32	nuAuStlInit(void);
extern s32	nuAuStlMgrInit(musConfig* config);
extern void	nuAuStlPtrBankInit(u32 pbk_size);
extern void	nuAuStlPtrBankSet(u8* pbk_addr, u32 pbk_size, u8* wbk_addr);
extern void	nuAuStlSeqPlayerInit(u32 player_no, u32 size);
extern void	nuAuStlSeqPlayerDataSet(u32 player_no, u8 *seq_addr, u32 seq_size);
extern musHandle nuAuStlSeqPlayerPlay(u32 player_no);

extern void	nuAuStlSndPlayerInit(u32 size);
extern u32	nuAuStlSndPlayerPlay(u32 sndNo);
extern u32	nuAuStlSndPlayerPlay2(u32 sndNo, s32 volume, s32 pan, s32 restartflag, s32 priority);
extern void	nuAuStlSndPlayerDataSet(u8* snd_addr, u32 snd_size);
extern void	nuAuPreNMIFuncSet(NUAuPreNMIFunc func);
extern void	nuAuPreNMIProc(NUScMsg mesg_type, u32 frameCounter);
extern void	nuAuStlSndPlayerSetData(u8 *snd_addr, u32 snd_size);
extern void*	nuAuStlHeapAlloc(s32 length);
extern s32	nuAuStlHeapGetFree(void);
extern s32	nuAuStlHeapGetUsed(void);

/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/* MACRO	 							*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/

/* コールバック関数の削除 */
#define nuAuPreNMIFuncRemove() nuAuPreNMIFuncSet(NULL)

/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerGetState - シーケンスプレイヤーの状態を取得		*/
/*	IN:	無し							*/
/*	RET:	シーケンスプレイヤーが使用中のチャンネル数		*/
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerGetState()					\
	MusAsk(MUSFLAG_SONGS)

/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerStop - 全シーケンスの演奏停止			*/
/*	IN:	speed		停止するまでのフレーム数		*/
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerStop(speed)					\
	MusStop(MUSFLAG_SONGS, speed)

/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSetMasterVol - シーケンス全体のボリューム設定	*/
/*	IN:	vol		ボリューム (0 - 0x7fff)			*/
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSetMasterVol(vol)				\
	MusSetMasterVolume(MUSFLAG_SONGS, vol)


/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerGetSeqState - シーケンスの状態を取得			*/
/*	IN:	player_no	シーケンスプレイヤー番号		*/
/*	RET:	現在演奏中のチャンネル数				*/
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerGetSeqState(player_no)				\
	MusHandleAsk(nuAuSeqPlayer[player_no].handle)

/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSeqStop - シーケンスの演奏停止			*/
/*	IN:	player_no	シーケンスプレイヤー番号		*/
/*		speed		停止するまでのフレーム数		*/
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSeqStop(player_no, speed)			\
	MusHandleStop(nuAuSeqPlayer[player_no].handle, speed)

/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSetSeqTempo - シーケンスのテンポ設定			*/
/*	IN:	player_no	シーケンスプレイヤー番号		*/
/*		tempo		テンポ (0 - 0x100)			*/
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSetSeqTempo(player_no, tempo)			\
	MusHandleSetTempo(nuAuSeqPlayer[player_no].handle, tempo)

/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSetSeqVol - シーケンスのボリューム設定		*/
/*	IN:	player_no	シーケンスプレイヤー番号		*/    
/*		vol		ボリュームスケール (0 - 0x100)		*/
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSetSeqVol(player_no, vol)			\
	MusHandleSetVolume(nuAuSeqPlayer[player_no].handle, vol)

/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSetSeqPan - シーケンスのパン位置の設定		*/
/*	IN:	player_no	シーケンスプレイヤー番号		*/    
/*		pan		パンスケール				*/
/*				0=左 0x80=中央 0x100=右			*/
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSetSeqPan(player_no, pan)			\
	MusHandleSetPan(nuAuSeqPlayer[player_no].handle, pan )

/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerGetState - サウンドプレイヤーの状態を取得		*/
/*	IN:	無し							*/
/*	RET:	現在演奏中のチャンネル数				*/
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerGetState()					\
	MusAsk(MUSFLAG_EFFECTS)

/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerStop - 全サウンドの再生を停止			*/
/*	IN:	speed		停止するまでのフレーム数		*/
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerStop(speed)					\
	MusStop(MUSFLAG_EFFECTS, speed)

/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSetMasterVol - サウンド全体のボリュームを設定	*/
/*	IN:	vol		ボリューム (0 - 0x7fff)			*/
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSetMasterVol(vol)				\
	MusSetMasterVolume(MUSFLAG_EFFECTS, vol)


/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerGetSndState - サウンドの状態を取得			*/
/*	IN:	handle		サウンド・ハンドラ			*/
/*		無し							*/
/*	RET:	現在演奏中のチャンネル数				*/
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerGetSndState(handle)				\
	MusHandleAsk(handle)

/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSndStop - サウンドの演奏停止				*/
/*	IN:	handle		サウンド・ハンドラ			*/
/*		speed		停止するまでのフレーム数		*/
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSndStop(handle, speed)				\
	MusHandleStop(handle, speed)

/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSetSndVol - サウンドのボリューム設定			*/
/*	IN:	handle		サウンド・ハンドラ			*/
/*		vol		ボリュームスケール (0 - 0x100)		*/
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSetSndVol(handle, vol)				\
	MusHandleSetVolume(handle, vol)

/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSetSndPan - サウンドのパン位置の設定			*/
/*	IN:	handle		サウンド・ハンドラ			*/
/*		pan		パンスケール				*/
/*				0=左 0x80=中央 0x100=右			*/
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSetSndPan(handle, pan)				\
	MusHandleSetPan(handle, pan )

/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSetSndPitch - サウンドのピッチを設定			*/
/*	IN:	handle		サウンド・ハンドラ			*/
/*		pitch		ピッチ値 (-6.0 - +6.0)			*/
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSetSndPitch(handle, pitch)			\
	MusHandleSetFreqOffset(handle, pitch)
	    
/************************************************************************/
/*	ベータ版との名前の変更の吸収(非推奨)				*/
/************************************************************************/
#define	nuAuStlBankSet(pbk_addr, pbk_size, wbk_addr)			\
{									\
    nuAuStlPtrBankInit(pbk_size);					\
    nuAuStlPtrBankSet(pbk_addr, pbk_size, wbk_addr);			\
}

/************************************************************************/
/* このマクロは以前のバージョンとの互換性の為にあります。		*/
/* 将来的には無くすので、名前のほうを変更してください。			*/
/************************************************************************/
#define	nuAuStlSeqPlayerSetData(player_no, seq_addr, seq_size)		\
	nuAuStlSeqPlayerDataSet(player_no, seq_addr, seq_size)
	    
#define	nuAuStlSndPlayerSetData(snd_addr, snd_size)			\
	nuAuStlSndPlayerDataSet(snd_addr, snd_size)

#define	nuAuStlPlayerInit(c, size) ((void)0);
	    
#endif  /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
#ifdef _LANGUAGE_C_PLUS_PLUS
}
#endif
#endif /* _NUALSTL_H__ */