6.7.27 SaveMapFrames

6.7.27.1 ノードの概要

Map<int, ObjectRef> 型のコンテナに格納されていたフレームのデータを,Mapのキーごとに別々にファイルに保存する. これらのデータファイルに加えて,各フレームのデータファイルのリストを記載したファイルを提供する. ObjectRef は Vector<float> 型または Vector<complex<float> > 型のいずれかでなければならないことに注意.

6.7.27.2 必要なファイル

無し.

6.7.27.3 使用方法

どんなときに使うのか

このノードは,元々フレームのデータが格納されていた Map<int, ObjectRef> 型のキーごとに,フレームのデータを別々にファイルに保存するために用いる. 各キーに対して生成された各ファイルは, 同じキーにマップされたデータで構成される. さらに,フレーム毎に,これらのデータファイルのリストを記載したファイルを生成する. 下記の "典型的な接続例"で示すネットワーク例では, SaveMapFrames は, GHDSS によって出力された Map$<$int , Vector<complex<float> > $>$型のデータを入力として受け取る. データは,分離音の音源IDと複素スペクトルのペアになる. ここで,キーは音源IDを表す. 各キー用に生成された各ファイルは,同じ音源IDにマッピングされたデータで構成される.

典型的な接続例

6.130 は,ネットワークに SaveMapFrames を使用した接続例を示す. このネットワークでは,音源分離は GHDSS アルゴリズムを使用して実行され,出力は SaveMapFrames によってファイルに保存される. GHDSS アルゴリズムに基づくサウンド分離の詳細については,GHDSSのノードリファレンスを参照のこと.

\includegraphics[width=\linewidth ]{fig/modules/SaveMapFrames}
Figure 6.130: SaveMapFrames の接続例

6.7.27.4 ノードの入出力とプロパティ

入力

INPUT

: データがMapのキーにマップされる Map<int, ObjectRef> 型のフレームのデータ.フレームのデータはキーにマップされる.サポートされている型は, Map$<$int , Vector<float> $>$ 型および Map$<$int , Vector<complex<float> > $>$ 型.

出力

OUTPUT

: 2種類のファイル. 一つは "内部ファイル"と呼ばれるデータファイルで,もう一つは "メインファイル"と呼ばれる "内部ファイル"のリスト. "内部ファイル"は,入力 Map<int, ObjectRef> のキーの数だけ生成されるので,出力ファイルの総数はキーの数に1を加えたものになる.

パラメータ

Table 6.127: SaveMapFrames のパラメータ表

Parameter name

Type

Default value

Unit

Description

パラメータ名

デフォルト値

単位

説明

FILENAME

string 

   

出力するテキストファイルのファイル名.フレームごとのデータファイルのリストが含まれる. このファイル名は,出力するデータファイルのファイル名のベース名になる.

OUTPUTTYPE

string 

TEXT

 

出力するデータファイルのファイル形式オプション. テキストファイルの場合はTEXT,バイナリファイルの場合はRAWを選択する.

TEXTFORMAT

string 

FIXED

 

OUTPUTTYPEをTEXTに設定した場合に出力するデータファイルのファイル形式オプション. FIXEDかSCIENTIFICを選択する.

FILENAME

: string  type. 各フレームの「内部ファイル」のリストが書き込まれている「メインファイル」のファイル名.

OUTPUTTYPE

: string  type. 「内部ファイル」のファイル形式オプション. テキストファイルの場合はTEXT,バイナリファイルの場合はRAWを選択する. デフォルト値はTEXT. 「メインファイル」は,このパラメータで指定された値に関係なく,テキストファイルとなる.

TEXTFORMAT

: string  type. OUTPUTTYPEをTEXTに設定した場合に出力するデータファイルのファイル形式オプション. FIXEDかSCIENTIFICを選択する.

6.7.27.5 ノードの詳細

SaveMapFrames は,フレームごとに Map$<$int , Vector<float> $>$ 型または Map$<$int , Vector<complex<float> > $>$型コンテナのいずれかの型に格納されたフレームのデータを入力として受け取り,そのデータをキーごとに別々のファイルに保存する. 出力は次の2種類のファイル.

2種類の出力ファイル:

  1. メインファイル -すべてのフレームの「内部ファイル(下記参照)」リストが書き込まれたテキストファイル. 各リストはフレームごとに区切られる.

  2. 内部ファイル - Map<int, ObjectRef> 型のフレームのデータがキーごとに個別に保存されたデータファイル. これらのファイルは,キーの数だけ作成される. 各ファイルは,同じキーにマップされたフレームデータで構成される. ファイル形式は,OUTPUTTYPEパラメーターで指定. OUTPUTTYPEパラメータをRAWに設定すると,フレームのデータは,リトルエンディアン順にIEEE 754 32ビット単精度浮動小数点数形式で書き込まれる. このパラメータのデフォルト値TEXTは,RAWとは異なり人間が読めるデータを出力する.

Mapの型についての詳細は, Map を参照のこと.

出力ファイルのファイル名:

  1. メインファイル - FILENAMEパラメータで指定する.

  2. 内部ファイル - 以下のパターンに従って自動的に生成. "TEXT"と "RAW"はOUTPUTTYPEパラメータの選択であることに注意. このノードでは, "containertype"は常に "Vector"で, "datatype"は "float"または "complex_float", "colsize"は1つのキーにマップされるデータのサイズとなる.

    TEXT: FILENAME + Map key + {contianertype} + {datatype} + "_col"{colsize} + .txt
    RAW: FILENAME + Map key + {contianertype} + {datatype} + "_col"{colsize} +. raw

    上記のように,OUTPUTTYPEパラメータでTEXTまたはRAWを選択した場合のファイル名の違いは,ファイル拡張子だけである. ファイル名の例を,以下のMainファイルのサンプルとして示す.

出力ファイルの内容:

  1. メインファイル
    フレームごとの「内部ファイル」のリスト. 1つのフレームが複数の異なるキーにマッピングされたデータで構成されている場合,それぞれのデータは対応するキーのファイルに保存されるため,1つのフレームに対して複数のファイル名が表示される. 1つのフレームのデータがファイルに保存されるたびに,ファイル名がフレーム番号に続くリストに追加される. フレーム番号は0から始まる.

    関連するパラメータ値を以下のように設定した場合,6397フレーム分のデータを処理した後の「メインファイル」の内容例を以下に示す.

    Parameter name

    Value

    FILENAME

    Savedata.map

    OUTPUTTYPE

    TEXT

    左側の灰色の数字は,実際にファイル名が「メインファイル」にどのように書き込まれているかを読者が容易に理解できるようにするための行番号であり,その行番号は実際のファイルには書かれていないことに注意.

    メインファイルのサンプル:

    1 0 savedata.map_0000_Vector_complex_float_col257.txt
    savedata.map_0001_Vector_complex_float_col257.txt
    savedata.map_0002_Vector_complex_float_col257.txt
    savedata.map_0003_Vector_complex_float_col257.txt
    savedata.map_0004_Vector_complex_float_col257.txt
    savedata.map_0005_Vector_complex_float_col257.txt
    savedata.map_0006_Vector_complex_float_col257.txt
    savedata.map_0007_Vector_complex_float_col257.txt

    2 1 savedata.map_0000_Vector_complex_float_col257.txt
    savedata.map_0001_Vector_complex_float_col257.txt
    savedata.map_0002_Vector_complex_float_col257.txt
    savedata.map_0003_Vector_complex_float_col257.txt
    savedata.map_0004_Vector_complex_float_col257.txt
    savedata.map_0005_Vector_complex_float_col257.txt
    savedata.map_0006_Vector_complex_float_col257.txt
    savedata.map_0007_Vector_complex_float_col257.txt

    6397 6396 savedata.map_0000_Vector_complex_float_col257.txt
    savedata.map_0001_Vector_complex_float_col257.txt
    savedata.map_0002_Vector_complex_float_col257.txt
    savedata.map_0003_Vector_complex_float_col257.txt
    savedata.map_0004_Vector_complex_float_col257.txt
    savedata.map_0005_Vector_complex_float_col257.txt
    savedata.map_0006_Vector_complex_float_col512.txt
    savedata.map_0007_Vector_complex_float_col512.txt

    Map<int, ObjectRef> 型の空のコンテナが受信されると,フレーム番号のみがそのフレームのファイルに書き込まれる. 以下は,このような空のコンテナがいくつかのフレームで受信されたことを示すMainファイルの例. FILENAMEパラメータの値は "file".

    1 0

    2 1

    3 2

    8 7

    9 8 file_0000_Vector_float.txt

    10 9 file_0000_Vector_float.txt

    11 10 file_0000_Vector_float.txt file_0001_Vector_float.txt

    12 11 file_0000_Vector_float.txt file_0001_Vector_float.txt

    左の灰色の数字は,実際にファイル名が「メインファイル」にどのように書かれているかを読者が容易に理解できるようにするための行番号を示しているため,これらの行番号は実際のファイルには書き込まれないことに注意.

  2. 内部ファイル
    6.128 に,OUTPUTTYPEパラメータでTEXTを選択した場合のファイル形式を示す. 各データはスペースで区切られ,各フレームのデータは改行で区切られる.

    Table 6.128: OUTPUTTYPEパラメータがTEXTの場合のファイル形式

    データ型

    ファイルフォーマット

    Float

    data[0] data[1] data[2] ... data[n]

     
     

    data[0] data[1] data[2] ...... data[n]

     

    Complex

    data[0].real() data[0].imag() data[1].real() data[1].imag() ... data[n].real() data[n].imag()

     

    float

       

    ここで,nは,フレームのデータが格納されている入力 Map<int, ObjectRef> の ObjectRef であるVectorのサイズ.

    ベクターサイズ

    Vector Sizeは,入力として受け取った Map$<$int , Vector<ObjectRef> $>$ の Vector<ObjectRef> のサイズ. このノードの ObjectRef は, float または complex<float> . 上記のサンプルネットワーク(図 6.130)では, SaveMapFrames の前に MultiFFT が接続されているため,257になる. MultiFFT では,Vectorのサイズは,長さ/ 2 + 1の式を使用して計算される. MultiFFT のウィンドウの長さはデフォルトで512. 数式を適用した結果,257.

    保存されるパターン

    SaveMapFrames は,フレームごとに,各データがマップされているキーによってフレームのデータを別々のファイルに保存する. 図 6.131 に,6397フレームのデータが0000から0007のキーにマッピングされ,257サイズのベクターデータが各ファイルに書き込まれている例を示す.

    \includegraphics[width=\linewidth ]{fig/modules/SaveMapFrames-2}
    Figure 6.131: 全フレームの全データを含むMapパターンの保存

    サンプルネットワーク(図 6.130)では, SaveMapFrames の入力は Map<int, ObjectRef> 型のコンテナで, GHDSS の出力. 各 Map<int, ObjectRef> は,分離された音源IDと複素スペクトルのペア. 内部ファイルは,音源の数だけ生成される. 入力用のフレームのデータが音源分離の結果である場合には,全ての音源が同時に音を出さないか,ある持続時間を有する場合には,フレームのデータが部分的に見つからないことが起こりうる. このような場合の例を図 6.132 に示す.フレーム[0]では,257サイズのベクターデータが0000,0001,0002のファイルに順次書き込まれる. フレーム[100]では,257サイズのベクターデータが,0000,0002,0003,0004のファイルに順次書き込まれる.

    \includegraphics[width=\linewidth ]{fig/modules/SaveMapFrames-3}
    Figure 6.132: 複数の時刻と期間を音源としたMapパターンの保存

    ここで,nは音源の数.

    内部ファイルのサンプル:

    6.133 に,表 6.128 で説明したTEXTファイル形式のデータの書き方を示す. この例では,入力データが6397フレーム,ベクターサイズが512,入力データ型が Map$<$int , Vector<float> $>$ であると仮定する. これらの情報は自動的に内部で検出され,ユーザーの入力は必要ない. 図 6.132 および図 6.133 の左側のフレーム番号はファイルにはないことに注意.

    \includegraphics[width=.8\textwidth ]{fig/modules/SaveMapFrames-4}
    Figure 6.133: TEXTを float 型とした SaveMapFrames の内部ファイルのサンプル

    6.134 は,入力データがMap$<$int , Vector<complex<float> > $>$ 型であり,入力データが6397フレームで,ベクターサイズがサンプルネットワーク(図 6.130)とまったく同じ場合の例を示す.

    \includegraphics[width=.8\textwidth ]{fig/modules/SaveMapFrames-5}
    Figure 6.134: TEXTを Complex float 型とした SaveMapFrames の内部ファイルのサンプル