Reply To: HarkDataStreamSenderのデータを受信するための既存ノードの有無

HARK FORUM HarkDataStreamSenderのデータを受信するための既存ノードの有無 Reply To: HarkDataStreamSenderのデータを受信するための既存ノードの有無

#1690

お問い合わせありがとうございます。

> ●質問1
> 処理分配機能について、ドキュメント(3.1.0)のどのページを見ればよいか、教えていただけませんでしょうか?
> (目次からそれらしいのがわからず、それらしいキーワードでぐぐっても探せなかったため)

確認致しましたところ、ドキュメントの更新作業に遅れが発生しており
十分な情報がまだ公開されていない状況となっております。
もし宜しければ、別のThreadを立ててPostして頂けませんでしょうか。

> ●質問2
> SourceSelectorByDirectionのパラーメータ値(フィルタリングする角度情報)を外部から動的に与えるにはどうすればよいでしょうか?例えば、時刻t1では0-10度、時刻t2では20-30度、時刻t3では70-90度のように、動的に任意の角度を渡したいのですが、その場合、どのようなノードを使えばよいでしょうか?
> (やりたいことは質問3の具体例部分です)

SourceSelectorByDirectionは静止した話者方向のみを残すフィルタリングを目的としているため、
フィルタリングする角度情報を動的に与えることは出来ません。
HARK-Python等でSource情報を入力してフィルタ方向を決定するノードを実装する必要があります。
前回の図ではConstantLocalizationを使用されていますが、時間で動的に変化する音源を追跡するという事で宜しいでしょうか?その場合には、LocalizeMUSIC等の定位ノードで音源検出を行う必要があります。
動的に変化する音源であるが、音源方向が既知であるという場合についても考えましたがマイクアレイからの入力との事でしたので、お使いになる用途について確認させて頂ければと思います。

> ●質問3
> SaveWavePCMを複数音源の音声を結合する方法がわからないので教えていただきたい。

INPUT入力端子は1つですが、複数音源のスペクトルデータが入力されています。
まず、SaveWavePCMの挙動について説明させて頂きます。
SOURCES入力端子には音源情報(音源ID、定位結果の座標など)が Vector (C++ の std::vector に相当) で入力されます。また、INPUT入力端子には分離スペクトルが Map(C++ の std::map に相当)で入力されます。つまり、どちらの入力端子でも複数音源のデータを1端子で入力しています。
SaveWavePCMノードは毎フレーム受け取る Map の同一の Key (音源ID)を1つのファイルに書き出します。つまり、有音区間のデータしか書き出しされません。SOURCES入力端子が接続されている場合は、音源情報に含まれる音源IDだけがファイルに書き出されます。SOURCES入力端子が未接続時は Map に含まれるすべての Key (音源ID)が出力されます。

無音区間を含めて結合する必要がある場合について:
soxなどの外部ツールをお使いください。
SaveSourceLocationノードで音源情報をファイルに出力する事が可能ですので、各音声ファイルの開始/終了フレーム(音声区間)をご確認頂く事が可能です。その時間情報に基づき、sox等の外部ツールを使って結合する事でご希望のファイルを得る事が出来ます。soxの場合、無音に対して音声ファイルの開始時間を与えてMixingしたものをファイルに書き出すのが楽だと思います。

質問3の最後に書かれていた具体例について:
既知の音源方向であると仮定して書かせて頂きます。
前者はt1~t5までが連続しているため音源情報のIDが同一で、音源座標の情報が「 t1=> 5度 =>t2=> 35度 =>t3=> 10度 =>t4=> 75度 =>t5 」と変動していれば1つの音声データとして出力可能です。後者の場合にはt1~t3とt4~t5の2つの区間に分かれてしまっているので2つの音声データとして出力されます。
既知の特定時間で変動する音源情報を作るためには、次のように作成します。
まず、IterCountノードで現在のフレームカウント(16000Hzサンプリング、ADVANCEが160サンプルの初期設定では1フレームが10msです。)を取得し、これとConstantノードで与える定数(何フレーム目で切り替えるか)をGreaterまたはSmallerノードで比較した結果をIFノードの条件(COND端子の入力)とします。各区間での方向を表す座標を与えたConstantLocalizationノードをIFノードのTHEN端子とELSE端子に入力してこれを切り替える回数だけ多段に接続してください。
また、前者/後者の2つの音源情報をCombineSourceノードで結合し、SOURCES端子の入力とします。
*)別件ですが、Wordpress原因で図が添付できない問題が解決しましたので、ご連絡させて頂きます。テキストだと分かりにくいかと思われますので、後ほどサンプルを添付させて頂きます。

> ●質問4
> 質問3の具体例のような処理を行う場合に必要となるPCのスペックを検討しています。
> 上記の処理は主にビームフォーミング処理と音声結合処理から構成されますが、どの程度のスペックのPCで各々の計算時間がどの程度になるのか、知見がございましらご教示頂けないでしょうか?

毎年、HARK講習会を開催しておりますが来訪者の方には下記スペックのPCを準備して頂いております。
プロセッサ:Core iシリーズ (メモリ:4GB以上搭載、SSD搭載 を推奨)

ビームフォーミング処理等は使用するアルゴリズムやパラメータで計算時間が異なりますので具体的な時間は申し上げにくいのですが、上記スペックのPCであればリアルタイムに処理を行うことが出来ます。
オフライン(ファイル入力)では実時間より短くなりますが、実際に処理を行って確認して頂く必要があります。


投稿タイトルと異なる内容のご質問となる場合(例えば 質問1 や 質問4 のような場合)は、別のThreadに分けて投稿して頂いた方が他の方からも回答が付きやすくなります。ご検討ください。

以上、宜しくお願い致します。
HARK Support Team,