ラベル Puredata の投稿を表示しています。 すべての投稿を表示
ラベル Puredata の投稿を表示しています。 すべての投稿を表示

2017年11月17日金曜日

【Puredata】ノイズゲートの作り方・考え方の備忘録【Noise Gate】

こちらにて作成したノイズゲートの仕組みについて簡単に解説します。
自己流なのであまり細かいところはツッコミ入れないでください。

【ノイズの基本的な処理について】
実際の波形を見ます。
ギターを弾いていない無音部分のはずがサーッというノイズが聞こえる事が多々ありますが、ギターを弾いたときの音がどんどん小さくなると、このサーッというノイズが目立ってきます。

ということで、適度にギターの入力音量にあわせてボリュームを上げ下げすることで強引にノイズ部分も無音にします。
それこそ、ミキサーのボリュームフェーダーを上げ下げするように。


【ギターの減衰の種類について】
ただしギターは奏法により、おおまかに2種類の減衰パターンがあります。

まず、基本的なパターンのロングトーンについて。
ギュイィィィィィィィィィィィン・・・
というパターンのやつです。
これについては緩やかに音量が減衰していくので(下の図ではほぼ直線的に)、
ほぼ音量が小さくなったころにゆっくりボリュームを絞ればOKです。
逆に、いきなりボリュームを絞るとブチッと音が途切れて不自然になります。




さて、ギターには右手でのブリッジミュート・左手で軽く押さえて強制的にミュート、
音を切る奏法があります。
ズンッ や ガッ というやつです。
今回は便宜上これを手ミュートと呼びます。
手ミュートは急激に減衰(下の図ではカーブを描きながら)します。
音もわずかながら余韻で残るのですが、即ボリュームを絞らないとサーッというノイズが目立って格好悪いのです。

ここまででのおさらいで、まず

1:音の立ち上がりを即検出・ボリュームを上げる
2ー1:ロングトーンでの減衰を検出・ボリュームもゆっくり絞る
2ー2:手ミュートでの減衰を検出・ボリュームを高速で絞る

という3つの回路が必要になります。


【音量の測定とボリュームの上げ下げについて】
さて、まずは音の立ち上がりについて。
ここについては出来る限り早く検出する必要があります。
また、できるだけディストーションのような音に対して、
音痩せするようなノイズゲートにはしたくありません。
このため、Bossのような、センド・リターンのあるエフェクターのように、
adc~直下で音量を見て、ディストーションの後ろでボリューム上げ下げするメインの回路を入れました。


【メインの回路について】


ざっくり実際のメインの回路を見ていきます。
上の図でボリュームを上げる・下げる回路に分かれます。
rms変換された音量の下にclip~があります。
これは、

・ボリューム上げる回路については無音~初動のボリュームが上がり始める部分の音量を見れば良い
・ボリューム下げる回路については音量がかなり下がる~無音の部分が分かれば良い

というところで、後ろの回路で数値の処理を簡単にするために適宜調整して入れています。



【2パターンの減衰の処理】

さて、前述したとおり、減衰には2パターンあります。

2ー1:ロングトーンでの減衰を検出・ボリュームもゆっくり絞る
2ー2:手ミュートでの減衰を検出・ボリュームを高速で絞る

この処理には検出も2パターン作らないといけません。
ちなみにclip~ -10 10 が吐き出す数字については、

0~10まではギターの音が聞こえる範囲
-10~0まではギターのわずかな音とノイズが混ざった音
とでも考えてください。

これから2種類のパターンの検出方法を解説します。
が、ここで注意しないといけないのは、
単純に音量が下回ったというだけではこの2パターンは検出・住み分けできない
という点です。


まずはロングトーンから。

ロングトーンについては数値がマイナスになり始めたところから監視を始めて、
(ちょうどlogから== -1000というのが伸びてますが)音量がほぼ消えた付近で検出、
ゆっくりボリュームを絞ります。
これにより自然なロングトーンを維持して、音が終わったらノイズを消します。



次は手ミュートの波形を見ます。
検出したら急いでボリュームを絞る必要があります。
が、音量が下回っただけで検出・処理しようとしてもロングトーンと区別がつかないので
ボリュームを早く絞るか遅く絞るかこれだけではわかりません。
ただ、上の図を見ると「急激に」音量が下がります。
ということは、この減衰するスピード・量が激しいならば(接線の傾きが急になったら)手ミュートと判定できるのでは?と考えた次第です。

と考えたのですが、あまり複雑にしたくなかったので、fexpr~も使わずに考えました。
pipe 2の前後がその処理になります。
すなわち、0秒時点の音量と2ミリ秒経過した時点の音量の差を見て、急激だった場合に手ミュートと判断したわけです。

これによりボリュームをゆっくり絞る・急に絞るという処理用の検出ができました。



【トリガーについて】
ギターは弦が揺れるので物凄く短い周期で音量が上下しながら減衰していきます。
また、ギターをロングトーンで弾いたときに大きなビブラートをかければ、
減衰した音量を少しだけまた音量を上げることができます。

これによる弊害として、ロングトーンの処理が始まったかと思うと
また弾き始めのボリュームを上げる処理が始まったり、
いきなり手ミュートが始まったり、
また、手ミュートとロングトーンの処理を行ったり来たりと、
非常に不自然なボリューム処理が始まります。

これを回避するために、
ボリュームの処理をしている間は、他の処理をしないというロジックが必要になってきます。
そこで、トグルスイッチを設けてこれを把握・管理することにしました。


細かい解説は省きますが、
奏法に合わせて音量の吐き出す値・推移に一定の法則がありましたので、
1つのボリューム回路が動作している間は他の回路は動かさないようにしています。





2017年8月24日木曜日

[Puredata]Range Maestro[treble booster]





Range_Maestro_V1.zip

私、Rangemasterのクローンを作った事があるのですが、
大変お気に入りなエフェクターのためPuredata内で使えるようコピーしてみました。

2017年6月12日月曜日

[Puredata]Pi The Effectors Set[Guitar]


今まで単発でサブパッチ形式でPuredataのエフェクターを公開していましたが、
すぐ使えるようにマルチエフェクター的な結線済み、
Puredataのインストールとオーディオインターフェースの設定さえしておけば
起動だけですぐ使えるようにエフェクターセットを組みました。
Windowsだとレイテンシーで苦しいかと思いますが、
雰囲気だけでもお楽しみください。


ノイズゲート
ブースター・歪みペダル4種
プリアンプ
キャビネットシミュレーター
がセットになっています。

※盛大な凡ミスしてました。すみません!
adcの右チャンネルが繋がってなかったので修正しました。
これですぐ音が出ます。


2017年6月8日木曜日

[Puredata]Uber Delay




日本語マニュアルの動画はこちら。

変なフォントの字幕は動画編集ソフトのせいです、すみません。怪しさ爆発。

[Puredata]Guitar Synth[試作品]

極めて初期に作った私的なPuredataパッチなので使い勝手などが洗練されていません。
でも何かのアイデアになればと思います。
GuitarSynth v2.zip
どちらかというとオルガン風サウンドを出すのに適しています。
もしうまく動かないときは
全てのスライダーを一度動かす(初期設定が未実装)。
パラメータのTriggerもしくはオーディオインターフェースの入力トリムを好感度にする。
を実行してください。

ギター以外にも発音の速い楽器(例えばピアノやAttack Timeの速いシンセサイザー等)ならTriggerの調整で同様に使えると思います。

2017年5月18日木曜日

[PPTP]Puredata with Pi The Expression Pedalの青写真


以下、妄想ですが、一つの可能性として記事にしました。
コンセプトは既にディスコンですがDigitech EX-7です。





Guitar-Extended様のArduino-based pedal ([pduino])って素晴らしいなと思います。
この動画は2012年で、外部のPC?のPuredataで音の操作をしてるみたいです。

その後Raspberry Pi Zeroが出た訳で、
PCも内蔵したワウペダル的なPPTPが作れるのではないかと考えた訳です。
こちらでVOXワウの中身のスペースを確認しながら、
既存のワウのケースやパーツを流用できるのか、どうしたもんかなと考えてます。

最低限ねじこむものは
・Raspberry Pi Zero w(フリスクサイズ)
・Arduino Microあたり
・Microe proteサウンドカード(プリアンプ回路付き)
・電源モジュール(これが一番やっかい)
・各種手動設定用の可変抵抗(3~4個)

設定の関係上、Wi-Fiは欲しいですが機能限定すればLCDも要らないでしょう。。
ケース自作の場合は最大の難関は可変抵抗の可動部だろうな。。

2017年5月13日土曜日

[Puredata]ADDAcontrol[入力レベル微調整]

Adjust adc~改め、adc~とdac~で個人的に使う機能と統合したパッチを作成しました。
作るのは面倒だけど、個人的に毎回必要な機能を備えています。

ADDAcontrol_v3.zip
Ver2だとDSP LOOPのエラーが起きるという凡ミスをやっていたため、
再度adc~とdac~を分離しました。
あと、サイズがコンパクトになっています。




オブジェクトの上がdac~側、
下がadc~側になってます。
テレコに接続しないでください。

主な機能は
【adc~側】
inputボリューム調整


【dac~側】
outputボリューム調整
outputモノラルon、off
outputミュート
DSP on、off


2017年5月7日日曜日

[Pduino]ロータリーエンコーダーをPuredataで使うヒント

実は難しいのです!
PuredataのフォーラムでもC++やPyhon使ったほうが簡単ですと回答があります。
難しいと言われるとPuredataだけでどうにかしたくなります。

やってみました。
こんな感じで割とサクサク動きます。
※配線の誤記載があったので修正しました。
また、回転方向の誤検出のパターンについて付録につけました。






使ってみたロータリーエンコーダーはこちらです。
安い。
一般的なACBピン配列でプッシュすればモーメンタリーのボタンにもなるものです。

ピン配列は入手したものにより異なるのでデータシートを要確認ですが、
上記の物はこちら。


繋ぎ方と回路図的なものはこちら。



Arduinoとの繋ぎ方もテンプレ的な繋ぎ方です。
なお、デジタルピンは
A・・・53ピン
B・・・52ピン
で繋いでいますが、お好みで。

rotary_encorder_testV1.zip
同じ環境を再現しないと動作しないかと思いますが、使ったパッチをアップロードしました。
[arduino]オブジェクトは必須です。
一番最初にArduinoが出力したピンNo.を拾って右回転・左回転を検出するので、
残念ながら若干回転方向を間違える事がありますが、シビアなリアルタイム操作が不要な場合はまぁ支障無いかと思います。
Arduinoが出力した値を適宜削る方法には[route]オブジェクトがありますが、
今回は[unpack]を使用しました。こちらのほうが簡単です。
ロータリーエンコーダーを1個しか使わないなら[unpack]のほうが早いですが、
多数の可変抵抗等を繋ぐ際は[route]で出力を綺麗にデータ抽出するほうがいいです。

[moses 52]はたまにピンNo.が0や1といった予期しない値を出力したときがあったので削除するために保険で入れています。

【回転方向の検出について】
[t b b]
|
[timer]
|
[ float  ]
|
[moses 50]

ロータリーエンコーダーを回すと高速で多数の出力が始まるのですが、一番最初の値だけが欲しいので、
Bang版threshold~的な動作をするフローを作りました。
すなわち、bangとtimerを使って出力の間隔時間が短い時(ここではmoses 50 の50ms)
は次のspigotで出力を遮断します。


*汎用的にすぐ使えるようパッチを作りました。
rotary_encorder_forPduinoV1.zip
上記のように繋いでピン情報を送るとすぐ使えます。
ロータリーエンコーダーのAピンをArduinoの若番(例えば22)
ロータリーエンコーダーのAピンをArduinoの老番(例えば23)
に繋いで下さい。




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月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を変えても聴感上のレイテンシーが変わっていないという体感は
あながち間違いではないのかもしれません。

[機材]Boss Mega Distortion MD-2 MOD

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