HARK FORUM › 連続してループ中のループを実行する問題 › Reply To: 連続してループ中のループを実行する問題
回答が遅くなり申し訳ございません。サンプルを作成致しました。
添付ファイルの Python ノードを LOOP0 の中にある AudioStreamFromMic や AudioStreamFromWave の代わりに使用して頂くとご希望の動作になると考えております。
MAIN には LOOP0 のみ存在し、また LOOP0 については出力端子のみとなるネットワークになります。InputStream ノードなどは必要なくなります。
まず、 PyCodeExecutor3 ノードに出力端子 AUDIO と NOT_EOF を追加してください。AUDIO 端子の出力を AudioStreamFromXXXX ノードの出力と同様に接続して頂き、NOT_EOF 端子の出力に CONDITION を設定します (Set as Condition) 。 AudioStreamRepeaterFromWave.png のようになります。
また、必須ではないのですが NOT_EOF 端子に対して Set as Output で出力端子としても設定して下さい。これは HARK-Designer の不具合なので動作には影響がないのですが、入出力が設定されていない任意の端子(接続が必須でない端子)が存在する場合、次回ネットワークを開いた際に端子が非表示になるという問題を避けられます。
次にパラメータの設定を添付の AudioStreamRepeaterFromWave_parameters.png のように設定します。
AudioStreamRepeaterFromWave.py (zipで圧縮して添付しています) の実装の概要ですが、
load_file メソッドは単独のファイルを読み込んで AudioStream のためのバッファ self.frames を作成します。 self.frames.shape は (frames, channels, length) で calculate メソッドの実行時(各フレームの処理時)に (channels, length) サイズの numpy.array() を出力するために使用します。 2次元配列は C++ 側で HARK::Matrix として変換されるため AudioStreamFromMic や AudioStreamFromWave の出力と同様の形式で出力されます。
load_files メソッドは複数ファイルを連結して読み込む例として実装させて頂きました。AudioStream のバッファをどのように結合するかの参考になれば幸いです。チャネル数やフレーム長(length)が変わる場合にはバッファを再構築する仕様で実装しております。
添付の Python ノードをご使用になる際の注意点として、 sliding_window_view を使用しておりますので numpy の 1.20.0 以降が必要となります。
以上、宜しくお願い致します。
HARK Support Team.
-
This reply was modified 6 months, 1 week ago by
Masayuki Takigahira.