libharkio3
A File I/O and Data Manipulation Library for HARK
libharkio3.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 - 2020 Honda Research Institute Japan Co., Ltd.
3  * All rights reserved.
4  * HARK was developed by researchers in Okuno Laboratory
5  * at the Kyoto University and Honda Research Institute Japan Co.,Ltd.
6  *
7  * Licensed under the HARK license, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * https://www.hark.jp/notice/HARK_License_Agreement.pdf
12  */
13 
36 #ifndef __LIBHARKIO3__
37 #define __LIBHARKIO3__
38 
39 
40 #include <stdio.h>
41 #include <zip.h>
42 #include <complex.h>
43 #undef I
44 #undef complex
45 
49 #define HARK_EPS 0.00001
50 
54 #define HARKIO_VER "1.3"
55 
59 #define HARKIO_TAG "HARK1.3"
60 
61 
65 enum Coordinate {
68 };
69 
76 };
77 
87 };
88 
92 enum harkio_TFType { loctf , septf };
93 
97 // enum Calculate { Calc_Add , Calc_Sub , Calc_Multi , Calc_Div };
98 
102 enum harkio_DataType { harkio_DataType_INT32 , harkio_DataType_FLOAT32 , harkio_DataType_COMPLEX };
103 enum UseTagType { NON_TAG , USE_TAG , ID_TAG };
104 
108 enum InternalAllocFlag { NO_INTERNAL_ALLOC, INTERNAL_ALLOC };
109 
110 
111 //#ifdef __unix__
112 // #define COMPLEX_TYPE float _Complex
113 typedef float _Complex COMPLEX_TYPE;
114 //#else
115 // #define COMPLEX_TYPE complex<float>
116 //#endif
117 
118 
122 typedef struct {
123  int (*imap)(int);
124  float(*fmap)(float);
125  COMPLEX_TYPE(*cmap)(COMPLEX_TYPE);
127 
128 typedef int (*harkio_Matrix_calcfuncInt32)(int, int);
129 typedef float(*harkio_Matrix_calcfuncFloat32)(float, float);
130 typedef COMPLEX_TYPE(*harkio_Matrix_calcfuncComplex)(COMPLEX_TYPE, COMPLEX_TYPE);
131 
135 #define HARK_DIM 2 //dimention
136 
141 #define HARKIO_LOGLEVEL_ENV_NAME "HARKIO_LOG_LEVEL"
142 
146 #define harkio_Log_setLevel(PrintLevel) harkio_Log_printf_( (enum harkio_Log_logLevel)-1, "", PrintLevel, __func__, __LINE__)
147 
151 #define harkio_Log_printf(LogLevel, message, ...) harkio_Log_printf_(LogLevel, message, 0, __func__, __LINE__, ##__VA_ARGS__)
152 
156 #define MSG_LEN 4192
157 
158 
162 // 引数付きdeprecated()は環境によって非対応のため修正(r7833). Windowsでの動作未確認.
163 #ifdef _MSC_VER
164 #define DEPRECATED(X) __declspec(deprecated(X))
165 #else
166 #define DEPRECATED(X) __attribute__((deprecated))
167 #endif
168 
172 typedef union {
173  int *intdata;
174  float *floatdata;
175  COMPLEX_TYPE *complexdata;
176 } multipleType;
177 
181 typedef struct {
182  char tag[32];
183  char type[32];
184  int dim;
185  int rows;
186  int cols;
188 } harkio_Matrix;
189 
193 typedef struct {
194  int id;
195  enum Coordinate sys;
196  float *coord;
197  char *path;
201  int *channels;
203 
207 typedef struct {
208  int size;
209  int frame;
210  char *type;
212  enum InternalAllocFlag allocflag;
214 
218 typedef struct {
219  char *comment;
221  char *TSPpath;
222  int TSPoffset;
223  int TSPLength;
226  int nfft;
228  int signalMax;
229 } harkio_Config;
230 
251 typedef struct {
252  int size;
253  int *ids;
255  int **neighbors;
257  enum NeighborAlgorithm alg;
259 
263 typedef struct {
267 } harkio_XML;
268 
272 typedef struct {
273  struct zip *handle;
283 
284 
285 
286 #if defined(__cplusplus)
287 extern "C" {
288 #endif
289 
290 /******
291  API declaration
292  ******/
293 // Matrix
294 harkio_Matrix* harkio_Matrix_new(char *type, int rows, int cols);
295 harkio_Matrix* harkio_Matrix_eye(char *type, int size);
296 harkio_Matrix* harkio_Matrix_zeros(char *type, int rows, int cols);
298 harkio_Matrix* harkio_Matrix_ones(char *type, int rows, int cols);
300 harkio_Matrix* harkio_Matrix_fromZip(struct zip *handle, char *path);
302 
306 int harkio_Matrix_write(harkio_Matrix *m, char *path);
307 char* harkio_Matrix_writeBuffer(harkio_Matrix *m, size_t *size);
308 size_t harkio_Matrix_size(harkio_Matrix *m, int *size);
309 
310 int harkio_Matrix_replaceC(harkio_Matrix *m, char *path, int rowidx);
311 
316 harkio_Matrix* harkio_Matrix_sumRow(harkio_Matrix *matrix);
317 harkio_Matrix* harkio_Matrix_sumCol(harkio_Matrix *matrix);
318 harkio_Matrix* harkio_Matrix_sumAll(harkio_Matrix *matrix);
319 
320 harkio_Matrix* harkio_Matrix_sum(harkio_Matrix **matrix , int num);
321 
325 harkio_Matrix* harkio_Matrix_esquare(harkio_Matrix *m);
326 harkio_Matrix* harkio_Matrix_eabs(harkio_Matrix *m);
327 harkio_Matrix* harkio_Matrix_econj(harkio_Matrix *m);
328 harkio_Matrix* harkio_Matrix_etanh(harkio_Matrix *m);
329 harkio_Matrix* harkio_Matrix_ecosh(harkio_Matrix *m);
330 harkio_Matrix* harkio_Matrix_elog(harkio_Matrix *m);
331 harkio_Matrix* harkio_Matrix_elog10(harkio_Matrix *m);
332 harkio_Matrix* harkio_Matrix_ereal(harkio_Matrix *m);
333 harkio_Matrix* harkio_Matrix_eimag(harkio_Matrix *m);
334 harkio_Matrix* harkio_Matrix_emulCInt32(harkio_Matrix *m, int value);
335 harkio_Matrix* harkio_Matrix_emulCFloat32(harkio_Matrix *m, float value);
336 harkio_Matrix* harkio_Matrix_emulCComplex(harkio_Matrix *m, COMPLEX_TYPE value);
337 harkio_Matrix* harkio_Matrix_edivCInt32(harkio_Matrix *m, int value);
338 harkio_Matrix* harkio_Matrix_edivCFloat32(harkio_Matrix *m, float value);
339 harkio_Matrix* harkio_Matrix_edivCComplex(harkio_Matrix *m, COMPLEX_TYPE value);
340 harkio_Matrix* harkio_Matrix_epowerCInt32(harkio_Matrix *m, int value);
344 harkio_Matrix* harkio_Matrix_ecalcCInt32(harkio_Matrix *m, int value, harkio_Matrix_calcfuncInt32 func);
345 harkio_Matrix* harkio_Matrix_ecalcCFloat32(harkio_Matrix *m, float value, harkio_Matrix_calcfuncFloat32 func);
346 harkio_Matrix* harkio_Matrix_ecalcCComplex(harkio_Matrix *m, COMPLEX_TYPE value, harkio_Matrix_calcfuncComplex func);
347 harkio_Matrix* harkio_Matrix_reshape(harkio_Matrix *m, int rows, int cols);
350 
351 int harkio_Matrix_setValueInt32(harkio_Matrix *m, int row, int col, int value);
352 int harkio_Matrix_getValueInt32(harkio_Matrix *m, int row, int col, int *value);
353 int harkio_Matrix_setValueFloat32(harkio_Matrix *m, int row, int col, float value);
354 int harkio_Matrix_getValueFloat32(harkio_Matrix *m, int row, int col, float *value);
355 int harkio_Matrix_setValueComplex(harkio_Matrix *m, int row, int col, COMPLEX_TYPE value);
356 int harkio_Matrix_getValueComplex(harkio_Matrix *m, int row, int col, COMPLEX_TYPE *value);
357 harkio_Matrix* harkio_Matrix_getValues(harkio_Matrix *matrix,int rowFrom ,int rowTo,int colFrom,int colTo);
358 int harkio_Matrix_setValues(harkio_Matrix *m1 , harkio_Matrix *m2 , int row , int col);
361 // int harkio_Complex_calc(COMPLEX_TYPE *value , COMPLEX_TYPE valuea , COMPLEX_TYPE valueb , enum Calculate calc);
362 int harkio_CheckType(char *type);
363 
364 
365 // Config
367 harkio_Config* harkio_Config_copy(harkio_Config *cfg);
369 
372 int harkio_Config_getTSPoffset(harkio_Config *cfg);
373 int harkio_Config_getPeakSearchFrom(harkio_Config *cfg);
374 int harkio_Config_getPeakSearchTo(harkio_Config *cfg);
375 int harkio_Config_getNfft(harkio_Config *cfg);
376 int harkio_Config_getSamplingRate(harkio_Config *cfg);
377 int harkio_Config_getTSPLength(harkio_Config *cfg);
378 int harkio_Config_getSignalMax(harkio_Config *cfg);
379 
381 
382 int harkio_Config_setSynchronousAverage(harkio_Config *cfg, int value);
383 int harkio_Config_setTSPpath(harkio_Config *cfg, const char *value);
384 int harkio_Config_setTSPoffset(harkio_Config *cfg, int value);
385 int harkio_Config_setPeakSearchFrom(harkio_Config *cfg, int value);
386 int harkio_Config_setPeakSearchTo(harkio_Config *cfg, int value);
387 int harkio_Config_setNfft(harkio_Config *cfg, int value);
388 int harkio_Config_setComment(harkio_Config *cfg, const char *value);
389 int harkio_Config_setSamplingRate(harkio_Config *cfg, int value);
390 int harkio_Config_setTSPlength(harkio_Config *cfg, int value);
391 int harkio_Config_setSignalMax(harkio_Config *cfg, int value);
392 
393 int harkio_Config_isEqual(harkio_Config *a, harkio_Config *b);
394 int harkio_Config_isEqual(harkio_Config *a, harkio_Config *b);
395 void harkio_Config_print(harkio_Config *cfg);
396 char* harkio_Config_printBuffer(harkio_Config *cfg);
397 
398 // Position
399 harkio_Position* harkio_Position_new(int id, enum Coordinate sys, float *coord, char *path);
402 char* harkio_Position_printBuffer(harkio_Position* pos);
403 
405 int harkio_Position_setPosition(harkio_Position* pos, enum Coordinate sys, float *coord);
409 int harkio_Position_Convert(harkio_Position *pos, float *coord, enum Coordinate type);
410 float harkio_Position_convToRadian(float degree);
411 float harkio_Position_convToDegree(float radian);
414 int harkio_Position_setChannels(harkio_Position* pos , const int *channels, const int numChannels);
415 int harkio_Position_setNumChannels(harkio_Position* pos , int numChannels);
416 int harkio_Position_setChannelsUse(harkio_Position* pos , int channels_use);
417 
418 
419 // Positions
420 harkio_Positions* harkio_Positions_new(char *type, int frame, int size, harkio_Position **pos);
421 harkio_Positions* harkio_Positions_newFromXMLbuffer(char *buffer, int len, char *dtdpath);
428 int harkio_Positions_removeByCoord(harkio_Positions *poses, enum Coordinate sys, float *coord, float tolerance);
430 harkio_Position* harkio_Positions_getByCoord(harkio_Positions *poses, enum Coordinate sys, float *coord, float tolerance);
434 
435 
436 
437 // Neighbors
441 
443 int harkio_Neighbors_getNeighbors(harkio_Neighbors *nbrs, int id, int *numNeighbors, int **neighbors);
444 int harkio_Neighbors_append(harkio_Neighbors *nbrs, int id, int numNeighbors, int *neighbors);
447 
448 int harkio_Neighbors_Algorithms_NearestNeighbor(harkio_Neighbors *nbrs, int n, float thresh);
450 
452 
453 // utils
454 float euclidDistance(harkio_Position *pos_a , harkio_Position *pos_b , int length);
455 
456 
457 // XML
459 harkio_XML* harkio_XML_newFromXML(char *xmlpath, char *dtdpath);
460 harkio_XML* harkio_XML_newFromXMLbuffer(char *buffer, int strlen, char *dtdpath);
462 void harkio_XML_delete(harkio_XML **xml);
463 
464 harkio_Config* harkio_XML_getConfig(harkio_XML *xml);
465 
466 int harkio_XML_write(harkio_XML *xml, FILE *outstream);
467 int harkio_XML_writeHead(FILE *outstream);
468 int harkio_XML_writePositions(harkio_Positions *poses, FILE *outstream);
469 int harkio_XML_writeTail(FILE *outstream);
470 
471 harkio_Neighbors *harkio_XML_getNeighbors(harkio_XML *xml);
472 harkio_Positions *harkio_XML_getPositions(harkio_XML *xml);
474 
475 
476 // TF
478 harkio_TransferFunction* harkio_TransferFunction_fromFile(char *path, char *signature);
482 
483 int harkio_TransferFunction_write(harkio_TransferFunction *tf, char *path, char *signature);
484 int harkio_TransferFunction_write_toDirectory(harkio_TransferFunction *tf, char *path, char *signature);
485 //int harkio_TransferFunction_readTFs(harkio_TransferFunction *tf);
486 
491 
496 
503 
506 DEPRECATED("use 'harkio_Compat_TransferFunction_readlibharkio2'") int libharkio3_TransferFunction_readlibhakio2(harkio_TransferFunction **tf, char *loctfpath , char *septfpath);
507 DEPRECATED("use 'harkio_Compat_SeparationMatrix_readlibharkio2'") int libharkio3_SeparationMatrix_readlibhakio2(harkio_TransferFunction **tf, char *sepmatpath , char *tfzippath);
508 
509 
510 
511 
512 // Log
513 void harkio_Log_printf_(enum harkio_Log_logLevel LogLevel, char *message , int PrintLevel, const char *func, int line, ...);
514 void harkio_Log_FileOpenFailed(char *filename);
515 void harkio_Log_WrongValue(char *valuename, char *reason);
516 void harkio_Log_NullPointer(char *valuename);
517 //void harkio_Log_FuncStart(char *funcname);
518 
519 
520 #if defined(__cplusplus)
521 }
522 #endif
523 
524 #endif
harkio_DataType
harkio_Matrix の型を表す
Definition: libharkio3.h:102
harkio_Matrix * harkio_Matrix_fromFile(char *path)
harkio_Matrix_write で書き込んだファイルを読み込む。
Definition: libharkio3_matrix.c:363
harkio_Position * harkio_Position_copy(harkio_Position *p)
 harkio_Position をコピーする
Definition: libharkio3_position.c:532
int harkio_Positions_isEqual(harkio_Positions *a, harkio_Positions *b)
 2つの harkio_Positions が等しいか否かを判定する
Definition: libharkio3_positions.c:728
harkio_Neighbors * harkio_Neighbors_copy(harkio_Neighbors *poses)
harkio_Neighbors の内容を コピーする
Definition: libharkio3_neighbors.c:643
Definition: libharkio3.h:85
int harkio_Neighbors_append(harkio_Neighbors *nbrs, int id, int numNeighbors, int *neighbors)
新しい隣接関係を追加する。与えられた ID に隣接関係がすでに定義されていれば追加し、定義が無ければ新し...
Definition: libharkio3_neighbors.c:299
harkio_Position ** pos
Definition: libharkio3.h:211
int harkio_Matrix_setValueFloat32(harkio_Matrix *m, int row, int col, float value)
float32 型の harkio_Matrix の値を設定する
Definition: libharkio3_matrix.c:1275
harkio_Log_logLevel
harkio_Log で、メッセージのログがどのレベルかを表す。
Definition: libharkio3.h:81
char * harkio_Positions_getType(harkio_Positions *poses)
Getter。harkio_Positions のタイプを返す。
Definition: libharkio3_positions.c:393
harkio_Positions * poses
Definition: libharkio3.h:274
int harkio_Position_getSys(harkio_Position *pos)
Getter。harkio_Position の 座標系を返す。
Definition: libharkio3_position.c:170
int harkio_Matrix_isEqual(harkio_Matrix *a, harkio_Matrix *b)
2つの harkio_Matrix オブジェクトが等しいかどうかを判定する
Definition: libharkio3_matrix.c:1689
InternalAllocFlag
保持メモリの割当て状態を管理するフラグ(内部用)
Definition: libharkio3.h:108
harkio_Matrix * harkio_Matrix_zeros(char *type, int rows, int cols)
要素が全てゼロの行列を生成するコンストラクタ
Definition: libharkio3_matrix.c:120
int * numNeighbors
Definition: libharkio3.h:254
int harkio_TransferFunction_write_toDirectory(harkio_TransferFunction *tf, char *path, char *signature)
harkio_TransferFunction 構造体の情報をファイルに書き込む
Definition: libharkio3_transferfunction.c:1138
harkio_Positions の隣接関係を表す構造体。自分を含む。s
Definition: libharkio3.h:251
harkio_Matrix * harkio_Matrix_getDiag(harkio_Matrix *m)
対角成分を取り出す
Definition: libharkio3_matrix.c:2228
int harkio_Matrix_getValueInt32(harkio_Matrix *m, int row, int col, int *value)
int32 型の harkio_Matrix の値を取り出す
Definition: libharkio3_matrix.c:1164
int internal_locsize
Definition: libharkio3.h:280
int harkio_Matrix_replaceC(harkio_Matrix *m, char *path, int rowidx)
harkio_Matrix_write で書き込んだファイルを読み込み、行を書き換える
Definition: libharkio3_matrix.c:1984
int harkio_Matrix_setValueComplex(harkio_Matrix *m, int row, int col, COMPLEX_TYPE value)
complex 型の harkio_Matrix の値を設定する
Definition: libharkio3_matrix.c:1313
float * harkio_Position_getPosition(harkio_Position *pos)
Getter。harkio_Position の座標を返す。
Definition: libharkio3_position.c:132
harkio_Matrix * harkio_Matrix_reshape(harkio_Matrix *m, int rows, int cols)
行列の並び順を変更する
Definition: libharkio3_matrix.c:2838
int harkio_XML_write(harkio_XML *xml, FILE *outstream)
harkio_XML をファイルに保存する。
Definition: libharkio3_xml.c:244
int harkio_Position_setPosition(harkio_Position *pos, enum Coordinate sys, float *coord)
Setter。harkio_Position の 座標を更新する。
Definition: libharkio3_position.c:191
harkio_Positions * harkio_TransferFunction_getMicrophones(harkio_TransferFunction *tf)
Getter。harkio_TransferFunction の マイク位置を表す harkio_Positions を返す
Definition: libharkio3_transferfunction.c:666
int harkio_CheckType(char *type)
[内部用] harkio_Matrix の型判定
Definition: libharkio3_matrix.c:2134
harkio_XML * harkio_XML_newFromXMLbuffer(char *buffer, int strlen, char *dtdpath)
コンストラクタ。XMLが格納された文字列へのポインタから、harkio_XML オブジェクトを生成する ...
Definition: libharkio3_xml.c:136
int libharkio3_TransferFunction_readlibhakio2(harkio_TransferFunction **arg_tf, char *loctfpath, char *septfpath)
harkio2フォーマットの伝達関数ファイルを読み込み、構造体を構成する。(deprecated)
Definition: libharkio3_conversion.c:189
Definition: libharkio3.h:82
位置を表す構造体。
Definition: libharkio3.h:193
Definition: libharkio3.h:86
harkio_Matrix * harkio_Matrix_ones(char *type, int rows, int cols)
要素が全て1の行列を生成するコンストラクタ
Definition: libharkio3_matrix.c:181
int harkio_TransferFunction_appendLocTF(harkio_TransferFunction *tf, harkio_Matrix *tfs)
harkio_TransferFunction の定位伝達関数を表す harkio_Matrix 配列に要素を追加する。 ...
Definition: libharkio3_transferfunction.c:908
int samplingRate
Definition: libharkio3.h:227
harkio_Config * cfg
Definition: libharkio3.h:266
int synchronousAverage
Definition: libharkio3.h:220
int rows
Definition: libharkio3.h:185
Definition: libharkio3.h:84
伝達関数ファイルの XML (位置、隣接関係、設定) の読み書きのための構造体
Definition: libharkio3.h:263
harkio_Position * harkio_Positions_getByCoord(harkio_Positions *poses, enum Coordinate sys, float *coord, float tolerance)
Getter。harkio_Positions が持つ harkio_Position のから、与えられた位置に近いものを返す。 ...
Definition: libharkio3_positions.c:339
harkio_Neighbors * nbrs
Definition: libharkio3.h:277
int harkio_Config_getSynchronousAverage(harkio_Config *cfg)
Getter。harkio_Config の同期加算回数を返す
Definition: libharkio3_config.c:89
int harkio_Positions_removeById(harkio_Positions *poses, int id)
 harkio_Positions から、与えられた ID の harkio_Position を削除する
Definition: libharkio3_positions.c:533
int channelsUse
Definition: libharkio3.h:199
harkio_TransferFunction * harkio_TransferFunction_new(void)
コンストラクタ。空の伝達関数構造体 harkio_TransferFunctionを作成する。
Definition: libharkio3_transferfunction.c:49
char * comment
Definition: libharkio3.h:219
enum NeighborAlgorithm harkio_Neighbors_getNeighborAlgorithm(harkio_Neighbors *nbs)
Getter. harkio_Neighbors の近接関係計算アルゴリズムを返す。
Definition: libharkio3_neighbors.c:225
harkio_Position * harkio_Positions_getById(harkio_Positions *poses, int id)
Getter。harkio_Positions が持つ harkio_Position のから、与えられた id と同じものを返す。 ...
Definition: libharkio3_positions.c:306
harkio_Positions * mics
Definition: libharkio3.h:275
char * harkio_Config_getComment(harkio_Config *cfg)
Getter。harkio_Config のコメントを返す
Definition: libharkio3_config.c:75
harkio_Neighbors * nbrs
Definition: libharkio3.h:265
int peakSearchFrom
Definition: libharkio3.h:224
int harkio_Neighbors_Algorithms_NearestNeighbor(harkio_Neighbors *nbrs, int n, float thresh)
近接関係計算アルゴリズムの実装。近傍をクラスタリングする方法。
Definition: libharkio3_neighbors.c:411
NeighborAlgorithm
harkio_Neighbors で、Position (伝達関数測定位置など) が隣接しているか否かを判定するアルゴリズムを表す...
Definition: libharkio3.h:73
harkio_Matrix * harkio_TransferFunction_getTFById(harkio_TransferFunction *tf, int id, enum harkio_TFType tf_type)
harkio_TransferFunction 構造体に含まれる伝達関数群から特定の伝達関数を取り出す
Definition: libharkio3_transferfunction.c:1328
int harkio_Neighbors_calcNeighbors(harkio_Neighbors *nbrs, enum NeighborAlgorithm alg,...)
harkio_Neighbors に登録されている位置の近接関係を計算する。
Definition: libharkio3_neighbors.c:253
struct zip * handle
Definition: libharkio3.h:273
int peakSearchTo
Definition: libharkio3.h:225
harkio_Neighbors * harkio_Neighbors_new(harkio_Positions *poses)
コンストラクタ。近接関係を表すオブジェクトを生成する。
Definition: libharkio3_neighbors.c:41
void harkio_Neighbors_print(harkio_Neighbors *nbrs)
harkio_Neighbors の内容を stderr に表示する。
Definition: libharkio3_neighbors.c:550
harkio_TransferFunction * harkio_Compat_TransferFunction_readlibharkio2(char *loctfpath, char *septfpath)
コンストラクタ。harkio2フォーマットの伝達関数ファイルを読み込み、構造体を構成する。 ...
Definition: libharkio3_conversion.c:157
harkio_Matrix * harkio_Matrix_sum(harkio_Matrix **matrix, int num)
複数 harkio_Matrix の要素ごとの総和を求める
Definition: libharkio3_matrix.c:1076
COMPLEX_TYPE * complexdata
Definition: libharkio3.h:175
int TSPLength
Definition: libharkio3.h:223
harkio_Matrix ** loctfs
Definition: libharkio3.h:278
harkio_Matrix * harkio_Matrix_getValues(harkio_Matrix *matrix, int rowFrom, int rowTo, int colFrom, int colTo)
harkio_Matrix の部分行列を取り出す
Definition: libharkio3_matrix.c:1390
int frame
Definition: libharkio3.h:209
harkio_TransferFunction * harkio_TransferFunction_fromDirectory(char *path, char *signature)
コンストラクタ。与えられたディレクトリに存在するファイルをロードし、構造体を構成する。 ...
Definition: libharkio3_transferfunction.c:347
void harkio_Positions_print(harkio_Positions *pos)
 harkio_Positions をテキストで表示する
Definition: libharkio3_positions.c:664
harkio_Config * harkio_Config_new(void)
コンストラクタ。空の harkio_Config を作成する。
Definition: libharkio3_config.c:34
harkio_Matrix * harkio_TransferFunction_getTFByPos(harkio_TransferFunction *tf, harkio_Position *pos, float tolerance, enum harkio_TFType tf_type)
harkio_TransferFunction 構造体に含まれる伝達関数群から特定の伝達関数を取り出す
Definition: libharkio3_transferfunction.c:1274
harkio_XML * harkio_XML_new(void)
コンストラクタ。新たな harkio_XML オブジェクトを生成する。
Definition: libharkio3_xml.c:57
伝達関数そのものを表す構造体
Definition: libharkio3.h:272
int harkio_TransferFunction_setLocTFs(harkio_TransferFunction *tf, harkio_Matrix **tfs)
Setter。harkio_TransferFunction の音源位置ごとの定位伝達関数を表す harkio_Matrix 配列へのポインタを設...
Definition: libharkio3_transferfunction.c:838
harkio_Positions * harkio_Positions_copy(harkio_Positions *pos)
 harkio_Positions をコピーする
Definition: libharkio3_positions.c:630
int TSPoffset
Definition: libharkio3.h:222
harkio_Matrix * harkio_Matrix_eye(char *type, int size)
単位行列生成するコンストラクタ
Definition: libharkio3_matrix.c:306
harkio_Positions * poses
Definition: libharkio3.h:264
harkio_XML * harkio_XML_newFromData(harkio_Positions *ps, harkio_Neighbors *nbrs, harkio_Config *cfg)
コンストラクタ。harkio_XML のメンバへのポインタを受け取って、新たな harkio_XML オブジェクトを生成する...
Definition: libharkio3_xml.c:117
int harkio_Positions_removeByCoord(harkio_Positions *poses, enum Coordinate sys, float *coord, float tolerance)
 harkio_Positions から、与えられた座標の harkio_Position を削除する
Definition: libharkio3_positions.c:593
harkio_Neighbors * harkio_TransferFunction_getNeighbors(harkio_TransferFunction *tf)
Getter。harkio_TransferFunction の harkio_Neighbor を返す
Definition: libharkio3_transferfunction.c:644
harkio_TransferFunction * harkio_Compat_SeparationMatrix_readlibharkio2(char *sepmatpath, char *tfzippath)
コンストラクタ。harkio2フォーマットの分離行列ファイルを読み込み、構造体を構成する。 ...
Definition: libharkio3_conversion.c:172
位置の集合を表す構造体。
Definition: libharkio3.h:207
harkio_Matrix内部用。
Definition: libharkio3.h:172
harkio_Matrix ** septfs
Definition: libharkio3.h:279
int harkio_Positions_getFrame(harkio_Positions *poses)
Getter。harkio_Positions のフレーム番号を返す。
Definition: libharkio3_positions.c:437
harkio_XML * harkio_XML_newFromXML(char *xmlpath, char *dtdpath)
コンストラクタ。ファイルを読み込んで、新たな harkio_XML オブジェクトを生成する。
Definition: libharkio3_xml.c:75
Definition: libharkio3.h:67
伝達関数などの、行列を表す構造体。
Definition: libharkio3.h:181
harkio_Matrix * harkio_Matrix_copy(harkio_Matrix *m)
harkio_Matrix をコピーする。
Definition: libharkio3_matrix.c:623
harkio_Matrix * harkio_Matrix_makeDiag(harkio_Matrix *m)
列ベクトルを対角成分にもつ正方行列を返す
Definition: libharkio3_matrix.c:2273
harkio_Positions * harkio_Positions_new(char *type, int frame, int size, harkio_Position **pos)
コンストラクタ。空の位置セットのオブジェクト harkio_Positions を作成する。
Definition: libharkio3_positions.c:51
size_t harkio_Matrix_size(harkio_Matrix *m, int *size)
harkio_Matrix のサイズを取得する
Definition: libharkio3_matrix.c:1790
Definition: libharkio3.h:75
float harkio_Position_convToDegree(float radian)
 内部用関数。 ラジアン(radian)から角度(degree)に変換
Definition: libharkio3_position.c:615
char * TSPpath
Definition: libharkio3.h:221
int harkio_Position_getID(harkio_Position *pos)
Getter。harkio_Position の ID を返す。
Definition: libharkio3_position.c:151
int id
Definition: libharkio3.h:194
float * coord
Definition: libharkio3.h:196
Coordinate
harkio_Positions で座標軸を表す。
Definition: libharkio3.h:65
int harkio_Neighbors_getSize(harkio_Neighbors *nbs)
Getter. harkio_Neighbors に登録されている harkio_Positions の長さ
Definition: libharkio3_neighbors.c:204
void harkio_Matrix_print(harkio_Matrix *m)
harkio_Matrix を表示する
Definition: libharkio3_matrix.c:1576
void harkio_Matrix_delete(harkio_Matrix **m)
デストラクタ。
Definition: libharkio3_matrix.c:574
int nfft
Definition: libharkio3.h:226
int harkio_TransferFunction_setMicrophones(harkio_TransferFunction *tf, harkio_Positions *value)
Setter。harkio_TransferFunction のマイク位置に対応する harkio_Positions を設定する ...
Definition: libharkio3_transferfunction.c:774
int harkio_XML_writeHead(FILE *outstream)
harkio_Positions をXMLファイルに保存する。
Definition: libharkio3_xml.c:281
int ** neighbors
Definition: libharkio3.h:255
Definition: libharkio3.h:74
void harkio_XML_delete(harkio_XML **xml)
デストラクタ。harkio_XML のメモリを解放する。
Definition: libharkio3_xml.c:179
int internal_sepsize
Definition: libharkio3.h:281
harkio_Matrix * harkio_Matrix_ecalcCInt32(harkio_Matrix *m, int value, harkio_Matrix_calcfuncInt32 func)
行列の各要素を関数で写像する
Definition: libharkio3_matrix.c:2708
harkio_TFType
伝達関数が定位用か分離用かを表す。(内部用)
Definition: libharkio3.h:92
int harkio_TransferFunction_setPositions(harkio_TransferFunction *tf, harkio_Positions *value)
Setter。harkio_TransferFunction の音源位置に対応する harkio_Positions を設定する
Definition: libharkio3_transferfunction.c:806
int signalMax
Definition: libharkio3.h:228
harkio_Matrix * harkio_Matrix_ctranspose(harkio_Matrix *m)
行列を複素共役転置する
Definition: libharkio3_matrix.c:2956
harkio_Matrix * harkio_Matrix_ediv(harkio_Matrix *a, harkio_Matrix *b)
2 つの harkio_Matrix の要素ごとの商を求める。
Definition: libharkio3_matrix.c:2154
float * floatdata
Definition: libharkio3.h:174
harkio_Matrix * harkio_Matrix_transpose(harkio_Matrix *m)
行列のを転置する
Definition: libharkio3_matrix.c:2902
int harkio_Positions_getSize(harkio_Positions *poses)
Getter。harkio_Positions の harkio_Position の数を返す。
Definition: libharkio3_positions.c:415
char * harkio_Matrix_getTag(harkio_Matrix *xml)
harkio_Matrix のタグを取得する
Definition: libharkio3_matrix.c:1551
伝達関数の計測条件などの一般的な情報を表す構造体
Definition: libharkio3.h:218
char * harkio_Positions_printBuffer(harkio_Positions *pos)
harkio_Positions の文字列表現を格納したバッファを返す。
Definition: libharkio3_positions.c:697
#define DEPRECATED(X)
deprecated関数定義用.ソース内で関数を使用している場合に,コンパイル時警告を出す属性を設定.
Definition: libharkio3.h:166
harkio_Matrix_map で要素ごとの処理を行うための関数ポインタ群。
Definition: libharkio3.h:122
float harkio_Position_convToRadian(float degree)
 内部用関数。 角度(degree)からラジアン(radian)に変換
Definition: libharkio3_position.c:606
int harkio_Position_setNumChannels(harkio_Position *pos, int numChannels)
Setter。harkio_Position の チャンネル数を更新する。
Definition: libharkio3_position.c:263
float euclidDistance(harkio_Position *pos_a, harkio_Position *pos_b, int length)
内部用関数。二つの harkio_Position の距離を求める
Definition: libharkio3_neighbors.c:497
harkio_Matrix * harkio_Matrix_vstack(harkio_Matrix *src, harkio_Matrix *stack)
srcにstackの内容を縦方向(rows方向)にスタックする。この際、srcの容量はstack分拡張される。 ...
Definition: libharkio3_matrix.c:241
int harkio_Neighbors_isEqual(harkio_Neighbors *a, harkio_Neighbors *b)
harkio_Neighbors が等しいかどうかを比較する。
Definition: libharkio3_neighbors.c:580
int harkio_Positions_append(harkio_Positions *poses, harkio_Position *pos)
 harkio_Positions に新たな harkio_Position を追加する。
Definition: libharkio3_positions.c:467
void harkio_Config_delete(harkio_Config **cfg)
デストラクタ。メンバになっている構造体を含めて全てのメモリを開放する。
Definition: libharkio3_config.c:47
char * harkio_Matrix_printBuffer(harkio_Matrix *m)
harkio_Matrix の文字列表現を格納したバッファを返す。
Definition: libharkio3_matrix.c:1614
harkio_Matrix * harkio_Matrix_epowerCFloat32(harkio_Matrix *m, float value)
行列を定数でべき乗する
Definition: libharkio3_matrix.c:2637
harkio_Matrix * harkio_Matrix_ecalcCFloat32(harkio_Matrix *m, float value, harkio_Matrix_calcfuncFloat32 func)
行列の各要素を関数で写像する
Definition: libharkio3_matrix.c:2751
harkio_TransferFunction * harkio_TransferFunction_fromData(harkio_Positions *poses, harkio_Positions *mics, harkio_Config *cfg, harkio_Neighbors *nbrs)
コンストラクタ。与えられた 音源位置群、マイク位置群、コンフィグ、隣接音源位置から構造体を生成する。 ...
Definition: libharkio3_transferfunction.c:79
int harkio_TransferFunction_appendSepTF(harkio_TransferFunction *tf, harkio_Matrix *tfs)
harkio_TransferFunction の分離伝達関数を表す harkio_Matrix 配列に要素を追加する。 ...
Definition: libharkio3_transferfunction.c:955
harkio_Matrix * data
Definition: libharkio3.h:198
harkio_Config * cfg
Definition: libharkio3.h:276
Definition: libharkio3.h:83
int harkio_Neighbors_getNeighbors(harkio_Neighbors *nbrs, int id, int *numNeighbors, int **neighbors)
getter。与えられた id の近接 id を返す。[]
Definition: libharkio3_neighbors.c:155
int harkio_TransferFunction_setNeighbors(harkio_TransferFunction *tf, harkio_Neighbors *value)
Setter。harkio_TransferFunction の harkio_Neighbors を設定する
Definition: libharkio3_transferfunction.c:742
char * path
Definition: libharkio3.h:197
harkio_Config * harkio_TransferFunction_getConfig(harkio_TransferFunction *tf)
Getter。harkio_TransferFunction の harkio_Config を返す
Definition: libharkio3_transferfunction.c:622
harkio_Matrix * harkio_Matrix_sub(harkio_Matrix *a, harkio_Matrix *b)
2 つの harkio_Matrix の差を求める。
Definition: libharkio3_matrix.c:801
char * harkio_Config_getTSPpath(harkio_Config *cfg)
Getter。harkio_Config の TSP 信号のパスを返す
Definition: libharkio3_config.c:102
int libharkio3_SeparationMatrix_readlibhakio2(harkio_TransferFunction **arg_tf, char *sepmatpath, char *septfzippath)
harkio2フォーマットの分離行列ファイルを読み込み、構造体を構成する。(deprecated)
Definition: libharkio3_conversion.c:199
Definition: libharkio3.h:66
int harkio_XML_writePositions(harkio_Positions *poses, FILE *outstream)
harkio_Positions をXMLファイルに保存する。
Definition: libharkio3_xml.c:263
harkio_Matrix * harkio_Matrix_epowerCComplex(harkio_Matrix *m, COMPLEX_TYPE value)
行列を定数でべき乗する
Definition: libharkio3_matrix.c:2649
int * channels
Definition: libharkio3.h:201
void harkio_Neighbors_delete(harkio_Neighbors **nbrs)
デストラクタ。harkio_Neighbors のメモリを解放する。
Definition: libharkio3_neighbors.c:110
int harkio_Matrix_getValueFloat32(harkio_Matrix *m, int row, int col, float *value)
float32 型の harkio_Matrix の値を取り出す
Definition: libharkio3_matrix.c:1238
harkio_Positions * harkio_Positions_newFromXMLbuffer(char *buffer, int len, char *dtdpath)
コンストラクタ。XMLが格納された文字列へのポインタから、harkio_Positions オブジェクトを生成する ...
Definition: libharkio3_positions.c:136
harkio_Matrix * harkio_Matrix_fromZip(struct zip *handle, char *path)
[内部用] zip ファイル内のharkio_Matrix_write で書き込んだファイルを読み込む。
Definition: libharkio3_matrix.c:466
harkio_Matrix * harkio_Matrix_emul(harkio_Matrix *a, harkio_Matrix *b)
2 つの harkio_Matrix の要素ごとの積を求める。
Definition: libharkio3_matrix.c:1000
int harkio_TransferFunction_setConfig(harkio_TransferFunction *tf, harkio_Config *value)
Setter。harkio_TransferFunction の harkio_Config を設定する
Definition: libharkio3_transferfunction.c:711
int cols
Definition: libharkio3.h:186
multipleType data
Definition: libharkio3.h:187
harkio_Positions * harkio_TransferFunction_getPositions(harkio_TransferFunction *tf)
Getter。harkio_TransferFunction の 音源位置を表す harkio_Positions を返す
Definition: libharkio3_transferfunction.c:688
harkio_Matrix * harkio_Matrix_mul(harkio_Matrix *a, harkio_Matrix *b)
2 つの harkio_Matrix の積を求める。
Definition: libharkio3_matrix.c:881
harkio_TransferFunction * harkio_TransferFunction_fromFile(char *path, char *signature)
コンストラクタ。与えられたファイルをロードし、構造体を構成する。
Definition: libharkio3_transferfunction.c:119
harkio_Matrix * harkio_Matrix_emap(harkio_Matrix *m, harkio_Matrix_maps *map)
行列の各要素を関数で写像する
Definition: libharkio3_matrix.c:2662
char * type
Definition: libharkio3.h:210
int harkio_Matrix_write(harkio_Matrix *m, char *path)
harkio_Matrix をファイルに書き込む
Definition: libharkio3_matrix.c:1835
harkio_Positions * poses
Definition: libharkio3.h:256
int harkio_TransferFunction_setSepTFs(harkio_TransferFunction *tf, harkio_Matrix **tfs)
Setter。harkio_TransferFunction の音源位置ごとの分離伝達関数を表す harkio_Matrix 配列へのポインタを設...
Definition: libharkio3_transferfunction.c:873
char * harkio_XML_writeBuffer(harkio_XML *xml)
harkio_XML をバッファに保存する。
Definition: libharkio3_xml.c:310
int numChannels
Definition: libharkio3.h:200
int size
Definition: libharkio3.h:252
int harkio_Position_isEqual(harkio_Position *a, harkio_Position *b)
 2つの harkio_Position が等しいか否かを判定する
Definition: libharkio3_position.c:376
int harkio_Matrix_setValues(harkio_Matrix *m1, harkio_Matrix *m2, int row, int col)
harkio_Matrix の一部を別の harkio_Matrix で上書きする
Definition: libharkio3_matrix.c:1473
int harkio_Matrix_setValueInt32(harkio_Matrix *m, int row, int col, int value)
int32 型の harkio_Matrix の値を設定する
Definition: libharkio3_matrix.c:1201
harkio_Matrix * harkio_Matrix_ecalcCComplex(harkio_Matrix *m, COMPLEX_TYPE value, harkio_Matrix_calcfuncComplex func)
行列の各要素を関数で写像する
Definition: libharkio3_matrix.c:2794
harkio_Matrix * harkio_Matrix_new(char *type, int rows, int cols)
初期化しないコンストラクタ
Definition: libharkio3_matrix.c:41
int harkio_TransferFunction_write(harkio_TransferFunction *tf, char *path, char *signature)
harkio_TransferFunction 構造体の情報をファイルに書き込む
Definition: libharkio3_transferfunction.c:1008
void harkio_TransferFunction_delete(harkio_TransferFunction **tf)
デストラクタ。メンバになっている構造体を含めて全てのメモリを開放する。
Definition: libharkio3_transferfunction.c:555
void harkio_Position_delete(harkio_Position **pos)
デストラクタ。メンバになっている構造体を含めて全てのメモリを開放する。
Definition: libharkio3_position.c:97
int harkio_XML_writeTail(FILE *outstream)
harkio_Positions をXMLファイルに保存する。
Definition: libharkio3_xml.c:295
int harkio_Position_Convert(harkio_Position *pos, float *coord, enum Coordinate type)
 harkio_Positions の座標を指定した座標系で得る。
Definition: libharkio3_position.c:452
int dim
Definition: libharkio3.h:184
void harkio_Positions_delete(harkio_Positions **pos)
デストラクタ。メンバになっている構造体を含めて全てのメモリを開放する。
Definition: libharkio3_positions.c:268
harkio_Position * harkio_Position_new(int id, enum Coordinate sys, float *coord, char *path)
コンストラクタ。空の 与えられた座標の POS を返す。
Definition: libharkio3_position.c:49
int harkio_Position_setChannelsUse(harkio_Position *pos, int channels_use)
Setter。harkio_Position の チャンネル使用の有無を更新する。
Definition: libharkio3_position.c:292
int size
Definition: libharkio3.h:208
char * harkio_Matrix_writeBuffer(harkio_Matrix *m, size_t *size)
harkio_Matrix のファイルフォーマットを書き込んだバッファを返す。
Definition: libharkio3_matrix.c:1875
void harkio_Position_print(harkio_Position *pos)
 harkio_Position をテキストで表示する
Definition: libharkio3_position.c:320
harkio_Matrix * harkio_Matrix_add(harkio_Matrix *a, harkio_Matrix *b)
2 つの harkio_Matrix の和を求める。
Definition: libharkio3_matrix.c:642
int harkio_Position_setChannels(harkio_Position *pos, const int *channels, const int numChannels)
Setter。harkio_Position の チャンネルを更新する。
Definition: libharkio3_position.c:221
int harkio_Matrix_getValueComplex(harkio_Matrix *m, int row, int col, COMPLEX_TYPE *value)
complex 型の harkio_Matrix の値を取り出す
Definition: libharkio3_matrix.c:1351
int * ids
Definition: libharkio3.h:253
int * intdata
Definition: libharkio3.h:173