カテゴリ: max/msp/jitter
投稿者: mio
MacですとOS標準の機能で、ソフトウェア間でのMIDIのバイパスが簡単に行えるのですが、Windowsの場合はOS標準ではそういった機能はないようです。ですが、それだと不便ですよね。実は、Windowsでもソフトウェア間でMIDIデータをやりとりできる、MIDI Yokeというフリーソフトがありました。

MIDI Yoke のダウンロード
下記ウェブサイトの、左メニューから MIDI Yokeをクリックで、 MIDI Yoke のページのDownloadというところに、ダウンロードのリンクがあります。対応OSがWindows XPまでしか書かれていませんが、Windows 7 (32bit)でも動作しました。Win 7 (64bit)は未確認。
MIDI-OX
※MIDI-OXというソフトが目立っていますが、インストールの必要はありません。






MIDI Yokeの機能
MIDI Yokeは、ソフトウェアといっても、Windows起動時に自動的にバックグラウンドで立ち上がるソフトのようで、特に何かを操作したりということは一切ありません。何が変わるかというと、Ableton Live、Max/MSP、Cubase、FL Studio等、各種音楽ソフトの、MIDIの環境設定のportのところに、MIDI Yoke 1 〜 MIDI Yoke 8 までの8つのポートが追加されて、このポートを通じて、ソフトウェア間でMIDIデータの送受信ができるようになります。イメージとしては、ソフトウェア間でoutputのポートと、inputのポートを対応させることで、ソフトウェア間でMIDIケーブルをつなげるような感じです。

例えば、Max/MSPからの MIDIの出力を、Ableton Liveで受け取る場合は、Max/MSP側のアウトプットのポートを、MIDI Yoke 1にして、Ableton Live 側のインプットのポートの MIDI Yoke 1をアクティブにすれば、Max/MSPで生成したMIDIの出力を、Ableton Liveで受け取れるようになります。その他のソフトの場合も同様です。


↓Max/MSPの場合 (MIDIのアウトプット先として、MIDI Yokeが選べます)




↓Ableton Live の場合 (MIDI portsに、MIDI Yokeが並んでいます)




ALT OSC (KARAPPOが開発したiPhone/iPad用のOSCコントローラー)のMIDI Bridge ソフトの場合




FL Studioの場合
カテゴリ: Quartz Composer
投稿者: mio
ss


0) Quartz Composer側で、Templateパッチの「Music Visualizer」を開いておく。
1) iTunesで、音を再生
2) iTunesで、ビジュアライザを起動。(Command + T)
3) ビジュアライザの種類を、旋盤、ゼリー、スティック、のいずれかにする。


iTunes ビジュアライザ及び、iTnews Classic ビジュアライザに設定すると、
QuartzComposer 側が反応しません。
この2つが、QuartzComposer以外の仕組みで動いているからかもしれません。
カテゴリ: openFrameworks
投稿者: terada
oFでウェブカメラから取得した画像をdrawするだけの簡単なサンプルを作っていて、何故か書き出された映像がピンク色になってしまう現象に遭遇しました。
pinkscreen
原因はちゃんと理解できてないのですが、フォーラムに対処方法が載っていたのでメモしておきます。(テクスチャってなんだろ・・・)

対処方法:
draw関数の最初にこれを挿入します。
ofSetColor(255,255,255);


引用元:Logitech webcam pink/purple color
カテゴリ: openFrameworks
投稿者: mio
openFrameworks本などのサンプルで、カメラを使ったものが多いですが、
左右反転の方法が載っていなかったので調べました。

カメラなどで、鏡のように左右反転させたい場合は、
以下のように書けばOKです。

hogeImg.mirror(false, true);

1つ目の引数は、上下反転
2つ目の引数は、左右反転
を意味します。

情報ソースはこちら。(英語)
他にも使えそうなメソッドがありますね。
カテゴリ: Xcode
投稿者: terada
Xcde上でObjective-CでMacOSX用のスクリーンセーバーを作成する際のデバッグ方法で苦戦したのでメモです。XcodeのScreenSaverテンプレートで新規プロジェクトを作り、実行時にNSLogを使って出力するまでの方法をまとめます。

環境:
MacBook
MacOS 10.6.5
XCode 3.2.4
SaverLab1.7.4

1)XCodeで「ScreenSaver」テンプレートから新規プロジェクトを作成します。(例としてプロジェクト名「TestSaver」とします)
新規プロジェクトの作成

2)animateOneFrameの中にNSlogで出力用のコードを書きます。
出力のコードを記述

3)この段階で一度ビルドします。ビルドを実行するとスクリーンセーバーファイル「TestSaver/build/Debug/TestSaver.saver」が作成されるので、これをダブルクリックしてインストールします。インストールできたら環境設定パネルは終了してください。
ビルド

5)次に、SaverLabというアプリケーションをダウンロードしてきて、解凍後Applicationフォルダにインストールします。
> SaverLab

6)XCodeに戻って、「グループとファイル」のカラムで右クリックし、プロジェクトに「新規カスタム実行可能ファイル」を追加します。
実行ファイルを追加

7)ポップアップで、先ほどインストールした「SaverLab」のアプリケーションファイルを選択し、「完了」を押します。
SaverLabを選択

8)カラムに「実行可能ファイル」が追加されたら、今度は「概要」のプルダウンから「アクティブアーキテクチャ」を「i386」に変更します。理由は理解できていませんが、その他だとエラーが出てビルドできませんでした。
概要の設定を変更

9)「ビルドと実行」が有効になっているはずなので、実行します。

10)SaverLabが立ち上がるはずなので、一覧の中から「TestSaver」をダブルクリックして立ち上げます。すると、コンソールが立ち上がって出力されるはずです。コンソールが立ち上がらない場合はメニューから「Control > Show Console Window」で開いてください。Preferenceで自動的にコンソールを立ち上げる設定にも出来ます。
終了!

以上です。
注意点としては、実行する前に一度ビルドしてインストールを済ませてからでないと、うまく出力されないこと。SaverLab単体では同じく出力されず、XCodeから実行しないといけない点です。もしかしたら、後者は別の手だてがあってもおかしくないと思うのですが、調べられたのはここまででした。ソースを編集して、再び試したい場合は、再度3)の手順から行う必要があります。スクリーンセーバーのデバッグって面倒ですね。

※ もっといい方法があったら、ぜひ教えてください!
カテゴリ: openFrameworks
投稿者: terada
openFrameworksの勉強中、サンプルコードのofToStringの部分で下記のようなエラーが出て、困っていましたが、プロジェクトファイルを右クリックして「情報を見る」>「ビルド」タブの「ベースSDK」が1.5になっている場合は1.6にしてあげると、うまくコンパイルされるようです。

Undefined symbols:
"std::basic_ostream >& std::basic_ostream >::_M_insert(double)", referenced from:
ofToString(double, int)in openFrameworks.a(ofUtils.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
カテゴリ: UNIX
投稿者: terada
(あまり、出番はないかもしれませんが)ターミナル上でテキストファイルのエンコードを調べる方法です。
nkfコマンドでオプションに「-g」をつけてあげるとエンコーディングを判別して出力してくれます。

$ nkf -g example.txt
Shift_JIS

ただしnkfコマンドを使うためには、(当たり前ですが)NKF(Network Kanji Filter)がインストールされている必要があります。

$ nkf -g example.txt
-bash: nkf: command not found
と出力された場合はNKFがインストールされていないので、次の手順が必要です。

1:NKFのソースファイルをダウンロード
こちらからソースコードをダウンロードしてきます。

2:実行ファイルを作成してインストール
$ cd  ダウンドードしたディレクトリのパス
$ sudo make install
Password:

上記のようにして、パスワードはルート権限のあるユーザのパスワードを入力します。
そうすると自動で「/usr/local/bin/」にnkfがコピーされたり、他にも必要なファイルがそれぞれに配置され、インストールが完了するようです。

※下記の内容よりもこちらの方が正しいようです。UNIXのmakeコマンドのことがまだちゃんと理解できてなくて、すみませんでした。
参考:http://www.yynet.tama.tokyo.jp/~yokota/INSTALL/build.html


2:実行ファイルを作成
cdでソースコードのとこまで移動して、makeコマンドを実行すればNKFの実行ファイル「nkf」がソースコードと同階層に作成されます。
$ cd ダウンドードしたディレクトリのパス
$ make
実行ファイル

ここまですれば下記で、nkfコマンドを実行できます。
$ 実行ファイルへのパス -g example.txt
が、毎回実行ファイルへのパスを入力したり、ターミナルウィンドウへ実行ファイルをドラッグして指定するのも面倒なので、実行ファイルまでのパスを省略できるようにしておきます。

3:実行ファイルまでのパスを通す
先ほどの実行ファイル「nkf」を任意の場所に置きます。ここでは、「/Users/ユーザー名/local/bin/」に置きます。(このディレクトリがない場合は自分で作ってしまってOKです)
「/Users/ユーザー名/.bashrc」という隠しファイルの最後の行に追加でこのように記述します。
export PATH=${PATH}:/Users/ユーザー名/local/bin

これでパスが通ったはずなので、ターミナルでnkfコマンドを実行してみます。
$ nkf -g example.txt
UTF-8

このように出力されたら成功です。
※bashされるようなら、ターミナルを再起動してみてください


参考:http://www.yynet.tama.tokyo.jp/~yokota/INSTALL/nkf/
カテゴリ: Xcode
投稿者: terada
Xcodeでは、デフォルトで「行の複製」コマンドがありません。なので、キーショートカットのプロパティリストを編集してキーコマンドでできるようにしましょう。


キーショートカットの設定がデフォルトのものしかない場合は、
Xcode > 環境設定 > キーバインド
の「キーバインドセット:」の項目で、
「Xcode デフォルト」を選択した状態で「複製」ボタンを押下。
任意の名前をつけて保存したら、「適用」もしくは「OK」を押下。


˜/Library/Application Support/Xcode/Key Bindings
に、先程保存した名前で拡張子が「.pbxkeys」というファイルがあるので、これをPlistEdit Proで開きます。


XML形式でショートカットキーとコマンドがセットになっているので、ここに「行の複製」を追加します。
今回はキーコマンド「Ctrl+Shift+D」とします(※)。
New ChildやNew Siblingを使って、Keyを「^$D」Classを「Array」とした要素をまず作成し、その子供に次の要素を追加します。

selectLine:
copy:
moveToEndOfLine:
insertNewline:
paste:
deleteBackward:

設定

※「Shift+Command+D」は「ファイル > すばやく開く」で使用されているため避けます。


Xcodeを再起動して設定完了。

参考:http://viva.viva-mambo.co.jp/obj-c4aser/index.php?Xcode#g850b828
カテゴリ: Mac
投稿者: terada
Macプログラミングする際に頻出のプロパティリスト(.plist)を簡単に編集できるツリーテキストエディタ「PropertyListEditor」が、いつのまにか最新のMacOSX(10.6.5)ではなくなっているようです。でも、その代わりに同じようなエディタがAppleDevelopperToolsからダウンロードできました。これを使いましょう。


PlistEdit Pro
カテゴリ: Quartz Composer
投稿者: mio
Audio Spectrum splitter

Quartz Composer で、Audio Spectrumの部分の値を取り出すのに、structure Key Memberをいちいち使うのは面倒なので、上記のように、Audio Spectrumを突っ込めば、一発で値を取り出せるjavascriptパッチを作りました。

作る過程でStructureの扱いでつまずいたので、
その点についてもメモっておきます。


■ Structure を使おうとして遭遇したエラーと対処法

Structure型のデータを、任意の変数に代入しようとすると、
TypeError: Result of expression 'Structure' [null] is not an object
というエラーが出る。
※'Structure'は自分で決めた引数の名前

どうもjavascriptパッチは、パッチが立ち上がるときに、
そのパッチに不具合がないかチェックが入るようなのですが、
チェックの時点では、引数の__structure型の値が null なので、
var hoge = Structure[0];
のようなことをすると、
Structureが null だから、そんなことできないっす、と上記のエラーが出るようです。

なので、
if( Structure != null){
var hoge = Structure[0];
}

とすれば、エラーも出ず正常に動くようです。

ちなみに、この「javascriptの事前チェック(TestMode という言うらしい)」ですが、
事前チェックのときは、_testModeという名の隠し変数(?)の値が true で、
普通に動いているときは false になっているようなので、
上記の部分を

if(! _testMode){
var hoge = Structure[0];
}

としても正常に動くようです。
TestModeなんて知るかよ!という感じですが、まあ一件落着ですね。

情報ソース
http://www.cybero.co.uk/QuartzComposer/examples/jelly2.html
http://web.archiveorange.com/archive/v/jFOq6bIjYcp88vRFKV2d


以下は、ソースコード

■ Pattern 1 : 出力に配列を使う場合

function (__number eq[16]) main (__structure Structure)
{
var result = new Object();
result.eq = new Array(16);

result.eq[0] = 0;//これがないとエラーがでます。

for( var i = 0; i < 16; i++){
if(Structure != null){
result.eq[i] = Structure[i];
}
}

return result;
}

■ Pattern 2 : 出力用変数を文字でやる場合 
 (こっちの方がパッチの見た目がスッキリしてます)

function (__number eq0,__number eq1,__number eq2,__number eq3,__number eq4,__number eq5,__number eq6,__number eq7,__number eq8,__number eq9,__number eq10,__number eq11,__number eq12,__number eq13,__number eq14,__number eq15)
main (__structure Structure)
{
var result = new Object();

for( var i = 0; i < 16; i++){
if( Structure != null){
result["eq" + i] = Structure[i];
}
}
return result;
}

見た目はこんな感じ。

Structure splitter 2