最近とある仕事で電動スライダーを作ったのですが、 カメラスライダーとして使ってみようかなと思って自由雲台を着けて遊んだりしていました。 何人かの知り合いには話しているのですが、特殊撮影部みたいなのをやりたいなーと。 バッテリー駆動にして屋外での撮影にも使えたりしたら実用的。タイムラプス撮影とかしに野山に繰り出したい。
とりあえずmakersliderを使ってxyプロッターを作りたいので協力者求む(特殊撮影とか関係ない)
more on Exhibition: log / score – instrumentation of ice :
external site
all photo by Hirotaka Hirabayshi
SimpleOSCPlayer : https://gist.github.com/1242464
センサーデバイスとか外部アプリ間でのOSCテストがGUIでサクッとできないかなということで。
短い時間でCocoaにアクセスしてるせいかちょっと重いのをどうにかしたい。
最近のマイブームが自然観察です。以前アップした Tree_test から続くものです。
gzkというグループでやっていたことも自然観察という側面がありました。
昔絵ばかりかいていた頃によくいわれたのは、自然に立ち返れというものでした。日本の美術、デザイン教育にはこの価値観が根底にありますよね。なのでわりと真っ当なことをしているつもりです。
で、単にデータの羅列ではないものをつくらないとなんですが、そこは今後すすめていきたい所なのです。
さてスケージューリングについて書いてきましたが、実際に音のパラメータへの値の受け渡しをやっていませんでした。 Patternオブジェクトが力を発揮するのもこのパラメータへの値の受け渡しの部分でしょう。 まず簡単なSynthDefを用意しておきましょう。
( SynthDef( "testSynth", {arg freq = 1200, amp = 0.3; var src, env; src = SinOsc.ar( freq , 0 , amp ); env = EnvGen.ar( Env.perc( 0, 1, 1, -12 ), doneAction:2 ); Out.ar( 0 , src * env ); }).store; ) ここでSynthDefにはあらかじめ外部からアクセスしたい値を引数として用意しておきます(argで定義します) ここではfreqとampを用意しました。初期値を代入しておくと、パラメータが渡されなかった場合に初期値が使われます。
前回のRoutineを使ったシーケンスで試してみましょう。
( var freqPattern; freqPattern = Pseq([ 400, 500, 600, 700 ],inf).asStream; r = Routine({ loop{ Synth.new( "testSynth" , [ \freq, freqPattern.next ] ); 0.5.wait; } }).play; )
r.stop; Synthクラスを使うとシンセの生成をします、ノードナンバーの指定など自動で行ってくれます。 Synth.new( "testSynth" , [ \freq, freqPattern.next ] ); このとき引数に渡す値を指定出来ます。バックスラッシュ+SynthDefに用意した引数の名前(シンボルといいます*1)で指定します。 第二引数に配列で、シンボル, 値, シンボル, 値... と対になるように書きます。 [ \freq, freqPattern.next ]
さて、同じことをPatternオブジェクトのみで行えます。Patternクラスにはplayで再生出来るEventStreamPlayerというオブジェクトがあります*2。 シンボル名を指定してシンセの引数に渡してくれるPbindクラスを使ってみましょう。
( Pbind( \instrument, "testSynth" , \freq, Pseq([ 400, 500, 600, 700 ],inf), \dur, 0.5 ).play; ) Pbindの引数は先ほどSynthクラスの第二引数のようにシンボル, 値, シンボル, 値... と対になるように書きます。 ここではいくつかのシンボル名は特別な意味を持っています*3。上の例では、 \instrument : SynthDef名 \dur : 次のイベントまでの時間 です。 他にもいくつかのシンボルは特別な意味を持ちますが、自分でSynthDefの引数としてデザインした名前は指定して値を渡す事ができます。 上の例では\freqと\ampが自分がデザインしたものとして使用出来ます。
PbindはPatternオブジェクトなので他のPatternオブジェクトに入れ子にしたりできます。 これを使って、楽器のパートごとにイベントをつくったりいくつものパターンを同時に再生したりできます。 Pparは平行してパターンを再生出来ます。
( Ppar( [ Pbind( \instrument, "testSynth" , \freq, Pseq([ 400, 500, 600, 700 ],inf), \dur, 0.5 ),
Pbind( \instrument, "testSynth" , \freq, Pseq([ 4000, 5000, 6000, 7000 ],inf), \dur, 0.25 ) ]
).play; ) 違うパターンを持ったPbindを並列で並べてみました。
Pseqで直列に並べてみましょう。
( Pseq( [ Pbind( \instrument, "testSynth" , \freq, Pseq([ 400, 500, 600, 700 ],1), \dur, 0.5 ),
Pbind( \instrument, "testSynth" , \freq, Pseq([ 4000, 5000, 6000, 7000 ],1), \dur, 0.25 ) ]
).play; )
さてこのように入れ子を使って複雑なパターンを作り出せます。Pで始まるPatternクラスはほかにもいろいろありますので、 自分の目的にあったものを探して研究してみると良いと思います。
*1シンボル(Symbol)はイベントプレイヤーが使うDictionaryのkey valueです。playされた各イベントはシンセを呼ぶ際このkey valueを参照して値を渡します。 *2通常PatternクラスをplayするとEventStreamPlayerを返します
*3\freqも特別なシンボルです。default SynthDefなどでは周波数として使われます。