#ifndef	_ADXT_H_INCLUDED
#define	_ADXT_H_INCLUDED
/****************************************************************************/
/*																			*/
/*			$title$ ＡＤＸデータ再生 ライブラリ								*/
/*					ADXT (ADX TALK) Library									*/
/*																			*/
/*				1997.2.25		written M.Oshimi							*/
/*																			*/
/****************************************************************************/

#define	ADXT_VER	"5.42"

/*	トランスポーズ機能を入れるか否か	*/
/*
#define		TRNSPS
*/

/*	ストリームジョイント	*/
#ifndef SJ_DEFINED
#define SJ_DEFINED
typedef void *SJ;
#endif


/*	ストリームコントローラ	*/
#ifndef ADXSTM_DEFINED
#define ADXSTM_DEFINED
typedef	void	*ADXSTM;
#endif
/*	ストリームジョイントデコーダ	*/
#ifndef ADXSJD_DEFINED
#define ADXSJD_DEFINED
typedef void	*ADXSJD;
#endif
/*	オーディオレンダラ	*/
#ifndef ADXRNA_DEFINED
#define ADXRNA_DEFINED
typedef void	*ADXRNA;
#endif

#ifndef TRUE
#define TRUE	1
#endif
#ifndef FALSE
#define FALSE	0
#endif

/*	最大同時発音数	*/
#define	ADXT_MAX_OBJ		(8)

/*	最大データサイズ	*/	
#define	ADXT_MAX_DATASIZE	(0x40000000)

/*	入力バッファのエキストラ領域の大きさ	*/
#define ADXT_IBUF_XLEN (36)

/*	ADX Talk の出力バッファの大きさ　（サンプル単位）	*/
#define	ADXT_OBUF_SIZE	(0x2000)
#define	ADXT_OBUF_DIST	(0x2020)

#define	ADXT_MAX_SFREQ	(44100)

/*	ADX Talkの再生方式	(ADXT_CALC_WORKマクロで使用)	*/
#define ADXT_PLY_MEM	(0)			/*	メモリによる再生			*/
#define ADXT_PLY_STM	(1)			/*	CDからのストリーム再生		*/

/*
#define ADXT_CALC_IBUFSIZE0(nch, sfreq)	\
	((long)((double)25000.0*(double)(sfreq)/(double)44100)*(nch))
*/
/*	1998.9.9
#define ADXT_CALC_IBUFSIZE0(nch, sfreq)	(25000*(nch)*44/((sfreq)/1000))
*/
#define ADXT_CALC_IBUFSIZE0(nch, sfreq)	(25000*(nch)*((sfreq)/1000)/44)

#define ADXT_CALC_IBUFSIZE(nch, nstm, sfreq)	\
	((ADXT_CALC_IBUFSIZE0(nch, sfreq)*((nstm)+1)+2048)/2048*2048+ADXT_IBUF_XLEN)
#define ADXT_CALC_OBUFSIZE(nch)	\
	( ADXT_OBUF_DIST*(nch)*sizeof(short))
#define ADXT_CALC_WORK(nch, stmflg, nstm, sfreq)	\
	(ADXT_CALC_IBUFSIZE(nch, nstm, sfreq)*(stmflg) + ADXT_CALC_OBUFSIZE(nch) + 32)

/*	ＣＤバッファへの読み込み量	*/
#define ADXT_MAX_CDBSCT		(75)
#define ADXT_MIN_CDBSCT		(65)
#define ADXT_PREP_RDSCT		(25)

/* $define$ ADX Talkの動作状態(ADXT_STAT_〜) */
#define	ADXT_STAT_STOP		(0)		/* 停止中 					*/
#define ADXT_STAT_DECINFO	(1)		/* ＡＤＸ のヘッダ情報取得中*/
#define ADXT_STAT_PREP		(2)		/* 再生準備中 				*/
#define ADXT_STAT_PLAYING	(3)		/* デコード＆再生中 		*/
#define ADXT_STAT_DECEND	(4)		/* デコード終了 			*/
#define ADXT_STAT_PLAYEND	(5)		/* 再生終了 				*/

/* $define$ ADX Talkのエラーコード　(ADXT_ERR_〜) */
#define	ADXT_ERR_OK			(0)		/* 正常 					*/
#define ADXT_ERR_SHRTBUF	(-1)	/* 入力バッファエンプティ	*/
#define ADXT_ERR_SNDBLK		(-2)	/* サウンドブロックエラー	*/

/*	$define$ フィルタモード	(ADXT_FLTMODE_〜)*/
#define	ADXT_FLTMODE_CPU	(0)		/*	ＣＰＵによる展開モード		*/
#define	ADXT_FLTMODE_SCSP	(1)		/*	AICA-DSPによる展開モード	*/

/*	$define$ 再生モード	(ADXT_PMODE_〜)*/
#define	ADXT_PMODE_FNAME	(0)		/*	ファイル名または FID による指定		*/
#define	ADXT_PMODE_AFS		(1)		/*	AFS による指定						*/
#define	ADXT_PMODE_MEM		(2)		/*	メモリ再生							*/
#define	ADXT_PMODE_SJ		(3)		/*	ストリームジョイント再生			*/

/*	$define$ エラーリカバーモード	(ADXT_RMODE_〜)*/
#define	ADXT_RMODE_NOACT	(0)		/*	リカバー処理しない					*/
#define	ADXT_RMODE_STOP		(1)		/*	自動停止							*/
#define	ADXT_RMODE_REPLAY	(2)		/*	自動再プレイ						*/

/*	パンポットの設定値		*/
#define	ADXT_PAN_LEFT		(-15)
#define	ADXT_PAN_CENTER		(0)
#define	ADXT_PAN_RIGHT		(15)
#define	ADXT_PAN_AUTO		(-128)	/*	MONO/STE によって自動的に切り替える*/

/*	ステレオ再生時のチャンネル番号	*/
#define	ADXT_CH_L			(0)
#define	ADXT_CH_R			(1)

/*	最大再生チャンネル数	*/
#define	ADXT_MAX_NCH		(2)

/*	サーバ関数の呼び出される頻度の規定値　60（回/秒）	*/
#define ADXT_DEF_SVRFREQ	(60)

#define	ADXT_DEF_OUTVOL		(0)

/*	入力バッファの下限値 (エラー処理用、単位バイト）	*/
#define	ADXT_MIN_BUFDATA	(64)

/*	エラー発生待ち時間　（単位:秒)	*/
#define	ADXT_EWAIT_PLY		(5)
#define	ADXT_EWAIT_NOTPLY	(5)

/*	インデックスの最大数	*/
#define	ADXT_MAX_IDX	(0xFFFF)

/*	ADX Talk オブジェクト構造体	*/
typedef	struct _adx_talk {
	char	used;						/*	使用中か否か					*/
	char	stat;						/*	動作状態						*/
	char	pmode;						/*	再生モード						*/
	char	maxnch;						/*	最大再生チャンネル数			*/
	ADXSJD	sjd;						/*	ADXストリームジョイントデコーダ	*/
	ADXSTM	stm;						/*	入力ストリームコントローラ		*/
	ADXRNA	rna;						/*	オーディオレンダラ				*/
	SJ		sjf;						/*	ファイル入力ストリームジョイント*/
	SJ		sji;						/*	入力ストリームジョイント		*/
	SJ		sjo[ADXT_MAX_NCH];			/*	出力ストリームジョイント		*/
	char	*ibuf;						/*	入力バッファ					*/
	long	ibuflen;					/*	入力バッファサイズ（バイト単位)	*/
	long	ibufxlen;					/*	入力バッファエクストラサイズ	*/
	short	*obuf;						/*	出力バッファ					*/
	long	obufsize;					/*	出力バッファサイズ（サンプル）	*/
	long	obufdist;					/*	出力バッファ間隔（サンプル）	*/
	long	svrfreq;					/*	サーバ関数呼び出し頻度			*/
	short	maxsct;						/*	入力バッファ内の最高セクタ数	*/
	short	minsct;						/*	入力バッファ内の最低セクタ数	*/
	short	outvol;						/*	出力ボリューム					*/
	short	outpan[ADXT_MAX_NCH];		/*	出力パンポットの設定値			*/
	long	maxdecsmpl;					/*	最大デコードサンプル数			*/
	long	lpcnt;						/*	ループカウンタ					*/
	long	lp_skiplen;					/*	ループスキップバイト数			*/
	long	trp;						/*	トランスポーズ量 (セント)		*/
	long	wpos;						/*	メディア上の書き込み位置		*/
	long	mofst;						/*	メディア上のオフセット			*/
	short	ercode;						/*	エラーコード					*/
	long	edecpos;					/*	エラー検出用デコード位置		*/
	short	edeccnt;					/*	デコード位置カウンタ			*/
	short	eshrtcnt;					/*	入力ﾊﾞｯﾌｧｴﾝﾌﾟﾃｨｰｶｳﾝﾀ			*/
	char	lpflg;						/*	ループするか否か				*/
	char	autorcvr;					/*	自動的にエラー復帰するか否か	*/
	char	fltmode;					/*	フィルタモード					*/
	char	execflag;					/*	サーバを実行するか否か			*/
	char	pstwait_flag;				/*	音声出力開始待ちフラグ			*/
	char	pstready_flag;				/*	音声出力準備完了フラグ			*/
} ADX_TALK;
typedef	ADX_TALK	*ADXT;

/*	インデックスデータ	*/
typedef struct _adxt_idx {
	unsigned short nidx;
	unsigned short top;
} ADXT_IDX;

/* $func$ ADX Talk の初期化
 * [書　式] void ADXT_Init(void);
 * [入　力] なし
 * [出　力] なし
 * [関数値] なし
 * [機　能] ADX Talk を初期化する。
 *			変数領域の初期化を行う。
 */
void ADXT_Init(void);

/* $func$ ADX Talk の再初期化
 * [書　式] void ADXT_Reset(void);
 * [入　力] なし
 * [出　力] なし
 * [関数値] なし
 * [機　能] ADX Talk を再初期化する。
 *			変数領域の初期化を行う。
 */
void ADXT_Reset(void);

/* $func$ ADX Talkの終了
 * [書　式] void ADXT_Finish(void);
 * [入　力] なし
 * [出　力] なし
 * [関数値] なし
 * [機　能] ADX Talk の終了処理をする。
 */
void ADXT_Finish(void);

/*	$func$ ADXTハンドル の生成
 * [書　式] ADXT ADXT_Create(long maxnch, void *work, long worksize);
 * [入　力] maxnch	: 最大再生チャンネル数（モノラルのみ１：ステレオ２）
 *			work	: ワーク領域
 *			worksize: メモリ再生フラグ（メモリ再生のみ:1)
 * [出　力] なし
 * [関数値] ADXTハンドル
 * [機　能] ADXTハンドルを生成する。
 *			work領域のサイズは、ADXT_CALC_WORK_SIZEマクロによって求める。
 *			work領域は、32byteバウンダリでなければならない。
 *			メモリ再生のみを行う場合は、memflagを１にする。
 */
ADXT ADXT_Create(long maxnch, void *work, long worksize);

/* $func$ ADXTハンドル の消去
 * [書　式] void ADXT_Destroy(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] なし
 * [機　能] 指定された ADXTハンドルを消去する。
 */
void ADXT_Destroy(ADXT adxt);

/* $func$ FID 指定による再生の開始
 * [書　式] void ADXT_StartAfs(ADXT adxt, long patid, long fid);
 * [入　力] adxt	: ADXTハンドル
 *			patid	: パーティション識別子
 *			fid		: ファイル識別子
 * [出　力] なし
 * [関数値] なし
 * [機　能] パーティション識別子とファイル識別子で指定されたＡＤＸファイルの
 *			再生を開始する。
 */
void ADXT_StartAfs(ADXT adxt, long patid, long fid);

/* $func$ ファイル名指定による再生の開始
 * [書　式] void ADXT_StartFname(ADXT adxt, char *fname);
 * [入　力] adxt	: ADXTハンドル
 *			fnmae	: ファイル名
 * [出　力] なし
 * [関数値] なし
 * [機　能] fname で指定されたＡＤＸファイルの再生を開始する。
 */
void ADXT_StartFname(ADXT adxt, char *fname);

/* $func$ ストリームジョイントによる再生の開始
 * [書　式] void ADXT_StartMem(ADXT adxt, SJ sj);
 * [入　力] adxt	: ADXTハンドル
 *			sj		: ストリームジョイント
 * [出　力] なし
 * [関数値] なし
 * [機　能] ストリームジョイントから得られるデータを再生する。
 */
void ADXT_StartSj(ADXT adxt, SJ sj);

/* $func$ メモリ指定による再生の開始
 * [書　式] void ADXT_StartMem(ADXT adxt, void *adxdat, long no);
 * [入　力] adxt	: ADXTハンドル
 *			adxdat	: ＡＤＸデータ
 * [出　力] なし
 * [関数値] なし
 * [機　能] adxdatで指定されたＡＤＸデータを再生する。
 */
void ADXT_StartMem(ADXT adxt, void *adxdat);

/* $func$ メモリ指定による再生の開始
 * [書　式] void ADXT_StartMemIdx(ADXT adxt, void *acx, long no);
 * [入　力] adxt	: ADXTハンドル
 *			acx		: ＡＤＸ効果音データ
 *			no		: 効果音番号
 * [出　力] なし
 * [関数値] なし
 * [機　能] acx で指定されたＡＤＸ効果音データのno番目のデータを再生する。
 */
void ADXT_StartMemIdx(ADXT adxt, void *acx, long no);

/* $func$ 再生の停止
 * [書　式] void ADXT_Stop(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] なし
 * [機　能] ＡＤＸの再生を停止する。
 */
void ADXT_Stop(ADXT adxt);

/* $func$ 状態の取得
 * [書　式] long ADXT_GetStat( ADXT adxt );
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] 現在の ADXTハンドルの状態を表す定数
 * 				ADXT_STAT_STOP	 :	停止中
 *				ADXT_STAT_DECINFO:	ＡＤＸ のヘッダ情報取得中
 *				ADXT_STAT_PREP	 :	再生準備中
 *				ADXT_STAT_PLAYING:	デコード＆再生中
 *				ADXT_STAT_DECEND :	デコード終了
 *				ADXT_STAT_PLAYEND:	再生終了
 * [機　能] 現在のADXTハンドルの状態を取得する。
 */
long ADXT_GetStat(ADXT adxt);

/* $func$ サンプル単位での再生時刻の取得
 * [書　式] void ADXT_GetTime( ADXT adxt, long *ncount, long *tscale );
 * [入　力] adxt	: ADXTハンドル
 * [出　力] ncount	: 再生サンプル数
 *			tscale	: サンプリング周波数 [ Hz ]
 * [関数値] なし
 * [機　能] サンプル単位で再生時刻を取得する。
 */
void ADXT_GetTime(ADXT adxt, long *ncount, long *tscale);

/* $func$ 実時間での再生時刻の取得
 * [書　式] long ADXT_GetTimeReal(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] 再生時刻 [ 1/100sec ]
 * [機　能] 実時間で再生時刻を取得する。
 */
long ADXT_GetTimeReal(ADXT adxt);

/* $func$ 音声データの総サンプル数の取得
 * [書　式] long ADXT_GetNumSmpl( ADXT adxt );
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] 音声データの総サンプル数
 * [機　能] 再生中の ＡＤＸ データの総サンプル数を取得する。
 * [備　考] 状態が、再生準備中(ADXT_STAT_PREP)から再生終了(ADXT_STAT_PLAYEND)
 *			までの時に取得可能。
 */
long ADXT_GetNumSmpl(ADXT adxt);

/* $func$ 音声データのサンプリング周波数の取得
 * [書　式] long ADXT_GetSfreq(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] 音声データのサンプリング周波数
 * [機　能] 再生中の サンプリング周波数を求める。
 * [備　考] 状態が、再生準備中(ADXT_STAT_PREP)から再生終了(ADXT_STAT_PLAYEND)
 *			までの時に取得可能。
 */
long ADXT_GetSfreq(ADXT adxt);

/*	$func$ パンポットの設定
 * [書　式] void ADXT_SetOutPan(ADXT adxt, long ch, long pan);
 * [入　力] adxt	: ADXTハンドル
 *			ch		: チャネル番号 (0, 1)
 *						ADXT_CH_L=0, ADXT_CH_R=1
 *			pan		: パン設定値 (-15〜+15, -128)
 *						ADXT_PAN_LEFT=-15, ADXT_PAN_CENTER=0
 *						ADXT_PAN_RIGHT=15, ADXT_PAN_AUTO=-128
 * [出　力] なし
 * [関数値] なし
 * [機　能] 出力パンポットを設定する。音声の再生を開始する前に設定する。
 *			AUTO の場合は、ADX データがモノラルかステレオかによって自動的に
 *			パンが設定される。
 */
void ADXT_SetOutPan(ADXT adxt, long ch, long pan);

/*	$func$ パンポットの取得
 * [書　式] void ADXT_GetOutPan(ADXT adxt, long ch);
 * [入　力] adxt	: ADXTハンドル
 *			ch		: チャネル番号 (0, 1)
 *						ADXT_CH_L=0, ADXT_CH_R=1
 * [出　力] なし
 * [関数値] パンポットの設定値
 * [機　能] 出力パンポットを取得する。
 */
long ADXT_GetOutPan(ADXT adxt, long ch);

/*	$func$ 出力ボリュームの設定
 * [書　式] void ADXT_SetOutVol(ADXT adxt, long vol);
 * [入　力] adxt	: ADXTハンドル
 *			vol		: 減衰レベル　(0:-0dB, -960=-96dB)
 * [出　力] なし
 * [関数値] なし
 * [機　能] 出力ボリュームを設定する。
 *			volの設定値	0    :  -0dB  減衰なし
 *						-30  :  -3dB  約70%
 *						-60  :  -6dB  約50%
 *						-960 : -96dB  最大の減衰量
 */
void ADXT_SetOutVol(ADXT adxt, long vol);

/*	$func$ 出力ボリュームの取得
 * [書　式] void ADXT_GetOutVol(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] 出力ボリュームの設定値　(0:-0dB 〜 -960:-96dB)
 * [機　能] 出力ボリュームを取得する。
 */
long ADXT_GetOutVol(ADXT adxt);

/*	$func$ サーバ関数の呼び出し頻度の設定	(１秒当たりの呼び出し回数)
 * [書　式] void ADXT_SetSvrFreq(ADXT adxt, long freq);
 * [入　力] adxt	: ADXTハンドル
 *			freq	: サーバ関数の呼び出し頻度 (１秒当たりの呼び出し回数)
 * [出　力] なし
 * [関数値] なし
 * [機　能] サーバ関数(ADXT_ExecServer関数)の呼び出し頻度の設定する。
 *			デフォルトでは、60が設定されている。
 *			通常、設定する必要はない。
 */
void ADXT_SetSvrFreq(ADXT adxt, long freq);

/*	$func$ 再読み込み開始セクタ数の設定
 * [書　式] void ADXT_SetReloadSct(ADXT adxt, long minsct);
 * [入　力] adxt	: ADXTハンドル
 *			minsct	: 再読み込み開始セクタ数
 * [出　力] なし
 * [関数値] なし
 * [機　能] 入力バッファへの再読み込み開始セクタ数を設定する。
 *			ＣＤバッファ内の量が min セクタより少なくなるとＣＤから
 *			データを読み込む。
 */
void ADXT_SetReloadSct(ADXT adxt, long minsct);

/*	$func$ 入力バッファ内のセクタ数の取得
 * [書　式] long ADXT_GetNumSctIbuf(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] セクタ数
 * [機　能] 入力バッファに読み込まれているセクタ数を取得する。
 */
long ADXT_GetNumSctIbuf(ADXT adxt);

/*	$func$ 入力バッファに十分なデータがあるか否かの検査
 * [書　式] long ADXT_IsIbufSafety(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] TRUE(1):十分なデータがある、FALSE(0):データ不足
 * [機　能] 入力バッファに十分なデータがあるか否かを検査する。
 *			ADXT_SetReloadSct関数によって指定された再読み込み開始セクタ数以上の
 *			データがＣＤバッファ内に存在する場合、TRUEが返される。
 */
long ADXT_IsIbufSafety(ADXT adxt);

/*	$func$ エラーリカバリーモードの指定
 * [書　式] void ADXT_SetAutoRcvr(ADXT adxt, long rmode);
 * [入　力] adxt	: ADXTハンドル
 *			rmode	: エラーリカバリーの方法
 *					  ADXT_RMODE_NOACT, ADXT_RMODE_STOP, ADXT_RMODE_REPLAY
 * [出　力] なし
 * [関数値] なし
 * [機　能] エラーリカバリーの方法を設定する。
 *			ADXT_RMODE_NOACT : エラーリカバリーしない
 *			ADXT_RMODE_STOP  : 自動的に停止し、動作状態がADXT_STAT_STOPになる。
 *			ADXT_RMODE_REPLAY: CDからのデータの供給が途切れたときに、自動的に
 *							   ファイルの先頭から再生する。
 *							   その他の場合は、自動的に停止しする。
 */
void ADXT_SetAutoRcvr(ADXT adxt, long rmode);

/*	$func$ 再生が終了したか否かの検査
 * [書　式] long ADXT_IsCompleted(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] 1:再生終了、0:再生中
 * [機　能] adxtが再生が終了したか否かを調べる。
 */
long ADXT_IsCompleted(ADXT adxt);

/*	$func$ 各ハンドルのサーバ関数　（内部状態の更新)
 * [書　式] long ADXT_ExecHndl(void);
 * [入　力] なし
 * [出　力] なし
 * [関数値] なし
 * [機　能] 各ハンドルの内部状態を更新する。
 *			ADXT_ExecServer内から呼び出される。
 */
void ADXT_ExecHndl(ADXT adxt);

/*	$func$ サーバ関数　（内部状態の更新)
 * [書　式] long ADXT_ExecServer(void);
 * [入　力] なし
 * [出　力] なし
 * [関数値] なし
 * [機　能] ライブラリの内部状態を更新する。
 *			V-Sync 毎に呼び出さなければならない。
 */
void ADXT_ExecServer(void);

/*	$func$ エラーコードの取得
 * [書　式] long ADXT_GetErrCode(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] なし
 * [機　能] エラーコードを取得する。
 */
long ADXT_GetErrCode(ADXT adxt);

/*	$func$ エラーコードのクリア
 * [書　式] void ADXT_ClearErrCode(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] なし
 * [機　能] エラーコードをクリアする。
 */
void ADXT_ClearErrCode(ADXT adxt);

/*	$func$ ループした回数の取得
 * [書　式] long ADXT_GetLpCnt(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] ループした回数
 * [機　能] ループした回数を取得する。
 */
long ADXT_GetLpCnt(ADXT adxt);

/*	$func$ ループフラグの設定
 * [書　式] void ADXT_SetLpFlg(ADXT adxt, long flg);
 * [入　力] adxt	: ADXTハンドル
 *			flg		: 1=ループする、0=ループしない
 * [出　力] なし
 * [関数値] なし
 * [機　能] ループするか否かを設定する。
 */
void ADXT_SetLpFlg(ADXT adxt, long flg);

/*	$func$ 入力ＳＪの取得
 * [書　式] SJ ADXT_GetInputSj(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] ストリームジョイントハンドル
 * [機　能] 入力用ストリームジョイントを取得する。
 */
SJ ADXT_GetInputSj(ADXT adxt);

/*	$func$ 音声出力開始待ちの設定
 * [書　式] void ADXT_SetWaitPlayStart(ADXT adxt, long flg);
 * [入　力] adxt	: ADXTハンドル
 *			flg		: 1=ウェイトする、0=音声出力を即座に開始する
 * [出　力] なし
 * [関数値] なし
 * [機　能] 音声の出力の開始待ちを設定する。
 */
void ADXT_SetWaitPlayStart(ADXT adxt, long flg);

/*	$func$ 音声出力開始準備完了か否かの判定
 * [書　式] void ADXT_IsReadyPlayStart(ADXT adxt);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] なし
 * [関数値] 
 * [機　能] ループするか否かを設定する。
 */
long ADXT_IsReadyPlayStart(ADXT adxt);

/*	$func$ エフェクタの設定
 * [書　式] void ADXT_SetFx(ADXT adxt, long fxch, long fxlvl);
 * [入　力] adxt	: ADXTハンドル
 *			fxch	: エフェクタの入力チャンネル番号 (0〜15)
 *			fxlvl	: エフェクタの入力レベル　(0〜15)
 * [出　力] なし
 * [関数値] 
 * [機　能] エフェクタへの出力を設定する。
 */
void ADXT_SetFx(ADXT adxt, long fxch, long fxlvl);

/*	$func$ エフェクタ設定値の取得
 * [書　式] void ADXT_GetFx(ADXT adxt, long *fxch, long *fxlvl);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] fxch	: エフェクタへの入力チャンネル番号 (0〜15)
 *			fxlvl	: エフェクタへの入力レベル　(0〜15)
 * [関数値] 
 * [機　能] エフェクタの設定値を取得する。
 */
void ADXT_GetFx(ADXT adxt, long *fxch, long *fxlvl);

/*	$func$ フィルタの設定
 * [書　式] void ADXT_SetFilter(ADXT adxt, long coff, long q);
 * [入　力] adxt	: ADXTハンドル
 *			coff	: カットオフ周波数
 *			q		: 尖鋭度
 * [出　力] なし
 * [関数値] 
 * [機　能] フィルタへの出力を設定する。
 */
void ADXT_SetFilter(ADXT adxt, long coff, long q);

/*	$func$ フィルタ設定値の取得
 * [書　式] void ADXT_GetFilter(ADXT adxt, long *coff, long *q);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] coff	: カットオフ周波数
 *			q		: 尖鋭度
 * [関数値] 
 * [機　能] フィルタへの出力値を取得する。
 */
void ADXT_GetFilter(ADXT adxt, long *coff, long *q);

/*	$func$ トランスポーズの設定
 * [書　式] void ADXT_SetTranspose(ADXT adxt, long transps, long detune);
 * [入　力] adxt	: ADXTハンドル
 *			transps	: トランスポーズ量
 *			detune	: デチューン量
 * [出　力] なし
 * [関数値] 
 * [機　能] トランスポーズを設定する。
 */
void ADXT_SetTranspose(ADXT adxt, long transps, long detune);

/*	$func$ トランスポーズの取得
 * [書　式] void ADXT_GetTranspose(ADXT adxt, long *transps, long *detune);
 * [入　力] adxt	: ADXTハンドル
 * [出　力] transps	: トランスポーズ量
 *			detune	: デチューン量
 * [関数値] 
 * [機　能] トランスポーズ量を取得する。
 */
void ADXT_GetTranspose(ADXT adxt, long *transps, long *detune);

/*	$func$ エラー関数の登録
 * [書　式] void ADXT_EntryErrFunc(void (*func)(void *obj, char *msg),
 *																void *obj);
 * [入　力] func	: エラー処理関数
 *			obj		: エラー処理関数の第1引数
 * [出　力] なし
 * [関数値] なし
 * [機　能] エラー処理関数を登録する。
 */
void ADXT_EntryErrFunc(void (*func)(void *obj, char *msg), void *obj);

#endif
