Exploring Into SuperCollider 7

前回までのところでタイマーに対し演奏されるべき時間にトリガーをかけてもらう予約を行うところまで来ていた。あとはトリガーに対して演奏データを処理する、つまりは最終的にsclangのランドから、scsynthに対してコマンドを発行することになる。

ようやくUGenからみていったSuperColliderの処理の流れも、一周してきたというわけだ。

Continue reading →

Have A Long Trip With MacBook Air

HyperMacというMacBook用の外部補助バッテリーの存在を思い出し、購入しようと思うきっかけになったのはMagSafeコネクタのパテント関連でこの製品を販売しているメーカーがAppleから訴えられたというニュースを見たことだった。

仕事で外出するときはMacBook Airを持ってでかけている。AirはMacintoshの中では軽くて携帯性は良い方なのだけど、如何せんバッテリーの持ちはあまり良くない。メーカースペックでは5時間となっているけど、なんとなく実際に使ってる感じでは2時間半ぐらいだろうか。

行き帰りの電車でフルに使うと、あとはスターバックスで使うにも心許ない量しか残ってないという状態だ。なので、ACアダプタも持ち歩いてチャンスがあれば充電していた。それとは別にPocket Wifiも持ち歩いていて、こちらも持って4時間ぐらい。一日出歩くにはちょっと足りないので何か補助バッテリーが必要だった。

Airの方は仕方ないにしても、Pocket Wifiの方は何とかしたいと思っていたところにニュースを見て、その存在を思い出したのだ。

さて、わたしが購入したのはMacBook用のMagSafeコネクタがつくタイプの中では一番小さい60Whのものだ。Airのバッテリー容量は40Whとあるので、1.5倍の容量と言うことになる。MacBookへの電源供給とは別に給電用USBポートがついているので、ちょうどわたしのAir+Pocket Wifiと言うニーズにマッチする。この製品は製品のページの注意書きにもあるように15″以上のMacBook Proは未対応なので注意が必要だ。

購入はこのメーカの直販のネットストアから行った。最近は海外ネット通販もあまり心理的な障壁は感じない。もっとも、今まで購入してきたものが不良品ではなかったので苦労しなかったというのもあるかもしれない。返品や交換となると大変そうだ。このHyperMacの製品で初期不良を引いてしまって交換が大変だったという方もネットで見かけた。いざというときの対処は必要になるかもしれないというのは覚悟をしておくべきかもしれない。

注文時には充電用のACアダプタのコンセントの型がいくつかと、MagSafeのコネクタの型が通常のMacBook型かAir型かが選べる(MagSafeコネクタは無しも選べるけど、この製品を買うユーザはその選択肢はないんじゃないかな?あと、追加料金を払えばどちらもつけることもできる)。コンセント型はUSタイプでOKだ。MagSafeは(当然)Airタイプを選んだ。

発送まで、わたしが注文したときは一週間位というステータスだったのだけど、三日後ぐらいには既に発送されたというメールが届いた。さらに三日ぐらいで手元まで届いた。一週間ぐらいで手に入ったわけだ。あまり国内の通販と感覚的にも変わらない。

さて、肝心の製品だけど、パッケージは海外の製品の例に違わずかなり雑な感じだ。なかでもMagSafeコネクタは右の写真のように後からパッケージにテープで貼り付けられていた。しかも綺麗に貼ろうという意志が全く感じられないのが潔い。

MagSafeコネクタは先だけで根本の方はACアダプタでおなじみのアレだ。MagSafeの部分はアップルのACアダプタの部品の流用品という噂もあるのもうなづけるほどまんまな感じだ。

HyperMacの充電は付属のACアダプタで行う。戸惑ったのは、充電中といったステータスが一切バッテリー側には出ないことだ。ボタンを押して残量を表示することは出来るけど、それも一定時間で消えてしまう。

もしかして充電電圧制御を行ってないのではないかという不安もよぎったのだけど、充電ステータスはACアダプタ側に出るという仕様なのだった。ACアダプタにLEDがついていて、充電中なら赤、完了で緑になる。完了で緑になってコンセントより先にバッテリーを外すとそのまま緑というアバウト設計だ。

Airへの充電はMagSafeのコネクタを使って行う。このコネクタを挿すところと、ACアダプタを挿すところは別なのだけど、どちらにも挿すことが出来そうだ。その結果どうなるかは怖くて試していない。

Airへの充電は、さすがにACに比べると時間がかかる。ここでもMagSafeのコネクタ部分は充電中でオレンジになって完了で緑になるけど、完了後にAirから取り外しても緑のまま光ってるというアバウト設計だ。何かちゃんと制御すべきな所をやっていないのだろうか。わたしは、使用時はAirの内蔵バッテリで使い、移動時に充電させておくというような使い方をしている。

さて、色々不安要素もあるのだけど、トータルでみて大満足だ。Airの稼働時間は軽く2倍は伸びた。かつ、Pocket Wifi程度なら10時間ぐらい使いっぱなしでも4段階あるバッテリー残量表示の1目盛しか消費しなかった(線形に減るとは限らないけど・・・)。なので、AirをPocket Wifiと組み合わせて外出先で使うという用途ではバッテリー残量を気にする必要はなさそうだ。

重さは360g程だけども、見た目よりずっと軽い感じがする。Airと合わせて1.8Kgぐらいにはなるのだけど、それでもMacBook Pro 13″よりは軽いわけだ。大きさもAirのACアダプタと比較してみてもらったら分かるとおり、文庫本より小さい(厚みはやや太めの文庫本ぐらい)。

欲を言えばUSBポートがもうひとつあればさらに助かるのだけど、それは二股USBケーブルでも作って対応しようと思う。

こういうアクセサリがAppleの純正で出ないかなと思うのだけど、美意識的に絶対に出さないんだろうな。

Moving Layers

Animating UIViewのエントリーではUIViewにラップされたインターフェイスからCore Animationの機能、アニメーションをさせてみた。簡単なお約束ごとでアニメーションを実行できるのだけど、Core Animationのクラス、CALayerだとどうだろうか。

いきなり結論から言ってしまうと、CALayerを使うともっと簡単にアニメーションができてしまう。実はCALayerクラスのアニメーション可能となっているプロパティに値を設定すると、それは即時実行ではなく現在値からのアニメーションとして設定される。

つまり何も考えずにプロパティ値を設定するだけでアニメーションを実行できてしまうわけだ。これをCoreAnimationではImplicit Animationと呼んでいる。

たとえば、

theLayer.alpha = 0.0f;

とするだけで、レイヤーはalpha=0へと消えていく。

今回はImplicit Animationを使ってみようと思う。

Continue reading →

Exploring Into SuperCollider 6

前回までにClock(TempoClock)によってトリガーを発生させ、そのタイミングでコマンドをシンセサイザノードに送信することによって演奏を行うことが可能だと言うことを見てきた。

ただ、その操作はローレベル過ぎて、確かに可能なのだけど、毎回このような基礎の部分から行わないといけないとなると面倒だ。おそらく、プログラムをかける人なら必ずなんらかの手間の簡略化(クラス化なり)を行うだろう。

そしてSuperColliderにもそういった上位のラッパークラスが用意されていて、演奏をさせたいのに、それまでのことに煩わせらるといったことがないようになっている。

今回見ていくのはPatternクラスだ。Patternクラスは豊富な派生クラスが存在していて、名前が示すとおりパターンとして登録しておけばそれを演奏してくれるというものだ。必ずしも最初に決められたものだけではなく、ジェネレーティブなものもある、そしてそれらを複雑に組み合わせることも出来る。

パターンクラスを使うと、例えばこんなコードで演奏をさせることが出来る。

Pbind(\degree, Pseq(#[0,1,2],2)).play

さて、これを見ていると、ふと疑問がわいてくる。魔法というものが存在しないように、前々回見たような処理を誰かが行ってくれているわけだ。それは誰がどのようにして行っているのだろうか。どうやってコマンドは手元からシンセサイザノードに届くのだろうか。

その点に注目してPatternクラスを見ていこう。

Continue reading →

Exploring Into SuperCollider 5

前回は実際にサウンドの生成を行っているサーバscsynthを離れて、クライアントであるsclang側でのシンセサイザコントロールのさわりの部分を見てみた。

SuperColliderにはClockというクラスがあり、その機能はトリガーをかけて欲しい時間を登録しておき、トリガーのタイミングで行いたい処理を実行すれば良いという仕組みになっていた。トリガーは一度かかると解除されるので、繰り返し行いたい場合は処理の終了時に再度トリガーを登録しておく必要がある。

そのClockクラスの主要な派生クラスの一つがTempoClockであり、名前の通りテンポによる時間管理を行うクラスになっている。主要というのは、このクラスにはdefaultというクラス変数があり、クラスがロードされたときに暗黙にそこにインスタンスが生成される。そして、いろんな演奏に関するクラスがClockに関するパラメータのデフォルト引数(引数が明示的に指定された無かった場合も)としてTempoClock.defaultを使用しているからだ。

TempoClockにはプロパティtempoがあるのだけど、ではこのtempoのパラメータの単位はなんだろうか。メトロノームと同じくBPMでいいのか、はたまた違うのか。初期的に設定されているテンポはどれぐらいの速さなのだろうか。

今回はTempoClockに注目してみようと思う。

Continue reading →

Invitation to CoreAnimation

Animating UIViewのエントリーでUIViewにラッパーされたCoreAnimationを使ってみたのだけど、今回はもう一歩CoreAnimationの世界に踏み込んでみる。とはいっても、アニメーションさせようっていうわけでなく、CoreAnimationで用意されている機能を使ってちょっとおいしいところをつまんでみようかということなのだ。

CoreAnimationはOSXではLeopardで追加された機能の一つなのだけど、iPhoneOS(おっとiOS)では最初から使える機能だ。ただ、CocoaとCocoa touchの類似性を保つためなのか、そのViewとの関係性は同じように実装されている(何となく後付け的な感じがうかがえる)。

UIViewに対応してそのCoreAnimationレイヤーであるのがCALayerクラスだ。layerプロパティがUIViewに用意されている。ちょっとわかりにくいのが、UIViewとしてもヒエラルキーを組めるのだけど、それとは別にCALayer側でも親子構造が組めるということだ。

今回扱うのはこのCALayerクラスだ。いくつかプロパティを持っているのだけど、注目するのは形状に関するプロパティだ。

Continue reading →

Exploring Into SuperCollider 4

前回までのところで、シンセサイザを作り(SynthDef、Synth)、そのラッパクラス(Synth)を使いクライアント(sclang)からサーバ(scsynth)を操作できるというところまでたどり着いた。

SynthDefのコンストラクタの2つめの引数ugenGraphFuncで渡される関数オブジェクトの引数が、すなわちそのシンセサイザのコントローラとなり、Synthクラスのsetメソッドを使って値をセットすることが出来る。

とりあえず演奏すべきシンセサイザを作るところまでは来たので、次はそれを演奏させたい。手動で値をセットするのも良いのだけど、ある程度は自動演奏させたい。

SuperColliderには演奏させるための仕組みが色々と用意されている。今回ピックアップしたのはRoutineクラスだ。流れ的には、必要なコントロールパラメータを設定し、必要なだけスリープする(次のタイミングを待つ)、その繰り返しが単純明快なので、サーバ側でのUGenの時のようにクライアント側のSuperCollider探求のとっかかりとして最適なのではないかと思ったのだ。

話の舞台はサーバからクライアントに移る。

Continue reading →

Animating UIView

OSXのLeopardからCoreAnimationというフレームワークが追加された。それによってCoverFlowなんかを実現している。それまでは空間的な管理しか行わなかったGUIシステムにおいて、時間の管理もOSが面倒を見てくれるようになったというのが、CoreAnimationのキモなのではないかと思う。

そして、OSX系の流れをくむiPhoneOSにもCoreAnimationは含まれている。iPhoneOSはOSXの紆余曲折のまだ後の方に出たということもあり、構造的にはモバイルOSにしてはかなりモダンな、OSXの成功も失敗も踏まえた上で設計されていると感じることがある。

さて、iPhoneのCoreAnimationだけど、かなりお手軽に使う方法が用意されている。ダイアログをビヨヨンとだしたり、スライドしてカットインさせたり、はたまた二つのViewをクロスディゾルブさせたり。UIViewControllerのトランジション効果なんかにもプリセットのアニメーションパターンが用意されているのだけど、簡単なお約束でアニメーションさせることが出来るので使わない手はない。

今回デモ用にEscapeButtonというジョークソフトを軽く組んでみた(ほんとに数行しか書いてない)。名前からして出落ちな感もあるけど、実装を見つつご紹介しようと思う。

Continue reading →