+GAINER に載せていただきました

October 28th, 2008  |  Published in book

今日、オーム社より復刊された の 復刊あとがきに、Gainer++ と QCGainer をつくったということで名前を載せていただけました。GAINER の小林さん、ありがとうございました!

ここしばらくはずっと iPhone ばっかしいじってたので、 GAINER とはちょっと離れてしまってますが、MAKE: Tokyo Meeting 02 ももうじきなのでまたなにか作ってみたいですね。


posted with amazlet at 08.10.28
GainerBook Labo + くるくる研究室
オーム社
売り上げランキング: 51938
Tags:

QCGainer : Quartz Composer Gainer plugin

June 6th, 2008  |  Published in Uncategorized

RubyCocoaでQuartzComposer プラグインをつくれるようになった ので、さっそくつくってみました。 みんな大好きGainer の入力を QuartzComposer からとれるようにしました。

ソースコード

github:qc_gainer に。MITライセンスです。 , osc を使っています。

短かいので、コードをはっておきます。ごさんこうに。

#

qc_gainer.rb



#

Created by mootoh on 6/6/08.


Copyright (c) 2008 deadbeaf.org. All rights reserved.



# require 'osx/cocoa' OSX.require_framework 'QuartzComposer' require 'funnel'
class QCGainer < OSX::QCPlugIn def self.executionMode 2 end
def self.timeMode 1 end
def initialize = false = Funnel::Gainer.new(Funnel::Gainer::MODE1)
 = [0,0,0,0]
 = [0,0,0,0]
 = [0,0,0,0]
 = [0,0,0,0]


end
def startExecution(context) Thread.new do sleep 0.1 4.times { |i| addInputPortWithType_forKey_withAttributes(OSX::QCPortTypeNumber, "aot_" + i.to_s, nil) } 4.times { |i| addInputPortWithType_forKey_withAttributes(OSX::QCPortTypeNumber, "dot_" + i.to_s, nil) } 4.times { |i| addOutputPortWithType_forKey_withAttributes(OSX::QCPortTypeNumber, "ain_" + i.to_s, nil) } 4.times { |i| addOutputPortWithType_forKey_withAttributes(OSX::QCPortTypeNumber, "din_" + i.to_s, nil) } end true end
def execute_atTime_withArguments(context, time, args) unless 4.times do |i| (i).on Funnel::PortEvent::CHANGE do |event| [i] = event.target.value end (i).on Funnel::PortEvent::CHANGE do |event| [i] = event.target.value end end = false end
4.times do |i|
  setValue_forOutputKey([i], "ain_" + i.to_s)
  setValue_forOutputKey([i], "din_" + i.to_s)
end

true


end
def stopExecution(context) true end end

使い方

  1. Gainer I/O をMacとつなげる
  2. Funnelサーバを起動
  3. Quartz Composerを起動
  4. Pluginを配置

デモ

ビデオに撮るのがめんどうなので、Ruby会議 に持っていきます。

まとめ

こんなふうに、ありものをくっつけてささっと何かをつくるというとき、glue言語としてRubyはグッドですね。

Happy Physical Hacking !

Tags: , ,

Gainer++ – use Gainer from C++

March 31st, 2008  |  Published in Uncategorized

I wrote a C++ wrapper library for Gainer, based on its Ruby library (gainer-ruby). The code is submitted to CodeRepos as Gainer++, here.

So Far

It supports following functions:

  • mode switch by constructor
  • analog inputs
  • digital inputs

It has some examples, like blinking LED on Gainer I/O module (gainer-led.cc).


Feel free to use, modify, and commit to it.

Tags: ,

Gainer++ その2

March 19th, 2008  |  Published in Uncategorized

昨日のつづき。 今日のコミットで、以下の動作が確認できました。

  • コンストラクタでのモード切り替え
  • アナログ入力
  • デジタル入力

アナログ入力の確認中に、どうも値がヘンなことになってて30分くらい悩んだのですが、によると、アナログ端子はアンテナみたいになるので値が不定になるよ、とのこと。そんなことも知らない素人です。

gainer-ruby のコードでは、デジタル入力が1ポートしか取れないことになっていたので、ビット演算したりして4ポートぶんとれるようにしました。

それにしてもプロトコルの仕様が知りたいよ、とうろうろしていたら、ちゃーんと公開されてました。さすが。ちゃんと調べなきゃですね。

Tags: ,

Gainer++ – GainerをC++から使う

March 18th, 2008  |  Published in Uncategorized

Gainerを、C++から使えるようなラッパを書いています。 Rubyから扱えるgainer-rubyのコードをC++に書き移して、Gainer++としてCodeReposに登録しておきました。コードはこちら

まだI/Oポート周りのコードを移していないのですが、Gainer I/OモジュールのLEDを点灯させるサンプルプログラム (gainer-rubyのページにあるもの) は動いています。(gainer-led.cc)

せっかくより書き易いRubyのライブラリがあるのにC++で書くなんて逆行してるよ! と自分でもつっこまざるを得ないのですが、Gainerをより低レイヤ (CoreMIDIとか)と連携させてみたい、というのが動機です。

つかったりコード直したりしてみてくださいね。

関連

Tags: ,