2017年4月8日土曜日

[Puredata]レイテンシー考察 その1

drugscore様よりPuredataのライブラリ内に
レイテンシーを測定するツールがあることを教えて頂き、使ってみました。
Windows版・Linux版共に
Pd\doc\7.stuff\tools\latency.pd
のパッチです。
【使い方】
パッチを開くとサイン波が出力されています。
これをお手持ちのオーディオI/Oのアウトプットから出力→インプットから音を拾って測定します。
これはWindows環境でNI社のAudio Kontrolの構成ですが、右のヘッドフォンアウトから左のインプットへ接続します。
ループさせるようなイメージの接続です。

次にパッチのWindowを見まして、
"adjust gain here"でサイン波の入力ゲイン調整できるので調整して、
"RMS amplitude in"が"RMS amplitude out"の値に近づくようにします。

これで1秒毎に"latency in milliseconds"でレイテンシーが表示されます。

それでは測定結果を見てみましょう!

【測定結果(PPTP)】
さて我がPuredata witn Pi The Pedalですが、どれほどの速度がでるか楽しみです!

写真のようにインプットとアウトプットとループさせまして、、
(オシロの校正みたいだな、、)
Puredataは
Samplerate:44100
Block size:64
の設定にしてみて、Delay(msec)を変えて測定してみます。

以前の記事で「聴感上の」測定では、設定を切り詰めても10ms強かな、、
という印象ですが果たして結果は、、

Delay(msec):20で
測定結果は34ms。




Delay(msec):11で
測定結果は23ms。

ん、、予想より遅い。いやまあ前回の測定では自分の耳が腐ってちょっと良く盛ってたと思えばそれまでの事(悲)

次にWindowsの測定に取り掛かります。

【測定結果(Windows)】
こちらは
Windows10
Audio Kontrol
の構成です。
普段パッチの紹介動画はこれにWindows10標準搭載のXbox動画撮影機能で撮影しています。
いつもレイテンシーが厳しくて録画に苦戦しています。

以下のPuredataのオーディオ設定で測定しました。
Samplerate:44100
Block Size:64
Delay(msec):30
これよりDelayを下げるとバッファが切れます。

その結果、、
レイテンシーが101ms!?
PPTPより遅いとは認識していましたが、いや幾らなんでも遅すぎる、、
これでは動画を撮りながらギターを弾くのはいくらなんでも無謀すぎます。。

このパッチ、レイテンシーの測定以外にもバッファ切れの測定もしているので
ひょっとすると正解よりも多めにでるのかも?

測定パッチの中身も覗いてみました。

del 800
|
snapshot~
|
* 1000
|
float(レイテンシーの数値表示)

レイテンシー表示の直前にdel 800という怪しい記述あり。
おそらく数値の調整で入れているとは思われますが、、
また、こちらの記事ではALSAを使うと10msを切れるのかもしれません。

というような、謎な事もありまして、
バッファ切れは度外視して、
短いパルス1発撃ってレイテンシーだけ測定するような
シンプル設計の測定方法に改造できないか妄想中です。



※前述の「聴感上の」測定ですが、
Audio Kontrolにはダイレクトモニタリング機能が付いています。
これとDSP処理後の音をミックスすれば①単発ディレイが掛かっているような音になります。
この音を聴き、Puredataにはdelwrite~とdelread~があるので、
(よほど短いレイテンシーでなければの条件付きですが)
Puredataで作成したadc~から入った音+数msのディレイ音を②ミックスします。

①②を比べて似たような遅延音になったあたりがおよそのレイテンシーという、
ものすごく曖昧な人力測定を行っておりました。

あながちlatency.pdの測定結果は間違いではなさそうです。
パルス1発撃ってみる試験を実施するとほぼ同程度の結果になります。
次回分で内容掲載します。

0 件のコメント:

コメントを投稿

[Pduino]タップテンポとテンポに合わせてLED点滅

[Pduino]エフェクトOnOffを物理スイッチで制御&LEDの点灯・消灯 こちらの記事で紹介した、 上記の物理的な回路ですが、 少し工夫を加えれば、 モーメンタリースイッチのタップでテンポ計測し、 テンポに合わせてLEDを点滅させることができます。 ...