Masayuki Takigahira

Forum Replies Created

Viewing 15 posts - 31 through 45 (of 67 total)
  • Author
    Posts
  • in reply to: problem with wios #975

    Thank you for reporting this error.
    And, I appreciate your help confirming the operation of the debug version.

    It has been confirmed that this error is caused by compiler optimization. Currently, we are preparing a package for publishing with a reduced optimization level as a workaround. It will be released in the next few days.

    The version with the bug fixed will be “WIOS 3.0.7.1”. Please wait for it to be posted on “News” page.

    Best regards,

    in reply to: Generating transfer function #959

    I prepared three TSP files recorded at different locations with different microphone arrays. The figure below shows an excerpt of one channel, which you open in Audacity to see the spectrogram.

    In the two examples below you will see frequency components other than the original TSP signal. This is due to harmonics or reflected waves. It would be desirable to set the largest volume without such extra information.
    The following three examples are TSP files that function without any problems in performance. In other words, it is the limit value of the volume that harmonics and reflected waves are barely visible as shown below. Be careful not to make the line due to harmonics or reflected waves more strongly than that. It is most desirable to adjust to the invisible state as in the example at the top.

    tsp.png

    Attachments:
    in reply to: 音源定位結果をhark-pythonで扱うには #953

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

    DisplayLocalization ノード等へ入力されていますので、 PyCodeExecutor3 ノードの出力は Vector<Source> 型になっていなければなりません。全てのノードについて入出力の型が掲載されていますので、詳細はHARK-Documentのノードリファレンスをご参照ください。

    つまり、今回のケースは出力端子の型設定を
    self.outputTypes=("prime_source",)
    ではなく
    self.outputTypes=("vector_source",)
    と設定する必要が御座います。

    それに伴い
    self.outputValues["output"] = self.input[0]
    と書かれている行についても次のようにする必要が御座います。
    self.outputValues["output"] = [self.input[0]]
    更に、入力されたVectorサイズが0である(定位無しの)可能性が御座いますので、次のようにしていなければ実行中にクラッシュする可能性が御座います。
    self.outputValues["output"] = [] if len(self.input)<1 else [self.input[0]]

    また、余談ですが

    self.outputValues["output"] = self.input
    self.outputValues["output"] = self.input[0]

    のように同一出力端子に2度書き込みを行った場合、
    後で書き込まれた値のみが使われます。
    calculate() メソッドを抜ける時点で設定した型と
    最終的に書き込まれている型が不一致している場合には
    エラーが発生しますのでご注意ください。

    以上、よろしくお願い致します。

    in reply to: problem with wios #950

    > Unfortunately, it did not give me any new information on how to overcome my problem with wios (see results of my wios_check in attachments).


    @paul
    : No. I saw your results and understood at least one of the causes.

    
    You can use following channels argument with the wios command.
        -c <channels> (same as --channels <channels>)
        *) Please select one of ( 2 ) as <channels>.
    

    This means that your device only supports 2 channels. If your device supports 1 or 2 channels, you will see the following message:

    
    You can use following channels argument with the wios command.
        -c <channels> (same as --channels <channels>)
        *) Please select one of ( 1-2 ) as <channels>.
    

    Also, while wios defaults to 16 kHz for the sampling rate, your device does not support 16 kHz. Your device supports only the sampling rates below. In other words, 44.1 kHz, 48 kHz, etc. should be selected.

    your playback device:

    
    You can use following sampling rate argument with the wios command.
        -f <rate> (same as --frequency <rate>)
        *) Please select one of ( 44100 48000 96000 192000 ) as <rate>.
    

    your capture device:

    
    You can use following sampling rate argument with the wios command.
        -f <rate> (same as --frequency <rate>)
        *) Please select one of ( 44100 48000 96000 ) as <rate>.
    

    ——
    You will need to do some things:
    – The tsp1.wav that you used is 1 Channel (Mono) data, but you need to make it 2 Chennels (Stereo).
    e.g.) If you use a tool called sox , the following will duplicate the channel after rate conversion:
    sox tsp1.wav -r 48000 tsp2.wav remix 1 1
    Instead, please try using the output tsp2.wav.
    – Please set the channel number explicitly as -c 2 on your device. It is not -c 1 .
    – Please set the sampling rate explicitly as (e.g.) -f 48000 on your device. It is not -f 16000 (This is the wios default if not set).

    ——
    The following commands should work on your device.
    arecord -d 16 -D plughw:0,0 -f S32_LE -c 2 -r 48000 output.wav
    To make it work the same way:
    wios -r -x 0 -t 16 -a plughw:0,0 -e 32 -c 2 -f 48000 -o output.wav

    The following commands should work on your device.
    aplay -D plughw:0,0 tsp.wav
    To make it work the same way:
    wios -p -x 0 -d plughw:0,0 -i tsp.wav
    *) tsp.wav must be 48 kHz, 32-bit (or 16-bit) 2-channel data.

    The settings for syncing your recording and playback devices in this example are:
    wios -s -x 0 -y plughw:0,0 -z plughw:0,0 -e 32 -c 2 -f 48000 -i tsp.wav -o output.wav
    wios -s -y 0 -d plughw:0,0 -z 0 -a plughw:0,0 -e 32 -c 2 -f 48000 -i tsp.wav -o output.wav

    Notes:
    If you get an error message about buffers (for example, buffer overruns), you can work around by setting the buffer size larger than the initial value using the -N and -Z options.

    I hope this answer will help you solve your problem.

    Best regards,

    in reply to: problem with wios #947

    It seems that you need to add -std=c++11 as a compile-time option in environments other than Ubuntu 18.04 or later. This is because the source code was written based on the C++11 specification.

    in reply to: problem with wios #942

    @paul: The upload failed due to a problem with the file permission. Thank you for contacting me.

    ———-
    For those who visited later …

    This post was corrected on 27th June 2019.
    Since an error was found in the attached file, uploading is done again.
    Please download wios-check2.zip.

    in reply to: problem with wios #931

    Thank you for your inquiry.

    wios uses ALSA directly.

    First, make sure you can record and playback using arecord or aplay . If you set the number of bits or encoding that the hardware does not support, it may not work properly. In other words, be aware of the default settings that is used by wios.
    Secondly, wios implements only some of the features of ALSA, so some devices may not be supported. For example, when recording 24-bit PCM with the --encoding 24 option, S24_LE is supported but S24_3LE is not.

    I created a tool that I attached in this post, which can be used do a quick check. But since it has not been tested thoroughly, there may be some problems remaining. But if it works well, the output result may be helpful.

    How to compile:
    g++ wios-check.cpp -lasound -o wios-check

    How to use:
    ./wios-check <device> <type>
    <type> is one of playback , capture or both.
    defaults: <device> is hw:0,0 selected, and <type> is both selected.
    e.g.) ./wios-check plughw:0,0 playback

    Finally, HARKTOOL5 offers a new way to create transfer functions from TSP recordings that have not been synchronized. The information is written below, so I hope you find it useful.

    [HARKTOOL5-GUI documentation] => [Transfer Function Estimation Using Complex Regression Model]

    Best regards,

    in reply to: repository replies IP 54.92.109.90 404 not found #875

    By Sylvia, did you mean you are using Linux Mint 18.3 with Ubuntu Xenial as the package base?
    Although Linux Mint was derived from Ubuntu, we do not support distribution for such, So if you are using Sylvia via apt repository for the Ubuntu Xenial, I can advice you to please register again the apt repository by changing the part of $(lsb_release -cs) included in the following command to xenial.

    sudo bash -c 'echo -e "deb http://archive.hark.jp/harkrepos $(lsb_release -cs) non-free\ndeb-src http://archive.hark.jp/harkrepos $(lsb_release -cs) non-free" > /etc/apt/sources.list.d/hark.list'

    Previously registered URL (domain) of the apt repository will not be able to connect due to our server migration which may have been causing the error.
    Installation Instruction for Linux

    Best regards,

    in reply to: ノードの作成方法について #871

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

    > 逆の処理も可能でしょうか。
    はい。可能です。

    Python内で定義された変数(または定数)を self.outputValues["端子名"] に代入して頂ければ出力されます。ネットワークファイル側では、PyCodeExecutor3ノードを右クリックし、 Add Output を選び、 self.outputValues["端子名"] で指定した端子名で出力端子を追加してください。
    入力は self.端子名 で取得できますが、こちらもネットワークファイルのPyCodeExecutor3ノードに Add Input で追加した入力端子名となります。
    calculate() メソッドが毎フレーム呼び出されますのでinputに対して処理してoutputするという用途が基本になります。inputが1つも無い例として、処理を開始する最初のノード(AudioStreamFromWaveのようにファイル入力等を行う)として作成する場合は、EOFでHARKの処理を停止するためにCONDITIONというbool型の出力を追加し、通常はTrue、EOFでFalseを設定します。ネットワークファイルではCONDITION端子にCONDITIONを設定してください。

    PyCodeExecutor3の仕様について:
    HARKがサポートしている型であれば、入出力ともに可能です。例えばHARKの Vector はPythonの list と、HARKの Map はPythonの dict と対応します。注意点としては、2点ほどあります。出力する場合はデータを渡す相手ノードの入力と型が一致している必要があります。また、HARKの標準ノードと異なりパラメータ設定ダイアログを表示できませんので、パラメータを変更できるノードを作りたい場合にはjsonファイル等でパラメータ設定が起動時にロード出来るようにする等で対応をお願い致します。Pythonコード内でsocketなど用いて記述して頂ければネットワークから動的に値を設定するコードなども可能です。

    Pythonコード上での処理は自由に行う事が出来ますが、HARK側からPythonのクラスを呼び出すためGUI処理(Plot等)の書き方はやや癖があります。下記ディレクトリにPlot系ノードのサンプルがありますので参考にしていただければ幸いです。
    /usr/share/hark/hark-python3/harkpython/src/

    hark-python はPython2をサポートするための旧パッケージになります。HARK2.5までサポートしていました。HARK2.5以降は hark-python3 としてPython3をサポートする新しいパッケージを提供しています。ユーザが記述するPythonコードについては基本的に互換性がある設計ですが、Forumの回答ではインストール手順などで旧バージョン向けの説明が書かれている事が御座います。

    以上、よろしくお願い致します。

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

    SourceSelectorByDirectionノード(*1)の位置の件ですが、対象の音源方向が-50~50度の場合、下記の図のように接続してください。このように接続しますと、GHDSSにはノイズ音源方向を含むSource情報が、SaveWavPCMへはノイズ音源方向を除いたSource情報が渡ります。また、SaveWavPCMノードに初期状態でSOURCES端子はありませんので、右クリックからAdd InputでSOURCESという名称で追加して頂く必要があります。
    *1)前回、SourceByDirectionノードと誤記していました。すみません。

    SourceSelectorByDirectionノードの接続位置の例

    > これは、Kinect v2のマイクの問題なのでしょうか。
    現在、手元にKinect v2が無いため(現行バージョンのサポートハードウェアから外れたので)実機確認が取れない状況です。申し訳ありませんがご了承ください。(定位範囲の指定で機能的な不具合が無いかは現在サポートしているTAMAGO等で確認させて頂きます。修正があった場合はChangeLogに掲載されます。) 2019/06/05追記:HARK3.0.4にてLocalizeMUSICノードの定位範囲指定機能について確認致しましたので結果をご報告させて頂きます。TAMAGO03マイクアレイで機能として正常に動作している事を確認致しました。
    なお、LocalizeMUSICの定位範囲指定はパワー(ノイズを含む)が強くても定位しない範囲を設定する事を意味しますので、GHDSSなどの音源分離ノードで該当方向のノイズが分離出来ない事になります。LocalizeMUSICノードの定位範囲は制限せず、SourceSelectorByDirectionノードでフィルタする事をお勧めいたします。

    以上、宜しくお願い致します。

    Attachments:

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

    まず、お使いのサンプルファイルに同梱されている伝達関数は旧Kinect(v1)用のものと思われます。
    https://www.hark.jp/document/supported/
    より、Kinect v2用の伝達関数をダウンロードして頂き、差し替えて頂ければと思います。
    マイクのチャネル数が一致しているのでクラッシュはしませんがマイク配置は異なりますので
    今のままでは意図通りに動作していないと思われます。

    —————————————-

    下記は伝達関数が正しい場合、どのような動作となっているか記載しました。
    伝達関数をKinect v2用のファイルに置き換えてから読んで頂けますようお願い致します。

    添付して頂いた画像の音声ファイルがどのような定位結果で出力されたものか
    確認させて頂いても宜しいでしょうか。

    実行時にDisplayLocalizationノードによって定位結果がplotされていたかと思います。
    この時、「0.png」の定位結果と並行で「2.png」が定位していませんでしょうか。

    この場合、「0.png」の音声と「2.png」のノイズが分離された事になり正常です。
    SourceByDirectionノードなどを用いると音源情報をフィルタする事が可能ですので
    SaveWavPCMで音声を保存する際に自分の声の分離音だけを保存する事が可能です。

    GHDSSノードに入力する前にノイズの音源情報をフィルタしてしまった場合、
    ノイズを分離出来なくなり指向性を持たせるだけになってしまいます。
    GHDSSノードに入力するSOURCEはSourceIntervalExtenderから出力しているSource、
    SaveWavPCMに入力するSOURCEはSourceIntervalExtenderの出力を一度
    SourceByDirectionに入力し、SourceByDirectionでフィルタした後のSourceとします。

    「2.png」が「0.png」と無関係のタイミングで定位する場合。
    大量のノイズが定位してしまう場合、SourceTrackerノードのTHRESHを上げる事で
    不要なノイズを定位しないようにする事が可能です。

    もし、ご不明な点がございましたら再度お問い合わせください。
    その際、お使いのHARKバージョンとOS(バージョン込み)で情報を頂けると幸いです。

    以上、宜しくお願い致します。

    in reply to: streamの遅延時間について part2 #849

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

    まず、マイクへの入力から分離音が得られるまでの応答速度改善が主目的のようでしたので
    分離音(正確には定位区間)の前後に無音区間が入る理由から説明させて頂きます。

    前方の無音区間は、SourceIntervalExtenderノードのPREROLL_LENGTHパラメータの影響です。
    https://www.hark.jp/document/hark-document-ja/subsec-SourceIntervalExtender.html
    [ノードの詳細]の項に記載しているように、定位区間を遡って設定するための機能ですので
    前方フレームのバッファからデータを得る必要があるためノードの処理は遅延します。
    SourceTrackerノードで設定するTHRESHより大きなパワーが検出されたフレームから定位開始
    となりますので暗騒音(環境音)が少なくTHRESHが充分に低く設定できる環境では無音となります。
    初期値として500ms(50frame)を設定していますが、音声の頭が切れない範囲で小さな値を
    設定して頂くことに問題は無いかと思われます。
    注)音声認識エンジンによっては発話区間の前に僅かな無音区間が必要な場合があります。

    後方の無音区間は、SourceTrackerノードのPAUSE_LENGTHパラメータの影響です。
    https://www.hark.jp/document/hark-document-ja/subsec-SourceTracker.html
    PAUSE_LENGTHパラメータの説明に記載しているように、音源が失われてからも生存期間を
    超えるまで定位を延長します。本機能は、発話中の句読点にあたる位置や息継ぎなどで
    一時的に発生する無音区間(ショートポーズと言われる)で定位区間が分割されることを
    防ぐという目的があります。
    初期値として800[1/10frames]=800ms(80frames)を設定していますが、この値を小さく
    設定する事で発話終了後の無音区間を減らすことが可能です。長文を読み上げた際にも、
    意図しない位置で定位が分割されない範囲で減らして頂くことは問題無いと思われます。
    遅延量は減りませんが、定位区間の終了が早くなる(出力するフレーム数が減る)事で
    入力に対しての応答時間も改善されるものと思われます。

    上記の2パラメータと無関係に無音区間が頻繁に定位するような状況でしたら、
    SourceTrackerノードのTHRESHパラメータが低すぎる可能性が御座います。
    定位区間が希望通りに得られれば外部VADのオーバヘッドも不要となる事が期待されます。

    ——————–

    次に下記のご質問内容についてです。
    > 実時間処理をしない方法はないのでしょうか。
    マイク入力のようにリアルタイム入力ではなく音声ファイル(WAVファイル等)の入力のみを
    想定して高速に処理出来るか否かというご質問でしたら可能です。
    内部ではstream処理を行いますが、入力待ち時間無しで処理を行うため高速に処理されます。
    AudioStreamFromWaveノードのUSE_WAITパラメータをfalseに設定します。
    USE_WAITパラメータでtrueを設定した場合、AudioStreamFromWaveのファイル入力でも
    AudioStreamFromMicの実時間動作をシミュレーションします。この機能を無効にします。

    ——————–

    定位の精度について書かれていましたが、下記についてご確認ください。
    LocalizeMUSICノードのWINDOWパラメータを変更する際、PERIODパラメータも同じ値に
    変更されていますでしょうか。
    WINDOWが処理する単位、PERIODが処理する間隔と考えた場合に分かりやすいのですが
    PERIODが50の設定のままWINDOWだけ20に設定すると検出しない区間が発生するので、
    定位精度が大幅に悪化する可能性があります。
    特殊な用途を除いて基本的には WINDOW >= PERIOD となるようにご設定ください。
    注)PERIODを下げるほど計算量が増えますので計算が実時間内に終わらなくなり、
    かえって応答性能が悪くなる場合があります。下げすぎにはご注意ください。

    ——————–

    最後に、SourceIntervalExtenderとLocalizeMUSICの両方で遅延が起きているか否か
    については、バッファによる遅延以外(計算量の差による)の可能性も考えられますが
    もう一つの可能性として下記が考えられます。
    LocalizeMUSICノードのWINDOW_TYPEパラメータがFUTUREになっていないでしょうか。
    https://www.hark.jp/document/hark-document-ja/subsec-LocalizeMUSIC.html

    HARKはソースコードを全て公開しておりますので、お時間のある時にソースコードを
    読んで頂くと具体的な挙動などを含め理解の助けになるかもしれません。

    以上、宜しくお願い致します。

    パラメータタイプで object を選択した場合に入力可能な書式の例を挙げたthreadを立てましたのでもし宜しければご参照ください。

    threadの名前は下記になります。
    [Infomation] About the format when object is selected in parameter type

    以上、宜しくお願い致します。

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

    添付されたネットワークファイルを確認させて頂きましたところ、
    ChannelSelectorノードのパラメータが原因と判明致しました。

    添付されたファイルでは <Vector <int> 1> となっていますが、
    Vector< の間に半角スペースを含まない
    <Vector<int> 1> が正しい書式となります。

    https://www.hark.jp/document/hark-document-ja/subsec-ChannelSelector.html
    の最後に例を記載しておりますので、ご参照ください。

    パラメータを object に設定した場合の書式に関する資料が
    整備されておらずご不便をお掛けしております。現在のところ
    下記などから書式に関する情報が得られますのでご参照ください。

    • HARK-Documentのノードリファレンス
    • HARK-Designer上で新規にノードを置いた際に予め入力されているデフォルト値の書式
    • HARK-Designerでパラメータ入力欄にカーソルを合わせた際に表示されるtips等の記述

    また、エラーメッセージ等が全く表示されない件につきましては
    大変ご迷惑をお掛けしました。
    今後のバージョンにて対応させて頂きたいと思います。

    以上、宜しくお願い致します。

    in reply to: streamの遅延時間について #812

    2つのHarkDataStreamSenderが送信する構造体のHD_Headerに含まれるtv_secとtv_usecに入る値を比較します。片方はAudioStreamFromMicからの(該当フレームのAudio入力時の)タイムスタンプが入っており、もう一方はHarkDataStreamSenderの(該当フレームのSocket送信時の)タイムスタンプが入っております。

    HarkDataStreamSenderのプロトコルについては、以前の書き込みで分離音を受信されているとの事でしたので記載しておりませんでしたが下記の仕様で送信されています。
    https://www.hark.jp/document/hark-document-ja/subsec-HarkDataStreamSender.html

    頂いたデータ(jissoku.txt)によりますと、

    4行目のtypeが0x0004、countが0x0003ですのでSRC_INFOのみ接続された左側のHarkDataStreamSenderの3フレーム目となります。
    4行目のtv_sec、tv_usecにあたる場所のバイト列が 59 42 a7 5c 00 00 00 00 cc b1 05 00 00 00 00 00 でしたので、 tv_sec=1554465369, tv_usec=373196 (*1)となります。JSTになっているので+9:00されてしまっている事から、tv_secより3600*9を引く必要がありました。

    2行目のtypeが0x000c、countが0x0003ですのでSRC_INFOとSRC_WAVEに接続された右側のHarkDataStreamSenderの3フレーム目となります。
    2行目のtv_sec、tv_usecにあたる場所のバイト列が ca c3 a6 5c 00 00 00 00 53 f6 02 00 00 00 00 00 でしたので、 tv_sec=1554432970, tv_usec=194131 (*1)となります。

    2行目から4行目を引くと、3フレーム目の遅延は 820,935 [us] となります。
    各ノードで時間の取得方法に差がありGMTとJSTを比較する事になってしまい、ご面倒をおかけしますが宜しくお願い致します。

    2019/04/08 追記1:
    後で読み返して説明不足と思いましたので追記させて頂きます。
    *1) HARKの通信はドキュメント上で記載がない場合 リトルエンディアン で行っており、 tv_sec および tv_usecint64_t ですので 64 bits (つまり、8 Bytes)で送られています。頂いたログではpythonのprint関数でASCIIキャラクタに変換されてしまっているものがありましたので、上記では元のHEXバイト列に戻しております。

    2019/04/08 追記2:
    おっしゃる通りWindows版でのみ問題が起きているようです。Windows版の旧バージョンに対する修正を提供する事が現状困難ですので、Ubuntu版で対応して頂けると助かります。

Viewing 15 posts - 31 through 45 (of 67 total)