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(オブジェクトが重複して登録されて呼び出せません)」のエラーが頻発します。
余力あればいつか外部オブジェクトの導入方法を記事にしたいです。

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

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