2017年4月25日火曜日

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

[Pduino]エフェクトOnOffを物理スイッチで制御&LEDの点灯・消灯
こちらの記事で紹介した、
上記の物理的な回路ですが、
少し工夫を加えれば、
モーメンタリースイッチのタップでテンポ計測し、
テンポに合わせてLEDを点滅させることができます。
エフェクターでいうとタップテンポのディレイ等に応用できます。
※モーメンタリスイッチはクリック感の少ない、軽快に押せるものがオススメです。
深くしっかり押さないといけないタイプだと苦しいです。


タップテンポの計測方法はこちらのフォーラムを参考にしました。

Puredata側はこのようなパッチになっています。
一番左のフローは急造で作ったディレイ回路なのでスルーするとして、
ポイントは右側の[arduino]に繋がるフローです。

左上の[receive Tempo]から[arduino]に繋がるまでの回路は、
LEDをテンポに合わせて点滅させる回路です。
[metro]で点滅させますが、消灯処理が必要になるため、
[delay 10]
|
[digital 13 0(
で消灯させます。
また、[metro]の手前にBangボタンがあるのは、
 テンポが変更した際にLED点滅の挙動がおかしくなるため、
テンポの数字が変更した際に合わせて[metro]をリセットするようBangしています。

[arduino]から下のフローはモーメンタリスイッチのタップでテンポを検出する回路です。
[change]の直後はタップする度に
押した瞬間:1
離した瞬間:0
を吐き出すため、
[moses 1]で1だけを抽出し[trigger b b]に送ります。
後のタップテンポの仕組みはPuredata Forumの通りです。
ここで得たテンポをそのままLED点滅の回路とディレイタイムの回路へ送れば完成です。

※まだ、[trigger]の使い方が自分はヘタクソです。理解が足りない、精進せねば。


[Pduino]エフェクトOnOffを物理スイッチで制御&LEDの点灯・消灯

[Pduino]Lチカと応用(エフェクトOnOffのLED点灯)
[Pduino]物理スイッチでのエフェクトOnOff

まとめとして書きますが、上記2つの記事の内容を合わせれば、
エフェクトのOnOffを物理スイッチで切り替え、更にその状態をLEDで点灯・消灯して表現できます。


右側がエフェクトOnOffの回路で、左側がLED点灯・消灯の回路になります。

[Puredata]スライダーのliner増減をlog増減へ変換する[Pduinoでも可]

今回の記事はPuredataのスライダーの増減量をlinからlogに似非変換するTipsです。


上の写真のとおり、スライダーは増減量をlinとlogで選べます。
スライダーのプロパティから変更できますが、
以下の場合では使いづらい場合があります。

・物理的なポテンションメーターは付けてしまえばlogとlinを変更できないが、
エフェクトに合わせてlinとlogを切り替えたい場合

・Puredata内のスライダーについてもスライダー自体は共用にして
複数のエフェクトに合わせてlinとlogを切り替えたい場合

さてこの場合、どう対処するかですが、
ひとまず物理的なポテンションメーター、Puredata内のスライダーを問わず、
Bカーブ(lin)を使ってください。
ポテンションメーター等の変化の範囲が
0≦x≦1
0≦y≦1
の範囲限定になりますが、
以下のカーブのようにそれっぽくではありますが簡易に変換できます。

Bカーブ(liner)
Y=X

Aカーブ
Y=X^3

Dカーブ
Y=X^2

Cカーブ
Y=1 - (X-1)^2


これで可変抵抗を買うときに困ったら、ひとまずBカーブ(liner)で対応できます。

※ただ、Puredataの実際のlogの増減のカーブは
Dカーブよりももっときつい増減な気がするので改良が必要かも。

[Pduino]物理スイッチでのエフェクトOnOff

※完全に自己流のため、他に上手いやり方がありましたら是非ご連絡ください。

物理スイッチには色々種類がありますが、今回は単純に1回路をOnOffするスイッチで
エフェクターの機能を再現できるか考えてみました。


スイッチには
オルタネート(押すたびにOn・OFFが入れ替わる)
モーメンタリ(押している間だけOn。離すとOff。)
の2種類があります。
それぞれPuredataでエフェクトのOnOffをする際には工夫が必要です。

今回は

5V

スイッチ

アナログインプットA0(pinMode 54)

で接続してテストしました。
Puredata側のエフェクト回路の部分はいつもの簡易ディストーションに自作のspigot~です。


【オルタネートスイッチの場合】

フットスイッチやスライドスイッチ、トグルスイッチで入手が容易です。
押しボタンタイプもまぁ、無くはないです。

さて、考えた回路はこちらです。
まず、いつも通りポートを
[open 3(
で開けまして、
[pinMode 54 analog(
でアナログ入力 A0(arduino Megaの場合)を使えるようにします。

この状態でスイッチをOnOffすると
[arduino]
からメッセージが「常に」出力されます。
試しにprintでコンソールへ出力してみます。

Offの場合、
print:analog 0 0.2前後


Onの場合、
print:analog 0 0.9前後

analog は アナログ入力
0 は 端子番号
その後の数字は物理的な回路の状態により0~1までの間で変化・受信した値です。

※注意すべき点は、
端子を使えるようにするときは、すべての端子から数えた順番の
[pinMode 54 analog(
だったのに対し、
出力されるメッセージでは
analog 0 0.99
とアナログ端子内での順番に代わる点です。
上手く出力できない場合は見直してみてください。


必要な値は最後の0~1の値なので、他の不要な情報は
[route]
で削除します。
(入力された値にrouteで指定した文字があれば削除して左インレットから出力)
更に、値が常にフラフラ揺れるため、
>= 0.5
で値を1 or 0に置き換えて、EffectOnを制御するトグルボタンに送ります。
これでオルタネートスイッチの場合のエフェクトの切り替えはできます。

※もし、常に値がトグルボタンへ送られるのが気になる人は後述の
[change]
を使ってみてください。




【モーメンタリスイッチの場合】
押している間だけONになるスイッチです。
押しボタンタイプだと入手が容易ですが、
フットスイッチタイプは強度的なものもあり、
なかなか見つけづらそうではあります。

さて、モーメンタリースイッチの場合のPuredataの回路はこちら。
[>=5]
まではオルタネートスイッチと同じですが、
常にBangを打つが如く、フラフラ1 or 0の値がトグルボタンに向けて飛ぶため、
エフェクトOnOffの動作が不安定です。
このため、
[change]

[bang]
を間に挟みました。
これで動作が安定します。

※解説しますと、
[change]
は違う値が飛んでくるまでは、同じ値が飛んできても「何も出力しない」オブジェクトです。
違う値が飛んできて初めてその値を「1回だけ出力」します。

そしてこの後ろに
[bang]
を置きます。
エフェクトonのトグルボタンはbangが打たれる度にOnOffを切り替えするためです。

2017年4月24日月曜日

[Pduino]Lチカと応用(エフェクトOnOffのLED点灯)

この記事では定番のHello World!的なLチカを扱いますが、
それだけではつまらないので、実用的なエフェクトのOnOff用のLED点灯を考えてみます。


基本的なArduinoの接続と端子の指定方法
【Arduinoとの接続ポートを調べる】
arduinoオブジェクトにメッセージで
[devices(
を送ってください。
コンソール画面に接続されているポートの番号がでます。


【ポートを開く】

先ほど分かったポート番号を使います。
更にメッセージ
[open ポート番号( 
を送って下さい。
これでPuredataからArduinoを使う準備ができました。


【Arduino側で使う端子を指定する】
[pinMode 端子番号 output(
のメッセージを送ります。
上記は「端子番号」の「Output(アナログ出力)」を使うという意味です。




LチカでHello World!

物理的なつなぎ方の回路図は後程UPします。
物理的なつなぎ方は以下の通りです。
アナログ出力の13番端子

LED

抵抗

GND
の順に繋ぎます。
LEDを使う際は100~1kΩ程度なら何でもいいので必ず抵抗を入れてください。



メッセージで
[digital 13 $1(
と書いて、トグルボタンを接続します。
そしてメッセージをarduinoに接続します。
トグルスイッチはOnで「1」、Offで「0」を出力します。
$1は変数。トグルスイッチの1or0が入ります。
トグルスイッチを操作する度に [digital 13 $1( のメッセージがarduinoオブジェクトに飛んでいきます。
これで1のときに電流が端子から流れ、0のときに電流が止まります。
なお、
[digital 13 $1(
の13は
[pinMode 13 output(
で指定した端子番号13です。



エフェクトOnOffでLEDを点灯消灯させてみる


上のようにシンプルなディストーション回路でエフェクトOnOffをします。
[pd spigot~]はPd-extendedにある[spigot~]と機能的に同じで私が作成したものです。
作り方の記事についてはこちら
トグルスイッチOnでLED点灯と共にディストーションがOn、
トグルスイッチOffでLED消灯と共にディストーションがOffになります。

[Puredata]vanillaでspigot~を再現する

Puredata-extendedだとspigot~という便利なシグナル切り替えのオブジェクトがあるのですが、
Vanillaだとありません。
ただ、Vanillaでも簡単に再現できることと、
応用すればすぐにラジオボタンでの切り替えにも対応できるのでVanilla機能で作成することをおすすめします。

まずはじめにシンプルな、トグルボタンで切り替えできるspigot~から。

たったこれだけ!
[== トグルボタンの数字]
で1か0かを出力して、そのままシグナルにボリューム調整で*~するだけです。

なお、トグルボタンとラジオボタンの動き方はこちら。



これをもとにさきほどのspigot~も少し応用すれば、、
シグナル3フロー切り替えできるようになります。

2017年4月17日月曜日

[Puredata]ArduinoとPduino その2

ここではArduinoとPuredataのセットアップについて書きます。

まずArduinoとPC、USBケーブルを用意してください。
念のためまだArduinoとPCは接続しないでください。。

私はArduino Megaの互換機を使いますのでそれ用に書きますが、
UNO等、他の機種を使う場合は読み替えてください。

【①Arduino IDEのダウンロード】
Arduinoのプログラムのコード書いたりコンパイル・Arduinoのメモリへ書き込みしたりするソフトウェアです。
これをダウンロード・インストールしてください。
Arduino - Software


【②ArduinoにFirmataをインストール】
FirmataというプログラムをArduinoのメモリに書き込みインストールします。
ArduinoをUSBでPCに繋いでください。
ArduinoのLEDが点灯してればOK。

次に先ほどインストールしたArduino IDEを起動してください。結構時間掛かります。

メニューバーより
ツール>ボードで「Arduino/Genuino Mega or Mega 2560」を選びます。
次に
ツール>シリアルポートでCOM3「Arduino/Genuino Mega or Mega 2560」を選びます。
COMの番号は環境によって違うかもしれません。
このCOM番号、覚えておくと後で役立つかもしれません。

メニューバーより
ファイル>スケッチ例>Firmata>StandardFirmataを選びます。
Firtamaのソースコードがウィンドウに表示されます。

最後にFirmataのプログラムをArduinoのメモリに書き込みます。
メニューバーより
スケッチ>マイコンボードに書き込む
を選んでください。
ちょっと時間が掛かります。書き込み完了まで待ってください。

書き込み終わったらArduinoは設定完了です。
まだセットアップありますが、後はPuredataにPduino(と名前ついているが「arduino」というオブジェクト)を別途導入するだけです。


【③Pduinoのセットアップ】
Pd Objectclasses
このサイトの
Pduino object + Firmata firmware
の項目から
Download Pduino-0.5.zip (Pd object and examples + Arduino library and examples)
を選んでダウンロードします。

Zipファイルを解凍して使うのはarduino.pdだけです。(他は動作確認のサンプル)
使いたいパッチと同階層のフォルダ内に置くか、
他の外部オブジェクトのようにC:\Program Files (x86)\Pd\extraフォルダに置いてください。

あとは適当に新規でPuredataパッチを作ってオブジェクトで「arduino」を作るだけで準備完了です。


・・・と言いたいところですが、arduino.pdを使うために、
更に呼び出しが必要な外部オブジェクトの導入が必要です。
ざっと中身を見た限りでは

外部オブジェクト群
zexy
mapping
cyclone

単品の外部オブジェクト?
comport

が必要です。
このためPuredata vanillaで使おうとすると物凄い量の
「...can't create」エラーをコンソールで吐きます。
これらの外部オブジェクトの導入が終わっていればこの限りではありません。

※外部オブジェクトの導入ですが、私、得意ではないです。
「...can't create(読み込めなくてオブジェクト作れません)」や
「duplicate(オブジェクトが重複して登録されて呼び出せません)」のエラーが頻発します。
余力あればいつか外部オブジェクトの導入方法を記事にしたいです。

[Puredata]ArduinoとPduino その1

自分もド素人で詳しくないですがArduinoはマイコンと呼ばれるものです。
(マイクロコンピュータなのかマイクロコントローラなのかよく分かりませんが、、)
Puredataに限らず、プログラムとArduinoを組み合わせて色々工作する記事をネットで見かけます。
当ブログでは、Puredataと併用した、ギターエフェクターに特化した内容で書こうと思います。



【ArduinoとPuredataで何ができるの?】
WindowsPCでPuredataを使ってエフェクターを作る場合、GainやToneの調整にスライダーをオブジェクトで置きますが、
実際のエフェクターのように物理的なツマミをひねって操作したいと思いませんか?
また、エフェクターのON・OFFに合わせてLEDを点灯させたり、
ディレイのタップテンポに合わせてLEDを点滅させたり、
はたまた、ボタンをタップしてPuredataにテンポ情報を送ったりできたら素敵です。

WindowsPCだとマウスとキーボード(または高価で仰々しいMIDIコントロ-ラ)で操作することになりますが、
Arduinoを使うと幾つかのパーツ組み合わせで自分に合った物理的なコントローラやセンサーを作成できます。


【Raspberry PiでArduinoをわざわざ使う理由】
Raspberry Piでも搭載のGPIOピンにスイッチやLED付けたり、可変抵抗+ADコンバータICの組み合わせでArduinoと似たような事が出来る、、、のですが、
IC1個使うにも電源供給が要りますし、GPIOを制御するのにPython使ったりと、
とにかく面倒です。

(Puredataでもいくつかの拡張オブジェクトのインストールが必要になるものの)
Arduinoを使うと導入は遥かに難易度が低くなります。
私が思うに以下のメリットがあります。

・実際に使うときはPuredataのプログラミングだけでセンサー類の操作や可変抵抗のデータの受信ができる。
・Raspberry PiのGPIOピンを使わなくて済む。LEDディスプレイでピンを使い切ってしまっていたりしても、ArduinoならUSBポート1個で済みます。
・こういった効果を考えると、Arduinoの導入は時間や労力の費用対効果が(特に安価な互換機なら)大変高い。

エフェクターでの使用でのデメリットとしては
・Arduinoの設置スペースやUSBケーブルの取り回しの分だけケースのハウジングに苦労する。

、、、くらいしか思いつきません。
このデメリットも小型でmicroUSB使えるものをチョイスすれば幾らか解消すると思います。




【とりあえずどのArduino買えばいいの?】
Amazon探すと本家の純正品や安価な互換機(ものによっては500円切ってる!)がありますが、
あまり安いものを買うとUSBでの接続にドライバが要る機種や、
ハンダが甘い初期不良で出くわすことがあるようなので、
そこそこ安い互換機がねらい目です。

自分はPPTPがGUI付きで既に巨大化がほぼ確定しているため、
Arduino Megaの互換機を選びました。
ちなみにこの機種についてはWindows10およびRaspbianでドライバ無しにUSB接続で認識します。


ここのメーカー、定番のUNOやMicroの互換も1000円前後なので1台とりあえず買っておいてもよさそうです。



【番外編】
 
Raspberry PiでLEDチカチカとか赤外線モジュールとかもやってみたい人にはこれオススメ。
安いなりの質(ブレッドボードが若干曲がってる等)ですが一杯パーツが入ってます。
お買い得なのは40ピンT字型GPIO拡張ボードが入っているところ。
某所で同等のものを買おうとするとこのセットと同じ値段くらいします。

2017年4月16日日曜日

[PPTP]帰ってきたオーディオインターフェースの選定 その2

いきなりですがZOOM U-22を買いました。



いままではNative InstrumentのKOMPLETE AUDIO 6をWinows用に使ってます。
(ごめん、動画で誤記載してますがずっと"AUDIO KONTROL"という名前だと思ってました)

これも長いこと使っているので(もう4年くらい前?これ以来NI社からI/Oの新商品出てるのか、、?)新しいI/Oを試したかったのと、
PPTP用にU-22使えるならやってみようと購入。
さてRaspberry Piではこの両者、どうなのでしょうか?

以下、人柱的なコメントなので試す方は自己責任でお願いします。
結論としては両方とも認識して使えます。
レイテンシーは正直、Behlinger UCG102と大して変わらないです。
(Behlinger UCG102の記事はノーマルカーネルリアルタイムカーネルの2つあります)
こうして考えるとUCG102はもし中古で買い叩けるならコスパ高い。


【Raspbianでの互換性】
U-22もKOMPLETE AUDIO 6も使えました。
KOMPLETE AUDIO 6についてはNI社からLINUX互換性あると情報公開されています。
設定もWindowsライクにGUIから設定でき、PuredataでもALSAで使えます。

さて、U-22ですが、ZOOM公式ではLINUX対応しているかどうかも情報ありません。
しかしながらWindos(これだけドライバ要)・MacだけでなくiOSで動作します。
「これ、USBクラス・コンプライアント対応かもしれん」
特に公表されている情報無いですが上位機種は対応っぽいです。
よし、使ってみよう!


使いました!ちょっと特殊ですが「Puredataなら」すぐ使えます。
VNCでスクリーンショット取りました。
写真左上部を見ると分かるとおり、USBで挿してもタスクバーではそのまま認識されません。
(やり方あるかもしれないですか)

ただしPuredataを立ち上げると認識・デバイスを選べるようになっています。
ALSAで使うと快調です。
JACKは知らない。設定ヘタクソなのですぐ音飛びしてしまいます。


【レイテンシーについて】
正直、UCG102もKOMPLETE AUDIO 6もU-22もトントン、といった感じです。
U-22はNO-GUIでパルス撃つ試験したので載せておきます。
Samplerate:44100
Block Size:64
Delay:6

レイテンシー:16ms




さて、PPTPでは何のオーディオインターフェースを使うか迷うところですが、
UCG102かU-22になりそうです。
KOMPLETE AUDIO 6は大きすぎる・高価なので却下。




【PPTP向けUSBオーディオインターフェースのまとめ】
レインテンシーはUSB2.0で使うぶんにはどれもトントンです。
どれもドライバ無しで挿せば少々の設定すれば動きます。
USB3.0? Raspberry PiのUSBポートが対応してない。





【感想】
・マイクイン(3V程度のコンデンサマイク用直流がRingから出てるのでギターをそのまま挿せない。改造ないし変換プラグを一考する必要あり)
・ヘッドフォンアウト(アンプに挿すにはパッド入れる等しないと調整大変)
・そのため改造要るが、いかんせん外装が滅茶苦茶硬い金属製。
・それと反対に、脆いジャック。取り外そうとハンダ吸おうとしたらプリントパターンごと剥がれて難しい程度に。
その代わり失敗しても痛くないくらいコスパ最強。時間と苦労を厭わない人向け。
・音は値段相応ですがエフェクター用途で使うならそんなに悪くない気がします。
更にインにバッファ入れたり・アウトにパッドやフィルタ入れる等の改造次第で化けそうな気もします。




【感想】
・Hi-Zインが付いてそのままギター挿せるUSBオーディオインターフェースの中ではたぶん最小。
・ヘッドフォンアウト(アンプに挿すにはパッド入れる等しないと調整大変)
・外装の分解が簡単(3点ネジ止め)
・このためジャック交換程度の改造は楽。
・音はエフェクター用途ならいいと思う。むしろヘッドフォンアウトの音が意外と素直。
・以外と高いので中古で探そう。




【感想】
・Hi-Zインが付いてそのままギター挿せるUSBオーディオインターフェースの中ではたぶん二番目に小さい。まだ手のひらサイズ。
・ヘッドフォンアウト(アンプに挿すにはパッド入れる等しないと調整大変)
・でもラインアウトもある。ヘッドフォンアウトよりは調整が楽?ただしLRのRCAメス。
・ちょっと高い。でもUCG102を定価で買うくらいならこっちでもいいかも。迷う。
・ネジが見当たらない。分解し辛そう。変換プラグで頑張る人向き。
・何気に24bit。96kHzにも変更できる(がレイテンシ増えます。仕方ない)
・音はちょっとクセがあります。ZOOM独特の硬い音?妙なバッファなのか、この辺の味付けはG2.1uから変わらない。



2017年4月13日木曜日

[PPTP]帰ってきたオーディオインターフェースの選定 その1

Raspberry Pi用のオーディオインターフェースを再び探す旅に出かけます。
今回はウチにあるもので試験しましたが失敗です。
ただ、面白いデータも取れました。
続きが読みたい方はどうぞ。


さて、
PPTP(Puredata with Pi The Pedal)Mk Iオーディオインターフェースで使用しているものは、Behringer UCG102です。

ただ、こいつは既に製造年も4~5年落ちと古く、
チップもC-Mediaの古いもので長方形のチップが乗っています(型番は掠れてて読めない)

このため更なる音質・レイテンシー改善の向上を目指して
再びオーディオインターフェースを探しています。

ちなみにRaspberry Piエフェクターでよく使われている
Plugable USB オーディオ変換アダプタはC-Mediaのエントリーモデルですが
新しいチップHS-100Bが乗っており、PuredataではNo-GUIでレイテンシー12ms強まで短縮できるようです。



でも、これ以上のレイテンシーを縮めるのはUSB2.0やチップ性能も検討しないといけない気がしてきました。
物色してますがなかなか小さい筐体でよい物を見つけるのは至難の技で、
しかも大抵Linuxでの動作実績はありません。

というわけでまだ時間が掛かるのですが、
手っ取り早く我が家にある機器で使用可能か調べました。

ZOOM G2.1u
もはやディスコンで調べてみたら10年前!?のマルチエフェクターですが、
当時としては斬新なUSBオーディオインターフェースが付いているという太っ腹です。
付属のCubase LEなんか未だに使っとるがな。
音質の好き嫌いが結構でる機種でもあったのですが、、
で、いつものパルス試験を実施しようとしました。

ですが、RaspbianではUSB機器でALSA認識はすれども
Delyaやバッファをいくら増やしても音切れが止まらず失敗。

ん~こりゃ難しいかなと思ってましたが、
測定環境を組んでいたので
USBオーディオとしてではなく、エフェクターとして測定してみました。
改めて構成は。。

オシレータ

G2.1u(すべてのエフェクターOFF設定)


WindowsのオーディオI/O

そして測定結果が、、
ん、、0.3~、、、4ms、、
ほぼゼロでない?

当時でも滅茶苦茶レスポンスが速いという謳い文句だったと思いますが、
あまりの爆速にPPTP Mk2作るのがだんだんアホ臭くなってきたというオチです。


2017年4月12日水曜日

[PPTP]Raspbianのreal-timeカーネル導入とPuredataのレイテンシー効果

表題の通りです。
とりあえず設備導入しなくてもすぐできるところから試してみます。

optimize — Pd Community Site - Pure Data
にて
Realtime, low latency kernel patches (does not apply to PPC achitecture!)
とあるので導入しました。
結果:あるような、ないような。。
以下、長文なので興味ある方のみ読んでください。


Real Timeカーネルの導入方法はたぶんこちらのサイトが一番楽です。
といいますか、あっさり導入できました。
ただし、一度私、失敗してRaspbianが立ち上がらなくなったことがあるので、
SDカードのイメージのバックアップは取っておいてください。

$ uname- a
を叩いてコンソールの返したカーネルの内容が
導入前:Linux raspberrypi 4.X.XX-vX+
導入後:Linux CuiPi3 4.4.4-rt9-v7+ #7 SMP PREEMPT RT 
rtとPREEMPT RTあればOK。
また、導入後はraspi-configで更新掛けるとカーネルが元に戻るらしいので要注意です。

Real-Timeカーネル導入しまして、
以下の状態でパルス撃つレイテンシー試験しました。



【VNCでX起動したGUIあり】
Samplerate:44100
Block Size:64
Delay:9(11から短縮できました。)
とりあえず音切れ無いところまで調整して
レイテンシー20ms

RTカーネル導入前は
Delay:11
でレイテンシー:22ms
なので僅かながら効果ありました。



【NO-GUIで】
Samplerate:44100
Block Size:64
Delay:8(ノーマルのカーネルだと6で音切れしないギリギリでしたが増えた!?)
*.pdsettingsを弄って-nogui -rtオプションを付けています。

レイテンシー17ms
前回から2ms増加です。
no-guiで一番恩恵が得られそうな気がしていたのですが、そうでもない模様。

もっと設定追い込まないといけないのかもしれませんが、
自分の小手先の設定変更ではレイテンシーは縮まりませんでした。


ただ、ひょっとするとこちらの記事の結果をみるに
Realーtime Kernelのほうが不慮の音切れが減って安定するのかもしれません。


2017年4月11日火曜日

[PPTP]Puredata with Pi The Pedal Mk IIの作成開始

唐突ですがPuredata with Pi The Pedal Mk IIの作成開始しました。



まず始めに現在?のMk Iの構成は以下の通り。
Raspberry 3にGUIもPuredataの音声処理もやらせています。
【メリット】
PuredataパッチがWindows PCで作成したものをそのまま走らせるので
パッチ入れ替えなどメンテナンス・運用が容易

【デメリット】
X Window含めたGUIの処理も音声処理もRaspberry Pi3単独でやるので
レイテンシーが発生。


さて、Mk Iの物理構成でGUI有りと無しでパルス撃つ簡易試験を実施しました。
いつものこのパッチでサイン波を送り込みます。

結果はこちら。(GUIありは前回の結果そのまま転載しています。)
設定
Samplerate:44100
Block Size:64
Delay:11ms

レイテンシー:22ms

検証ではX起動状態でPuredataを使うとレイテンシが増加するので
次はX Windowは切って、コンソールでpd -nogui test.pdで同様の実験をします。

設定
Samplerate:44100
Block Size:64
Delay:6ms
レイテンシー:15ms

ちょっと縮まりました。
これ以上はUSBオーディオの性能と思われます。


さて、話は戻りましてMk IIですが、
相変わらずGUI操作の利便性は捨てきれなかったので
以下の図の構成を現在作成中です。
我が家で余っているRaspberry Pi 1をGUI処理・タッチパネル操作のみの仕事をさせ、
LANケーブルで繋いだRaspberry Pi 3はNO-GUIで音声処理をさせます。
まだ音出しできる状態ではありませんが、
Pi1からPi3へのnetsendとnetreceiveは成功しました。
Pi1のCPU負荷が100%に跳ね上がりますが、
GUIの動作やOSCもサクサク動いているようです。

ちなみにこのやり方、
optimize — Pd Community Site - Pure Data
The poor man's multithreading!
のあたりにOSC使っちゃえよ!とあります。


まだたくさんやらないといけない事がありますが、
まだRaspberry Piでは見かけない構成なので引き続き細々とやりたいと思います。

[以下、やりたいこと備忘録]
・イーサネットコンバータ化(現状LAN繋ぐと外部のWindowsPCからsshできない)
--->使うWiーFiアダプタでうまくブリッジ化できないかもしれない。
raspberry pi3側をGUI(イーサネットコンバータ化)にしてraspberry pi2側をCUIにしたほうがいいかも。


・Raspberry Pi3側のreal-timeカーネル導入(1回失敗したが再チャレンジしたい)
--->余り効果なし。場合によっては不安定になる。


・ケース作り(Mk Iのケースでは既に収まらない!サイズほぼ倍になるかな?)
--->Arduino Megaのコンパチでスイッチやロータリーエンコーダーをなんとか使えるようになりました。


・USBオーディオI/O探し(予算と候補があれば。こっちの記事ではトラブってますがzoomのU-44をLinux mintで運用している模様)
ーーー>U-44でもUSBオーディオとALSAではレイテンシーに限界があります。
そこで、紹介してもらいましたWM8731のサウンドカードを使います。
レイテンシーは速く良好です。しかしraspberry piから電源を取るとノイズを拾う模様。
そこでサウンドカードの電源3.3Vを個別に用意したのですが、何故かサウンドカードを認識しません。う~ん。。

2017年4月9日日曜日

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


前回までのあらすじ

[PPTP]セットアップとレイテンシーについて

2回の記事で、体感上のレイテンシーよりもPDのツールで測定したレイテンシーが遥かに高いので何が本当のレイテンシーか分からなくなってきたところで終了。

その後、こちらのシンプルにパルスを打つ測定法も試しましたがPD謹製のツールとレイテンシーが変わらず苦悩しました。
→結果としてこの後書く、ほぼパルス撃つ試験と同成績になります。正解です。


そして悟りを開いた結果、
「そうだ、自分で測定パッチを作ろう」
→失敗しました
最下部に前回記事だけ残しておきますが、
微弱な信号?ノイズに反応して測定開始するというピーキーなパッチでした。

drugscore様に良い試験方法を教えて頂き、
PPTPで実験してみました。

オシレータだけスマホでサイン波を用意している以外は構成は同じ方法です。
【バイパス構成】

この構成で実験しました。
Samplerate:44100
Block Size:64
でDelayだけ変えてみます。
Delay20msで35ms


Delay11msで22ms

うん、自分の耳がおかしかっただけで、測定結果はツールとほぼ同じ(哀)
Delay弄ればレイテンシーも実は変化していたというオチでした。


【実際のパッチ運用構成】
悲しいオチでしたが、いい試験方法が見つかったので、
今度は実際に使っているエフェクトパッチを運用するとどれ位遅延するのか測定しました。
用意したパッチはこちら。GUIの順番がバラバラですが、全部直列に繋いでいます。
順番は、、
Adjust adc~(入力レベル調整)*

NoiseGate信号検出側パッチ*

WahWah

Tube Scuttle OverDrive

V8custom Preamp

Cabinet EQ

NoiseGate動作パッチ

Cabinet Air(中身はほぼディレイ)

専用dacパッチ*

*は接続の関係でバイパス時も常にOnです。
Puredataは
Samplerate:44100
Block Size:64
Delay:11ms
で設定。。


23ms。1msくらいは誤差でるのでadc~→dac~直結の最小構成と考えてもほぼ同じ遅延。
速い!


Preampを追加でOn。
23ms。
フィルタやexprでクリッピングを多くしてますが、バイパスと変化無く、
思っていたよりも速い。



Preamp + Cabinet EQ & AirをOn。
Airは単発とはいえショートディレイ使っているので遅いかとおもいきや
23msとまだ変わらず。



NoiseGate動作パッチ以外はワウもオーバードライブも全部On。
ここで25msとすこし遅延が増えました。
NoiseGateもOnにしました。
35ms。閾値を大して調整してなかったせいもありますが
一気に遅延したのでNoiseGateはまだ改良の余地があるかもしれません。


以上、パッチの実際の運用を含めてレイテンシー測定しましたが、
Puredataでの処理自体は高速なので遅延はあまり気にしなくてよさそうです。


********************************************************







【以下、自分でパッチを作って失敗した例】
→完全に失敗作でしたが、env~とmoses使ってシグナル検知する方法を使っています。
もう少し閾値を高く設定しておけば誤差も少なかったと思われます。


自分の思っているレイテンシーと謹製パッチの測定結果で違和感があるのは、
これぐらいシンプルで、弾いたギターの生音とヘッドホンから出てきた音のレイテンシーが知りたいのですが、
謹製ツールはやたら複雑なオブジェクトが多く、処理が重い分レイテンシーが水増しされているんでは?と考えたからです。
実際に使われている、アタック検出するbong~ですが、
これ2個をならべてtimerで測定した簡単な測定パッチを作っても結果は謹製パッチとほぼ同等になります。
どうもシビアな測定をしようと思うとこのあたりがボトルネックになっていると考えました。





考えました!雑!
(でもやり方に疑問あるかたはご指摘ください!むしろいい方法を教えてほしい!)
できるだけ軽そうなオブジェクトを選んでみました。
試験音は立ち上がり検出の速いphasor~で。
実際の測定方法は写真のStartのBangではなくdac~直前の
env~
|
moses 1
|
bang
|
timer
です。
このあたりはギターのストローク開始ではなく、ギターの弦にヒット・発音したというのをイメージして、ここからスタートとしています。

本当はthresholdでbangしたかったですがうまくbang出来なかったので、
mosesで代用しました。
何発か無駄なbangしてしまいますが、しかたがない。

さて物理ケーブルでアウトプットからインプットまでループして戻ってきたら、
同様にmoses でbang打ってtimerを止めます。

計測結果はコンソールにプリントアウトします。
これはStartのbangが何発か無駄弾を打つので測定結果を上書きしないようにするためです。

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


【測定結果(Windows)】
Samplerate:44100
Block Size:64
Delay:30
で何回か測定。。

70ms



81ms(中段付近。コンソールリセットせずに測定しました。見づらくてすみません)






81ms







58ms!?


WindowsでMMIOのせいか、だいぶんバラつきがでます。
でも謹製ツールより若干短くなります。


【測定結果(PPTP)】
こちらも
Samplerate:44100
Block Size:64
で測定してますが、Delayは変えています。
若干無駄Bangと入出力レベルの調整不足で0msを吐いていますが、
なかなか面白い結果がでました。




 Delay:5で11.6ms(音飛ますが一応測定するとこうなります)



Delay:11で11.6ms
Delay:20で11.6ms


さすがに11.6ms以下の結果も揃いすぎてるのは気持ち悪いですが、
PPTPはDelayを変えても聴感上のレイテンシーが変わっていないという体感は
あながち間違いではないのかもしれません。

[PPTP]バッファの電源ノイズ削減のテスト

一回、回路の全体図をまとめたほうがいいような気がしてますが、 (実はブツッブツッと鳴る明らかに使用に堪えないマズいノイズが乗った際に、 各箇所のGNDを、 電源の最上段のGNDにまとめて繋いでいる のです。。) こちら の冒頭にてRaspberry Piのノイズ削減テス...