2017年4月25日火曜日

[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作るのがだんだんアホ臭くなってきたというオチです。


[機材]Boss Mega Distortion MD-2 MOD

こちらの記事 で無改造のVanillaを紹介していますが、 今回紹介するのは自分で改造したものです。 紹介動画は以下。 内容は、 Vanillaの低音域が効きすぎて少々使いづらかったので 1:低音をカット(ただしゲインも少なくなるので) 2:ブースター...