/*

	header.h - 共通ヘッダー

*/


#ifndef HEADER_H_
#define HEADER_H_

// INCLUDE FILES

#include<stdio.h>
#include<stdlib.h>
//#include<io.h>
#include<fcntl.h>
#include<math.h>

#include "MICARYHA_struct.h"
#include "MICARY_struct.h"
#include "MICARY_GHDSS_struct.h"

#include "HA_config.h"

// DEFINE MACROS

//#define	M_PI	(3.14159265358979323846)	// π
#ifndef M_PI /* math.h */ // π : M_PIはANSI標準ではないので念のため未定義時の定義を行うコードを追加した(TAKIGAHIRA)
#define M_PI (3.141592653589793238462643383279)
#endif

#define _MINIMUM_ZERO_VALUE	(1e-7)
#define _MAX_FLOAT_VALUE	(3.4028E038)

// boolean value
#define FALSE 0
#define TRUE  1

// return code
#define OK     (0)
#define ERROR  (-1)

// max array size for static allocation.
#define ARY_NUM_WAVE                 (512)                         // 最大１フレーム長 = 512
#define ARY_NUM_FFT                  ((ARY_NUM_WAVE/2)+1)          // 最大FFT長 = 256+1
#define ARY_NUM_TF_POS               (144)                         // TF収録時の最大音源数 = 144 // old value 72
#define ARY_NUM_MIC                  _CH_VAL_                      // 最大マイクチャネル数 = _CH_VAL_ = 1 or 4 or 8
#define ARY_NUM_SRC                  (4)                          // 最大音源数 = 16 // old value 4 <- 可変にすること

#define ARY_NUM_FBANK                (13)                          // メルフィルターバンク数13 = 13
#define ARY_NUM_FBANK_POWER          (ARY_NUM_FBANK+1)             // メルフィルターバンク数14 = 13+1(power)
#define ARY_NUM_FBANK_DELTA_POWER    (ARY_NUM_FBANK_POWER*2)       // メルフィルターバンク数28 = 13+1(power)+13(delta)+1(delta-power)
#define ARY_NUM_FBANK_DELTA_P_ERASE  (ARY_NUM_FBANK_DELTA_POWER-1) // メルフィルターバンク数27 = 13         +13(delta)+1(delta-power)

#define ARY_PATH_LENGTH              (256)                         // ファイルのPathを格納する配列の文字列長

// default for common parameter
#define DEFAULT_SAMPLING_RATE        (16000)                       // サンプリングレート

// legacy definition for compatibility
#define	SAMPLING_RATE  DEFAULT_SAMPLING_RATE // サンプリングレート
#define	NUM_WAVE       ARY_NUM_WAVE          // １フレーム長
#define	NUM_FFT        ARY_NUM_FFT           // マイクチャネル数
#define	NUM_TF_POS     ARY_NUM_TF_POS        // TF収録時の音源数
#define	NUM_MIC        ARY_NUM_MIC           // マイクチャネル数
#define	NUM_SRC        ARY_NUM_SRC           // 最大音源数 <- 可変にすること
#define	fbank_count    ARY_NUM_FBANK         // メルフィルターバンク数

/**
 * \ingroup HA_definitions 
 * \brief Complex double type for MICARY
 */
typedef struct 
{
    double re; 	/// real part
    double im; 	/// imaginary part
} HA_ComplexDouble;

#endif //HEADER_H_

// EOF
