Pure Data

長年使っている冷蔵庫だが、パッキンが傷んできて冷凍庫のドアがよく閉まらなく ガムテープで封印してるんだ。ちょっとみすぼらしいので、日本の経済発展に寄与 すべく、買い換える事にした。どうせ買い換えるなら、ECOポイントが付いてくる 今を逃す事もなかろうと、罠にはまってみようとなった。

冷蔵庫は白物の代表選手かと思っていたら、カラフルになりましたねぇ。黒とかベージュとか いろいろ有ったよ。ドアも2つから6つぐらいまで付いていたり、仏壇みたいに観音開き バージョンがあったり。シャープのどちらからも開きますってのは、どうなっているのか しばし見入ってしまったよ。

冷蔵庫は女房の管轄なので、好きなのを選んでもらったよ。まあ、男が口出しすることは ないわな。ECOポイントが6000点付いてた。それに買い替え特典が5000ポイント付いてた。 これって、下取り無料って事だね。

下取りされたやつは、リサイクルって事で、途上国にでも送られるのだろうか?それとも バラして部品取りの運命なのだろうか? ECOに処理して欲しいぞ。

最近のPCの音事情

前回 Arch Linuxで録音した時、マイク感度が悪く、再生時にゲインを臨時に上げて 聞いてみた訳であるが、これってS/Nが悪いでしょうと、ちと気になったんだ。 んでもって、母艦のPCの音関係がどうなってるか、ちと調べてみたよ。

そしたら、蟹さんマークで悪名高い? RealTekの石が使われているみたい。FreeeBSD方面 では、蟹さんマークのNICは使うと問題起きるぜーが周知されたんだけど。。。 最近は音方面にも進出ですかい!

RealTek 録音レベル なんてキーワードで、先生に聞いてみた所、 あたまにきたどっとこむ なんてのがヒットした。やっぱり蟹には泣かされているんだなあ。 ここをつらつらと見て行くと、PCのオーディオも進化してるんあだなあ。MS主導で石を 作らせてるのかな。おいらのPCに載っている石は、どうやら ALC269 みたい。

マイクブースト機能で、マイクラインにプリアンプを入れられるみたいなんだけど、 スライダーを動かしてみても反応しない。なんてこったい。ソフトも蟹さんぽい。

蟹さんドライバーでもアップデートしてみっかと思って、台湾の新竹サイエンスパーク (かっこいい名前だけど、いわゆる工業団地の事ね)にある ReakTekダウンロードセンター を尋ねてみた。そしたら、ドライバーだけじゃなくて、 石の仕様書やアプリケーションノートも配布 してたので、一緒に貰ってきたよ。ドライバーはM$用だけじゃなくてLinux用 もあったよ。この点は、どっかのメーカーも見習って欲しいぞ。

アプリケーションノートを開いてみたら、何とまあ、おいらのPC用かとみまがう程 構成が一緒だった。パソコンメーカーも、こういうのをコピペしてパソコンを設計 してるんだな。だから、どのメーカーのパソコンを買っても、同じ構成なんだ。 これぞコピペの弊害だな。

今使ってるパソコンは、イヤホンとかマイクを抜き差しすると、うるさいぐらいに デバイスが接続されましたとか解除されましたとか表示してくるけど(小さな親切 余計なお世話はM$の伝統です)、その為だけに、ジャックに余計な端子が付いている のね。回路図見て分かったよ。

そんじゃ、早速ドライバーをアップデートしてみっか。失敗しても元に戻せるように 復元ポイントを設定しておくと、吉らしい。 復元ポイントは、7の場合、コンパネ開いて、システムとセキュリティーから システムを選び、左側メニューから、システムの保護を選んでクリック。 出てきたWindowsで、システムの保護、作成をクリックして、ようやく作成できる。 これって、shibuya.lispで誰かが言ってたけど、使うのは悪です と言う、MSの意志 表示だな。

ドライバーを更新してみたよ。そしたら、マイクジャックが見えなくなっちゃった、ozr。

しょうがないので、アクセサリー、システムツール、システムの復元で、タイムマシーンに 乗り、30分前のマシンに戻した。やれやれ、骨折り損だったわい。

しゃーない、落としてきた仕様書でも開いてみるか。

Programmable +10/+20/+30dB boost gain for analog microphone input

なんていう謳い文句が書いてあった。3,10,30倍に切り替えられるんだな。ちょい待ちい。 これって、ステップで切り替えられるって事だよね。リアルテック HD マネージャでは この部分がスライダーで、ボリュームのように表示されてるよ。

思いっきり、スライドしてやったらどうなる?ポン、ポンと、ノブがスキップしたよ。 そして、0,10,20dBと変化しおった。全く紛らわしいインターフェースだ事。せめて、 目盛りでも入れて、3段階に調整できると表示できないもんかね。

あと、上のページでも言及してたけど、カラオケモードのON/OFF表示も最低だな。 中国人の思想にはついて行けません。

boost 回路をわざわざ付けるより、最初からGainを上げておいて欲しいと思うんだけど この考えは、私の中で一瞬で否定された。過去に、台湾、香港、中国、シンガポールへと 中国人の居る所へ行った事があるけど、やつらの声のでかい事。鼓膜が張り裂けそうでし たよ。

そんな連中が石を設計すれば、デフォルトでそんなにゲインなんていらないでしょ。 へたにアンプなんぞ入れた日にゃ、ノイズばかり目立っちゃうよと、言うだろうな。

なんせ、蟹さんマークは、創業者が上海出身で、上海蟹を世界に広めようとしたわけ ですから(かどうかは、定かではありません)

蟹はLinuxとかFreeBSDにも住んでいるかな

と思って、理科の観察よろしく調べてみました。

まず試してみたのは、手元にあった、USBに入っていたKINOPPIX(5.Xだったかな)。 大体、新PCでUSB起動するのも初めてだもんなあ。boot時にF12キーを押しておくと bootデバイスを選択出来る。

ちゃんと差し込んだUSBを認識してくれてbootが始まったのはいいんだけど、途中で デバイス検出に失敗しハングしちゃったよ。残念でしたねぇ。

そんならばと思って次に試したのは、 GhostBSD という、FreeBSD8由来の鳥。DVDに焼いて起動させたら、こちらはPANICでした。 しょうがないので、/sys/dev/soundあたりを調べてみたけど、台湾産の蟹は居なかったよ。 仕様書を頼りにドライバーを書けるでしょって言われてももねえ。

新しいパソコンでLinuxとかBSDを試すのは、地雷原へ行くのに等しいって格言は、昔も 今も一緒だな。追いつくまで待ってみるか。それまでは、清く正しくVMWAREしましょ。 こちらなら、安定稼動しますんで。

PureData しましょ

ちと、寄り道して データフロープログラミング の一種に分類される、 PureData をやってみる。

本当は、LabVIEW が、面白そうなんだけど、こちらは えらい高いそうなんで、諦めたんだ。庶民は、OSSに限るよ。とほほ。。。。

UNIXのパイプみたいに、データが流れて行く途中で、加工されてくって考えは、とっても 受け入れ易いと思うんだよな。まずは、インフラの構築だな。

install pd on Debian/lenny

Download こちらから頂いてきて、dpkg -i *.deb で 入るはずなんだけど、私の所では、libmp3lime0 が、無いとか言われて失敗した。

そなら、libmp3lime0を何処からか調達してきてあらかじめ入れておけばよいはずなんだけど 見つからんかった。ソースから作るって方法を試してみようかと思ったけど、泥沼に入り そうな予感がしたので止めた。

旨くインストール出来たら、どなたかこっそり秘訣を教えてください。

install pd on FreeBSD 8

/usr/ports/audio/pdに移動して、make installするだけ。Tcl/TkをGUIとして使っているので 勝手にインストールしてたよ。作者さんは、GUIにTcl/Tkを採用したのは(タイミング制御の 関係で)失敗した、なんて後悔されてるようです。

でも、Tcl/Tkなら、どんなプラットフォームでも普通にサポートしてるんで、インストール には手間がかからず、良いんではないでしょうか。

install pd on Arch Linux

この間使い始めたばかりのOS。折角だから、インストール出来るか試してみた。

[sakae@arch ~]$ yaourt -Ss pd | grep 'Pure Data' -B 1
aur/pd 0.42_5-1 (48)
    The Pure Data real-time music and multimedia environment
--
aur/pd-extended-svn 13105-1 (16)
    Pure Data Extended SVN version
--
  :

svnバージョンの方は依存関係が複雑だったので、まずはシンプルな方だな。いきなり、 ハードルを上げる事はあるまい!

つう事で試したみたんだけど、jackとか言うやつを関連でインストールしようとするんだ。そんなの 見つからないと言われて、失敗してしまう。

jackって何よと思って調べてみると、どうやらオーディオ関係のドライバーみたい。 オーディオドライバーなら、ALSAやOSSがすでに入っているから、無くても実害は無かろう。 パッケージを作る時に、仕様書を確認するタイミングがあるので、そこで、jack-audio-connection-kitを 削除したよ。

[root@arch ~]# yaourt -S pd
  :
------- vi PKGBUILD
depends=('jack-audio-connection-kit' 'tk')
source=(http://crca.ucsd.edu/~msp/Software/pd-${pkgver/_/-}.src.tar.gz)
md5sums=('a079816e3894642f81dc2a44ada4c3e0')
  :
-------
   :

そしたら、無事にパッケージが出来上がり、インストール出来た。 オーディオドライバーは、デフォでOSSが選ばれていたよ。テストも無事完了。

install pd on Windows7

あれ? Windowsには、開発ツールを入れないポリシーだったような! いいえ、PureDataは グラフィックツールです。正確には、電子工作用パッケージソフトかな。だから、ポリシーに 反していないよ。

クリック猿になって、数回クリックするだけで、簡単に入る。なので、上のように 苦労する事は無い。拡張版なので、ひょっとしたら部品取りに使えるかも。

pd 資料

manualとか Partsは、この辺がいいかな。 英語本の原稿とサンプル グラフィカル言語PureDataによる音声処理 こちらは、有り難い事にアマチュア無線用の話題を PureDataで扱っている。

リバース・エンジニアリング

ここまで書いてきて、はたと困った。普通なら、プログラムをちょいと書いて、それを ここに貼り付けて、ごにゅごにょなんだけど、今回のやつは、それが出来ない。 マウスでぐりぐりなんだもん。

でも、考えてみたら、マウスでぐりぐりしたGUI語も保存をしておいて、後で再現でき なきゃ意味が無いという、ノイマンの縛りがあるんだ。 幸い、プログラムは、テキスト形式で保存されるんで、そいつがどんなフォーマットに なってるか、ちと調べてみる。

#N canvas 0 0 450 300 10;

ファイルメニューからNewを選んで、何もしないまま、test.pdで保存した結果です。 キャンバスってのは下地って意味かな、すると何となく、電子工作で言うプリント板を 連想しちゃうな。 五つ出ている数字は何だろう? 450 と300は、基板のサイズかな。 これらを書き換えてから、読み直してみよう、どう変化するかから意味が分かるだろう。

最初の数値は、基板のX WIndows上のX座標、次はY座標、次の2つの数字は基板のサイズ でした。最後の数字は不明。

そんじゃ、基板上に部品を配置していく。資料によれば、(音声)信号の通るラインは 黒い太線で引かれるとか。そうなんだよなぁ。信号ラインは、太く短くが鉄則。 高い周波数になると、電子は急に曲がれないので、まっすぐに進んでしまって、その結果 電波になって空中へ飛び出して行くので注意せよ、だもんなあ。

あれ? いつの間にか、プリント基板の作り方に説明になっちゃったよ。まあいいか。 プリント基板なら、部品番号と配置を書いたネットリストが必要なんだな。今、保存 されてるファイルは、さしずめネットリストか。そう思って、解析してけばいいな。

#N canvas 131 42 450 300 16;
#X obj 85 25 adc~;
#X obj 81 82 dac~;
#X connect 0 0 1 0;
#X connect 0 1 1 1;

canvasの最後の数値は、フォントサイズだったよ。ついでに部品を2つ置いて結線して みた。adc~ とか言うのは、部品名か。最後に にょろがつく部品は、信号を扱える印に なっている。そしてプリント基板上では、部品の足のマークの代わりに、黒または中抜きの マークが入っている。黒足は信号が入出力する端子になる。さしずめチップ部品と言った 所か。

connectは、部品間の接続状況。左側の数値から順に出力側部品番号、端子番号、入力側部品 番号、端子番号になるかな。部品番号は、リストの出現順にZEROオリジンで数えたもの。 端子番号は左から右に数える。

そこまで分かれば、ネットリストの自動生成も夢ではないな。まあ、この後には、いろいろな 部品の情報の意味を解析しておく必要はあるけどね。

HotとColdとfでclojureもどき

clojureって、渋谷で流行っていたやつじゃなくて、閉じ込める方ね。

#N canvas 0 359 450 300 16;
#N canvas 0 0 450 300 hoge 0;
#X obj 140 109 +;
#X obj 92 45 inlet;
#X obj 195 48 inlet;
#X obj 143 196 outlet;
#X obj 318 50 inlet;
#X connect 0 0 3 0;
#X connect 1 0 0 0;
#X connect 2 0 0 1;
#X connect 4 0 0 1;
#X restore 104 72 pd hoge;
#X floatatom 103 153 5 0 0 3 SUM_out - -;
#X floatatom 28 11 5 0 0 1 hot - -;
#X floatatom 124 9 5 0 0 1 c1 - -;
#X floatatom 220 13 5 0 0 1 c2 - -;
#X connect 0 0 1 0;
#X connect 2 0 0 0;
#X connect 3 0 0 1;
#X connect 4 0 0 2;

何となく、繋いでみたやつ。キャンバスが2つあるって事は、メインとサブって事です。 念力でGUIを想像してください。 +は、2つの引数を取り、文字通り足し算をします。が、左側から入ったデータに対しては 直ぐに反応(計算値)を返します。が、右側のデータがリアルタイムに変化しても 直ぐには、反応を返しません。左側のデータが変化した時に、右側のデータが参照 されて、計算が行われます。直ぐに反応する端子をHotと言うそうな。一番左側の端子が Hotと決まってて、それ以外の端子はColdと言うそうです。

念力で更に接続を想像すると、右側の計算入力には、2つのラインが接続されてます。 さて、どちらの値が、左側のデータと共に使われる(足し算)されるでしょうか? 答えは、時間的に新しい方です。

これって、clojureじゃん。ちゃんとPureDataにも有ったね。そんじゃ、SICPの4章だか から出てくる、変数ってのはあるの? Yes!

#N canvas 445 334 450 300 16;
#X obj 120 105 f;
#X floatatom 228 54 5 0 0 1 step - -;
#X floatatom 116 183 5 0 0 3 result - -;
#X obj 80 11 bng 15 250 50 0 empty empty reset 17 7 0 10 -262144 -1 -1;
#X floatatom 81 53 5 0 0 0 - - -;
#X obj 201 105 +;
#X obj 199 179 print;
#X obj 161 19 bng 15 250 50 0 empty empty clock 17 7 0 10 -262144 -1 -1;
#X connect 0 0 2 0;
#X connect 0 0 5 0;
#X connect 1 0 5 1;
#X connect 3 0 4 0;
#X connect 4 0 0 0;
#X connect 5 0 0 1;
#X connect 5 0 6 0;
#X connect 7 0 0 0;

上記で、f が、値を貯めこむダムですな。bangでトリガーがかかると、値が放流されます。 パイプ用の変数ですね。それから、print文は、Debug用に使うもので、メインウィンドウ に、結果が表示されます。

演算(+)の出力を最初、fのHot側端子に接続しちゃったんだ。そしたら、発振が 起こって、壊れちゃったよ。壊れた時のメッセージが、コンソールに出てきて、曰く、 stack overflow ですって、さ。 気を取り直して接続し直したよ。

pdの拡張機能ってどうよ

あの方のご好意により、CQ出版の本を読ませて頂いている。いつもありがとうございます。 で、例題に出てくるプログラムを手当たり次第試しているんだが、プログラムによっては エラーが出てしまう事がある。(Atch Linuxの場合)

原因は分かっていて、拡張機能を入れていないからなんだ。山盛りの拡張を入れても 使い切れないので、使う分だけ、Windows7側から持ってこようとしたんだ。いわゆる部品取り ですな。

標準pdには入っていないモジュールとして、morseがある。まあ、そうだろうな。プロから 見放された電信ですから。Windows7側ではどうなってるかと思って調べたら、何とまあ、dll になってた。これじゃ、規格違いで、Linux界じゃ使えん脳。

諦めて、ソースからコンパイルする鹿。で、始めてみたのはいいんだけど、あれも足りない これも足りないで、まともにコンパイルが進まない。

ああ、コンパイルは、/home/sakae/Pd-0.41.4-extended/packagesに降りて行って、make するだけなんだけどね。

しゃーないんで、どうせ、xxx.soを作るだけでしょと高をくくって、投げやりモード突入ですよ。 曰く、make -k で、兎に角、進め進め ですよ。後は運を天に任せるしか。

[sakae@arch mjlib]$ file morse.pd_linux
morse.pd_linux: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped

暫くして、Pd-0.41.4-extended/externals/mjlib を見たら、出来上がっていた。てっきり、 soになってるかと思ったら、そーじゃ無かったのね。後は、Windows側pdのdir配置を参考に

[sakae@arch mjlib]$ cd /usr/lib/pd
[sakae@arch pd]$ ls
bin  doc  extra

extraに放り込んであげたら、ちゃんと認識してくれたよ。やれやれ。折角なのでコードも 見ておく。

/**
*       The morse object is designed to translate messages into
*       morse code. There are two outlets - a dot outlet and a dash
*       outlet (from left to right). In addition there is an end of
*       current message outlet. Each character in the current message
*       is emited upon reciept of a bang allowing external control over the
*       timing. A dot lasts one bang - a dash lasts three bangs, the space
*       between dots and dashes is one bang, the space between characters is
*       three bangs, the space between words is seven bangs
*       it currently only does digits and numbers
*/

扱えるのは、英数字だけでした。文字からモールスコードに変換して、ドット、ダッシュと 終了に振り分けて、トリガーを出しているだけですね。

勝手が分かれば、ひょっとしてFreeBSDにも拡張版を入れられるかと思ってチャレンジして みたが、土台がLinux/MacOS/Windows用にハードコーティングされてて無理だった。どうりで 誰もportsにはしてないはずだ。納得。

部品取り

上記の様にFreeBSDでは、拡張機能を追加出来なかったけど、デフォで、/usr/local/lib/pd/doc あたりに、面白い基板が置いてある。面白いのは、3.audio.examples に入っているやつかな。

H09.ssb.modulation.pd なんて、昔は夢のまた夢でしたよ。急峻なフィルターを実現 する為には、水晶で出来たものを使うしかなく、羨望のまなざしで眺めたものだ。 それが今ではどうだ。ちゃんとボードになって無償公開されている。

このように、メイン基板と独立したサブ基板と言うかモジュールの事をPdの用語では、 アブストラクションと言うそうだ。それに対して、上記でやった、メイン基板に付属 するようなサブルーチンみたいなのは、サブパッチとか言うそうだ。

パッチって言葉は、昔々のコンピュータでプログラムする時、配線(コード)を、組み換え ていた所から生まれたみたい。こんな、昔の言葉を知ってる人は、渋谷に集まった人の中 でも、 あの人 ぐらいだろうか。

ついでに昔話を続けると、よく秋葉原のガード下へ、SN7400 を買いに行かされたなんて 話が有ったけど、おいらは、もっともっと古いICを使っていたよ。

今は亡きRCA社が出していた、RTLと言うタイプのIC。抵抗とトランジスタだけで作った IC。2種類しかなくて、一つのチップ(8pinIC)に、NOR回路が2つ入ったものと、もう 一種類は、JK-FFが入ったもの。

そのICの時代が終わって、テキサス・インスツルメンツ社がTTL(トランジスタ・トランジスタ・ロジック) を出したんだよな。んでもって、TI社のロゴマークが、テキサス州の形を元にしてる ってのは、余りにも有名な話。先の蟹さんチップに通じるものがあるなあ。