// ---------------------------------------------------------------------
/**
 Copyright (c) 2004-2006 Honda Research Institute Japan, Co., Ltd.

 ¥file ArrayInit.h
 ¥brief ¥‾English Header file for initializing arrays (Microphone Array System)
 ¥brief ¥‾Japanese 配列を含む構造体を初期化するヘッダファイル(Microphone Array System)
 ¥author Natsu Tanaka
 ¥date 20 Jul 2005
 ¥version $Id: ArrayInit.h 450 2009-03-16 10:12:38Z suzuki $
*/

// ---------------------------------------------------------------------
#ifndef	ArrayInit_h_defined
#define	ArrayInit_h_defined
// ---------------------------------------------------------------------
#include	"MICARY_struct.h"
// ---------------------------------------------------------------------

// 2007/06/11 added by N.Tanaka C++からCを呼び出す
#ifdef __cplusplus
extern "C" {
#endif

/**
 ¥brief ¥‾English It allocates float array
 ¥brief ¥‾Japanese HA_Float配列の領域を確保する
 ¥param array ¥English It's floatArray
 ¥‾Japanese HA_Float配列を含む構造体
 ¥param iArraySize ¥‾English It's the size of array
 ¥‾Japanese 確保する要素数
*/
void FloatArrayAlloc(MICARY_FloatArray * array, int iArraySize);

/**
 ¥brief ¥‾English It frees float array
 ¥brief ¥‾Japanese HA_Float配列を解放する 
 ¥param array ¥‾English FloatArray
 ¥‾Japanese HA_Float配列を含む構造体
*/
void FloatArrayFree(MICARY_FloatArray * array);

/**
 ¥brief ¥‾English It allocates int array
 ¥brief ¥‾Japanese HA_Integer配列の領域を確保する
 ¥param array ¥‾English It's intArray
 ¥‾Japanese HA_Integer配列を含む構造体
 ¥param iArraySize ¥‾English It's the size of array
 ¥‾Japanese 確保する要素数
*/
void IntArrayAlloc(MICARY_IntArray * array, int iArraySize);

/**
 ¥brief It frees int array
 ¥brief ¥‾Japanese HA_Integer配列を解放する 
 ¥param array ¥‾English IntArray
 ¥‾Japanese HA_Integer配列を含む構造体
*/
void IntArrayFree(MICARY_IntArray * array);

/**
 ¥brief ¥‾English It allocates complex array
 ¥brief ¥‾Japanese HA_Complex配列の領域を確保する
 ¥param array ¥‾English It's ComplexArray
 ¥‾Japanese HA_Complex配列を含む構造体
 ¥param iArraySize ¥‾English It's the size of array
 ¥‾Japanese 確保する要素数
*/
void ComplexArrayAlloc(MICARY_ComplexArray * array, int iArraySize);

/**
 ¥brief ¥‾English It frees complex array
 ¥brief ¥‾Japanese HA_Complex配列を解放する 
 ¥param array ¥‾English It's ComplexArray
 ¥‾Japanese HA_Complex配列を含む構造体
*/
void ComplexArrayFree(MICARY_ComplexArray * array);

/**
 ¥brief ¥‾English It allocates location array
 ¥brief ¥‾Japanese MICARY_Location配列を確保する
 ¥param array ¥‾English It's LocationArray
 ¥‾Japanese MICARY_Location配列を含む構造体
 ¥param iArraySize It's the size of array
 ¥‾Japanese 確保する要素数
*/
void LocationArrayAlloc(MICARY_LocationArray * array, int iArraySize);

/**
 ¥brief It frees location array
 ¥brief ¥‾Japanese MICARY_Location配列を解放する
 ¥param array It's LocationArray
 ¥‾Japanese MICARY_Location配列を含む構造体
*/
void LocationArrayFree(MICARY_LocationArray * array);

/**
 ¥brief ¥‾English It allocates database of beamforming
 ¥brief ¥‾Japanese BF係数を格納する配列を確保する
 ¥param BFD ¥‾English It's Database of beamforming
 ¥‾Japanese BF係数を格納する配列を含む構造体¥n
 [音源位置[マイクロホン位置数[周波数ライン数]]の順に格納する¥n
 例(音源位置数s, マイク位置数m, 周波数ライン数fの場合):¥n
 BF(S1M1F1), BF(S1M1F2), ..., BF(S1M1Ff), BF(S1M2F1), ..., BF(S1MmFf), BF(S2M1F1), ..., BF(SsMmFf)
 ¥param iFreqSize ¥‾English It's the number of frequency Line
 ¥‾Japanese BF係数の周波数ライン数
 ¥param iLocSize ¥‾English It's the number of location
 ¥‾Japanese BF係数の音源位置数
 ¥param iMicSize ¥‾English It's the number of microphone
 ¥‾Japanese BF係数のマイクロホン位置数
*/
void BFDatabaseAlloc(MICARY_BFDatabase * BFD, int iFreqSize, int iLocSize, int iMicSize);

/**
 ¥brief ¥‾English It frees database of beamforming
 ¥brief ¥‾Japanese BF係数を格納する配列を開放する
 ¥param BFD ¥English It's Database of beamforming
 ¥‾Japanese BF係数を格納する配列を含む構造体¥n
*/
void BFDatabaseFree(MICARY_BFDatabase * BFD);

/**
 ¥brief ¥‾English It allocates database of transfer function
 ¥brief ¥‾Japanese 伝達関数を格納する配列を確保する
 ¥param TFD ¥‾English It's Database of transfer function
 ¥‾Japanese 伝達関数を格納する配列を含む構造体
 ¥param iFreqSize ¥‾English It's the number of frequency Line
 ¥‾Japanese 伝達関数の周波数ライン数
 ¥param iLocSize ¥‾English It's the number of location
 ¥‾Japanese 伝達関数の音源位置数
 ¥param iMicSize ¥‾English It's the number of microphone
 ¥‾Japanese 伝達関数のマイクロホン位置数
*/
void TFDatabaseAlloc(MICARY_TFDatabase * TFD, int iFreqSize, int iLocSize, int iMicSize);

/**
 ¥brief ¥‾English It frees database of transfer function
 ¥brief ¥‾Japanese 伝達関数を格納する配列を開放する
 ¥param TFD ¥‾English It's Database of transfer function
 ¥‾Japanese 伝達関数を格納する配列を含む構造体
*/
void TFDatabaseFree(MICARY_TFDatabase * TFD);

/**
 ¥brief ¥‾English It allocates int array(dim:2)
 ¥brief ¥‾Japanese int型の二次元配列を確保する
 ¥param array ¥‾English It's the array of integer. (iArraySize1 * iArraySize2)
 ¥‾Japanese int型の二次元配列のポインタ
 ¥param iArraySize1 ¥‾English It's the size of array (dim:1)
 ¥‾Japanese 次元1の配列の個数
 ¥param iArraySize2 ¥‾English It's the size of array (dim:2)
 ¥‾Japanese 次元2の配列の個数
*/
void IntArray2Alloc(MICARY_IntArray2 * array, int iArraySize1, int iArraySize2);

/**
 ¥brief ¥‾English It frees int array(dim:2)
 ¥brief ¥‾Japanese int型の二次元配列を開放する
 ¥param array ¥‾English It's the array of integer. (iArraySize1 * iArraySize2)
 ¥‾Japanese int型の二次元配列のポインタ
*/
void IntArray2Free(MICARY_IntArray2 * array);

// 2006/10/12 added by N.Tanaka
/**
 ¥brief ¥‾English It allocates complex spectrum array
 ¥brief ¥‾Japanese スペクトルデータ用のHA_Complex配列の領域を確保する
 ¥param pcsSpec ¥‾English It's complex spectrum array
 ¥‾Japanese HA_Complexのスペクトル用構造体
 ¥param numCh ¥‾English It's the number of channel.
 ¥‾Japanese チャンネル数
 ¥param iLowerIndex ¥‾English It's the lower frequency index.
 ¥‾Japanese 下限周波数インデックス
 ¥param iUpperIndex ¥‾English It's the upper frequency index.
 ¥‾Japanese 上限周波数インデックス
*/
void AllocComplexSpecArray(MICARY_ComplexSpecArray *pcsSpec,
						  HA_Num numCh,
						  HA_Integer iLowerIndex,
						  HA_Integer iUpperIndex);

// 2006/10/12 added by N.Tanaka
/**
 ¥brief ¥‾English It frees complex spectrum array
 ¥brief ¥‾Japanese スペクトルデータ用のHA_Complex配列の領域を開放する
 ¥param pcsSpec ¥‾English It's complex spectrum array
 ¥‾Japanese HA_Complexのスペクトル用構造体
*/
void FreeComplexSpecArray(MICARY_ComplexSpecArray *pcsSpec);

// 2006/10/12 added by N.Tanaka
/**
 ¥brief ¥‾English It allocates float spectrum array
 ¥brief ¥‾Japanese スペクトルデータ用のHA_Float配列の領域を確保する
 ¥param pfsSpec ¥‾English It's float spectrum array
 ¥‾Japanese HA_Floatのスペクトル用構造体
 ¥param numCh ¥‾English It's the number of channel.
 ¥‾Japanese チャンネル数
 ¥param iLowerIndex ¥‾English It's the lower frequency index.
 ¥‾Japanese 下限周波数インデックス
 ¥param iUpperIndex ¥‾English It's the upper frequency index.
 ¥‾Japanese 上限周波数インデックス
*/
void AllocFloatSpecArray(MICARY_FloatSpecArray *pfsSpec,
						  HA_Num numCh,
						  HA_Integer iLowerIndex,
						  HA_Integer iUpperIndex);


// 2006/10/12 added by N.Tanaka
/**
 ¥brief ¥‾English It frees float spectrum array
 ¥brief ¥‾Japanese スペクトルデータ用のHA_Float配列の領域を開放する
 ¥param pfsSpec ¥‾English It's float spectrum array
 ¥‾Japanese HA_Floatのスペクトル用構造体
*/
void FreeFloatSpecArray(MICARY_FloatSpecArray *pfsSpec);


// 2007/08/22 added by N.Tanaka
/**
 ¥brief ¥‾English It allocates char array(string)
 ¥brief ¥‾Japanese char配列(string)の領域を確保する
 ¥param array ¥English It's CharArray(string)
 ¥‾Japanese char配列(string)を含む構造体
 ¥param iArraySize ¥‾English It's the size of array
 ¥‾Japanese 確保する要素数
*/
void StringAlloc(HA_String * array, int iArraySize);

// 2007/08/22 added by N.Tanaka
/**
 ¥brief ¥‾English It frees char array(string)
 ¥brief ¥‾Japanese char配列(string)を解放する 
 ¥param array ¥‾English CharArray(string)
 ¥‾Japanese char配列(string)を含む構造体
*/
void StringFree(HA_String * array);


#ifdef __cplusplus
}
#endif
// ---------------------------------------------------------------------
#endif	// ArrayInit_h_defined
