2台のマイクで音源定位がしたい

HARK FORUM 2台のマイクで音源定位がしたい

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #2753
    牛太郎
    Participant

      1台のマイクを用いたネットワーク(音源定位、録音)なら実行できるのですが、それを2台のマイク(TAMAGO_03)で行おうとネットワークを編集して実行しようとしてもうまくいきませんでした。

      例を挙げると、”HARK クックブック Version 3.4.0.(Revision:9509) 2.2.2 マイクロホンからのリアルタイム音源定位” のFigure 2.7のネットワークを作成し、1台のマイクなら成功しました。
      しかし、2台のマイクで実行するためにLOOP1シート(LOOP0シートと同じ構成で、プロパティ欄の認識するマイクのデバイス名とディスプレイ名を変えている)を追加してExcuteボタンを押すと、実行はできるのですが2つ目のディスプレイがうまく表示されません。
      具体的にいうと、2つ目のディスプレイは、
      1.最初はウィンドウとディスプレイ名だけが表示される
      2.時間がたつと縦軸と横軸のメモリ(定位方向と時間)が表示されるが、時間が経過しても横軸が動かない
      といった様に遷移します。この間、1つ目のディスプレイは最初から完璧に実行できていて、リアルタイムな音源定位結果もディスプレイに表示されています。実行時はエラーは表示されませんでしたが、stopボタンを押して実行をやめた後にエラーが表示されました。また、2台のマイクは正しく認識されています。
      添付した画像は、2台のマイクを用いてリアルタイム音源定位を試みたネットワークと実行した際のディスプレイ表示、実行をやめた後に表示されたエラー1,2の3枚です。
      「第22回HARK講習会」で配布された資料とデータから、Windows11内に”HARK_Tutorial_2023″というubuntuの仮想環境を作成してHARK designerを動かしているので、仮想マシンでの複数USBデバイスへのアクセスが問題になっているのかなと思っているのですが、解決策がわかりません。
      何かわかる方がいましたらよろしくお願いします。

      #2758
      nterakado
      Moderator

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

        ご質問の件ですが、
        前提としてHARKは複数のマイクを別ノードとして使用する設計になっておりません。
        これは、シングルスレッドのため複数のデバイスでの同期ができないためです。

        対策としては、複数のマイクをOS側で一つのデバイスとして制御しHARK側では一つのノードで処理することなどがあります。

        また、目的によっては異なる実現方法があるかもしれませんので、
        差し支えなければなんのために複数のマイクを使うのかご回答いただけますでしょうか。

        以上、よろしくお願いいたします。
        HARKサポートチーム

        #2759

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

        マイクアレイデバイスを複数台使用されたいとのことですが、マイクアレイデバイス同士が同期して録音出来る必要があります。同期は、各マイクアレイデバイスのクロックが僅かにずれるためサンプルのずれをどこかで調整する必要があるためです。

        目的によっては他にも最適な解決手段がご提案できるケースが御座いますが、汎用的な解決手段として下記があります。

        1つの解決手段として ALSA などの仮想ミキサー機能を使用して複数台のマイクアレイデバイスを1台の仮想マイクアレイデバイスとする方法が御座います。
        下記はご質問者様と似たようなケースで、2台の2チャネル録音デバイスを1台の4チャネル仮想録音デバイスに見せる方法の回答が掲載されています。
        https://stackoverflow.com/questions/8043912/is-it-possible-to-capture-both-mic-and-line-in-at-the-same-time-using-alsa
        上記URLの例では、 hw:0,1 や plughw:0,1 などの物理デバイス名の代わりに multi_capture というデバイス名を指定することになります。
        ALSA のユーザ設定は、 .asoundrc というファイルに記述することになりますので、使い方など検索される際のキーワードとして .asoundrc や ALSA などをご利用ください。英語で分かりづらい場合でも検索をかけて頂ければ下記のような和訳サイトなどが見つけられます。
        https://wikiwiki.jp/tetsuya/asoundrc

        1台のデバイスとして見える状態になりましたら、 AudioStreamFromMic の出力を ChannelSelector で8チャネルづつに分割して処理して頂く事で、1ループ (LOOP0のシートのみ) で2台のマイクアレイの処理を行う事が可能です。

        その他の解決手段について:
        各マイクアレイの処理が独立したものであるならば、2つのHARKプロセスで別々に処理する事をお勧めいたします。
        例:2つのマイクアレイで定位された方向で三角測量のような事を行いたい場合
        1.2つのHARKプロセスを起動し、各プロセスから最新の定位結果を送信する
        2.定位結果を受信し、測量結果を求める
        とすることもできます。ご検討ください。

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

        #2767
        牛太郎
        Participant

          ご回答ありがとうございます。

          複数のマイクロホンアレイの定位結果を用いて音源の2次元座標を特定したい、というのが複数マイクを用いる目的になります。

          複数の”AudioStreamFromMic”ノードを用いた理由は、”MultiAudioStreamFromMic”ノードを用いたネットワークの実行ができなかったからなのですが、こちらは別の質問として投稿しようと考えております。

          この事例の場合、どの実現方法が適しているかをご教示お願いいたします。

          #2768
          牛太郎
          Participant

            ご回答ありがとうございます。

            複数のマイクアレイの定位結果を用いて音源の2次元座標を特定したい、というのが複数マイクを用いる目的になりますので、各マイクアレイの処理は独立しています。

            そこで質問なのですが、1つの仮想マシン(Ubuntu)内で2つのHARKプロセスを起動することはできますか?
            HARK designer を新しいウィンドウで開くことができず、また、Firefoxブラウザの HARK designer のタブを複製して2つのネットワーク(”AudioStreamFromMic”ノード内のデバイス名のみを変えた別のファイル)を実行しようとしてもできませんでした。

            1つのPCに1台のマイクを用いる方法が実現しやすい方法でしたら、そちらの方法でも厭いません。
            ご回答よろしくお願いいたします。

            #2769
            nterakado
            Moderator

              複数のHARKプロセスを起動することは可能ですが、HARK Designerからはできません。
              CLIでharkmwコマンドを使用してください。

              $ harkmw <ネットワークファイル> <ARG1> <ARG2> ..

              ただし、複数のHARKプロセス間での同期をとる必要がありますので、
              複数のマイクを一つのデバイスとして処理するほうが実現しやすいかと考えます。

              参考までにネットワーク構成図を添付します。

              • This reply was modified 6 months ago by nterakado.
              Attachments:
            Viewing 6 posts - 1 through 6 (of 6 total)
            • You must be logged in to reply to this topic.