Hatena::ブログ(Diary)

koyachiの日記 このページをアンテナに追加 RSSフィード

2010/09/22

ChucKの軽量スレッド

Chuck論文を斜め読みした。ホームページトップにもあるようにChucKはリアルタイム音声合成/作曲/パフォーマンスを目的としたシステムで、強力に正確な時間(strongly-timed)なこともウリにしている。論文ではその時間管理の部分と軽量スレッドの関係についても触れられていた。

ChucKで音を出すには、D/A Converter(dac)へ何らかのオシレーターを接続し、必要ならオシレーターの設定をした後、音をならしたい時間を指定する。最後の音をならす時間指定の前までがChucKでの軽量スレッドの実行単位(Shredと呼ばれている)となり、鳴らす音の時間指定した時点で音声エンジンによって音声処理され、Shred切り替え処理(Shredulerと呼ばれる)でキューにいるShredが処理される。以下は単一Shred時のフロー(論文だとp.77, fig.3.34)

複数Shredを並列実行する場合はsporkにShredとして実行する関数を渡す。OSCMIDI等の外部信号イベントへの反応のためのハンドラ登録もsporkで行う。この辺りはjavascriptなんかでイベントハンドラ登録するのと同じ。sporkは先割れスプーン(spoon + fork)のことなのでfork意識してるはず。

以下は時間指定の部分だけ抜き出したコード例。

100::ms => now

'=>'は代入演算子みたいなもので、上記はコード実行時から100ms経過するまで待機、という意味になる。ソースは見てないけど上記のようなnowへの代入が実行された時点でshredulerに制御を返して他のshred処理をしてる、というような記述が論文中にあった。nowへのduration代入でなくme.yield();すると時間をまたずにその場でshredulerに処理を返せる。この書き方だと軽量スレッドをサポートする一般的なプログラミング言語の実行単位切り替えに似ている。

ChucKで軽量スレッドを採用する主なメリットは、OSスレッド機構でなくユーザ空間の協調スレッドを使うことでコードを書く人の意図したタイミングでShredを制御できること、と書いてあってこれについては時間軸を持つメディアを扱うものらしいと感じた。あとは普通のthreadだとdead lock気にするの嫌とかスケジューラがユーザ空間で動いてるからカーネルに手を入れずに最適化できるとか書いてあってこれらは普通のプログラミングと変わらない。

論文中では他にもコンピュータを使った作曲システムの歴史とかリアルタイムにコード変更反映するためのVM周りの話とかパフォーマンスと関係するon the fly programmingの話とかあって面白そうな感じでした。

2010/09/17

Thomas Ruffのインタビューを読んだ。内容については前もどこかで似たようなものを読んだことがあったので特に思うことはなかったのだけど、人からnudesいいよと聞いていながら印刷物は見たことなかったなと思ってネットでjpegs買ったら思ってたより大きいものが届いた。一般的な写真集より大きめ紙に印刷された写真でDCTの8x8ブロックの影響が見える。ネットで検索して見れるものとの違いは媒体の性質を除けば大きさだけなんだけど、いい。

それと1年くらい前から見たいなーと思ってたvalerie phillipsのi can’t believe a girl is playing me metallicaも見た。こちらは思ってたよりも小さい本で。viktoriaかわいい。

2009/12/27

年報2008-2009

確か2007年9月いっぱいで前の仕事を辞め就職活動らしきものを始めたのは一年後の2008年10月頃、決まって働き出したのは2009年2月なので17ヶ月好きな亊してた。

今の会社にはperl技術者として入ったのだけど色々考慮した結果自分の担当箇所はruby化することにした。移植作業こなしつつ現行バージョンのメンテ/バグフィックス/今まで対応してなかった入力形式に対応するための修正といった感じ。あのサーバ重いから次はこの構成にしようとかは今までなかったので楽しい。

echonestがおもしろくてrubyのechonestモジュールの元ネタ書いたり、ruby-echonest使うこと前提でscissorに乗ってビデオ切り刻むモジュール書いたりした。http://www.youtube.com/user/rtk2106#g/uにある検索避けっぽいタイトルが作例でコードはgistのどこかにあるはず。その流れでopenframeworkも触ったんだけどlinux版のビデオまわりがいまいちで途中で放置した。ISMIRにechonestの人とBBCの人が来てて興味はあるけど平日だし学術的知識なさすぎなので行くのはやめといた。

wonder-wall.comが出たとき昔似たようなことやったことを思い出したのと社内flash勉強会でなんかやれと言われたタイミングとあったので一部再現したのがこれ。社内flasherの方にもネットでバーンと発表すればいいじゃないですかみたいな亊言われたんだけど、これは自分が今やることじゃないんです、とさらっとリンク貼る程度にした。

仕事絡みだとperlからの移植ついでにでTheSchwartz使ってるとこをQ4Mにしてhttp://github.com/koyachi/ruby-q4mとかワーカープロセス管理にhttp://github.com/koyachi/ruby-log0xとか作ってる。log0xは元々社内にあったプログラムruby化&社内情報隔離&WorkerManagerの影響受けて作ってるもの。プロセスまわりとかやってる影響で今までなんとなくしか知らなかったlinuxの低レイヤも詳しくなりつつある。

kathy graythonさんのブログがおもしろくてとりあえず3年分くらい見た。New York Minute Bookも買った。本の内容はブログのどこかにかなり載ってるけど探すの面倒なので興味ある方は探してみてください。

ucnvさんがおもしろかった。gif-glitch, aviglitch, datamoshing, とかとか。役に立たないけど技巧的なものばかり。誰かも言ってたけどプレゼンテーションをほとんどやってないってだけでやってることは有名な人も含めてそこらの人よりすごい。

unicode posterのあたりからユニコードグリフおもしろいなーと思い始めてtwitterでの携帯絵文字を使わない文字コミュニケーションでboxer(o'-')-oとかdecodeunicode,unifaces,newmoticons,twitclipart,TW1TT3Rartとか他にもあると思うけど比較的普通の人もこういうの見て真似して意識せずにnetartっぽいことできてるのがおもしろい。僕もランダムで表示しておもしろグリフ探すやつ作った。

今年は割とまじめに仕事してた気がするので程々にして仕事に使えないこともなんかやります。ホームページとか。

記事一覧を見る / 言及キーワード一覧 / Bookmark / Playlist / About : koyachiのはてなダイヤリー RSSフィード
Error : RSSが取得できませんでした。