プログラミング

Ruby1.9のlambdaをアロー演算子に。Hash#perlish!

Ruby1.9ではlambdaを->で書けるようになりました。 lambda { |x| x+1 } # これと -> x { x+1 } # これは等価 lambdaと->は文法上の扱いが異なります。 p(lambda{}) # => <Proc:0x9696dc@(irb):1 (lambda)> plambda{} # NoMethodError p(->{}) # => <Proc:0x95e29c@(irb):2 (lambda)> p->{} # => <Proc:0x95bea0@(irb):3 (lambda)> 要するに->{}はデリミタ不要と</proc:0x95bea0@(irb):3></proc:0x95e29c@(irb):2></proc:0x9696dc@(irb):1>…

JavaScriptで波をつくろう。リアルタイム波形生成&再生

前のエントリでこんなことを書きました。 JavaScriptで波形データを読み書きすることができる。しかし再生するのは難しい。 HTML5のaudioタグとData URIを組み合わせればできないこともないが、コストが大きすぎる。 コストが大きいのは音声ファイルが大きい…

JavaScriptでwavファイルを読み込んで波形表示するサンプル

動画でリッチなことできるんなら音声でもできるんじゃね? と思ったので書いてみました。http://yanagiatool.appspot.com/jsaudio/load.html (FireFox3.6系列のみ) ローカルからwavファイルを画面にドラッグアンドドロップしてみてください。ゆっくり波形…

Webブラウザで動画編集!

html5で videoの任意のフレームをcanvasに描画するメモ - 超自己満足プログラミング http://d.hatena.ne.jp/favril/20100225/1267099197 昨日この記事を見て、これはすごい! すごいすごい! ってなって、これができるんならWebブラウザだけで動画編集できる…

Core Imageフィルタで平行移動がしたい

考えたけどできなかったという話。 Core Imageフィルタで平行移動がしたい こういう画像から こういう画像を作りたい。 フィルタでできると何がうれしいの? 平行移動した画像を別のフィルタの入力にできる。 普通に平行移動すると、 [ciContext drawImage:i…

オーディオプログラムを書く時は必ずエラーチェックを書く

Core Audioのプログラムをエラーチェック無しでガシガシ書いて、ためしに動かしたら耳が死にそうになりました。 プログラミングをしていて肉体的ダメージを受けたのはこれが初めてです。というかオーディオプログラムまじ危ないね。これは人を殺せるレベル。…

ADCサンプルのCIVideoDemoGLが間違っている気がする

http://developer.apple.com/mac/library/samplecode/CIVideoDemoGL/index.html これのコードが間違ってる気がした。 VideoView.mの1075行目あたりの while(--i > 0) { /* なんかあやしい! */ memcpy(flippedContextPixels + ((outputHeight - i - 1) * con…

Elis進展 #11 テキストレイヤー

アンチエイリアスがかからないという致命的なバグつき! どうすんだこれ!

Elis進展 #10 そろそろα版

そろそろα版をリリースします。 α版リリースの意図 OSSでα版も何もなくね? って感じですが、今リリースしたい理由があります。 ふつうのMacでのパフォーマンスを知りたい 僕が使っているMacは現行のiMac(24インチ、Core2Duo 2.93GHz、GeForce GT 120)です。…

QTMovieのaddImage:forDuration: withAttributes:で使えるコーデック

QTKitを使うと簡単に動画を書き出せるよ! とQTKitのリファレンスに書いてあるけど、書き出しに使えるコーデックの記述がどこにもない。 なんでだろう? Appleはプログラマに動画ソフトウェアを書かせたくないのかな? ドキュメント作らなければみんなQuickT…

Elis進展 #9 キーフレームのUI

キーフレームをCore Animationで可視化しようとしたらすさまじいものができてしまった。 画像はトラックの上にキーフレームの状態を表示したところ。これを表示しながらキーフレームを追加すると、この表示全体がアニメーションします。……言葉じゃ伝わらない…

うごくサンプル

【ニコニコ動画】Mac用の動画編集ソフトを作ってみる 動いているサンプルをニコニコに上げました。コンセプトビデオみたいなノリ。 α版リリースは来週くらいにできるとうれしいなあ。 ライセンス 公開する時はzlibライセンスにします。 NYSLでも良かったんで…

Elis進展 #8 Elis → Elis Colors

「Elis」という名前は非常にクールでかわいいのですが、ユニークな名前でなくて、僕がエゴサーチするときに困るので、「Elis Colors」に改名します。 エレガントでかわいい子に育てますのでよろしくお願いします。 その他の改名の理由 現状のElisはプロトタ…

Elis進展 #7 ふりだしにもどる

今日はがりがりデバッグをしました。自分専用アプリなら満足できるくらいの安定性になりました。 でもエラー処理をがりがり書いてたらコードが4000行を超えてしまって、こんな長いコードを保守したくないなあとか思いました。なのでゼロから書き直すことにし…

Elis進展 #6 リアルタイムエフェクト

動画にエフェクトをかけられるようになりました。リアルタイムで。 mp4な動画を再生しながらブラーとかガンマ補正とかできてなんだか楽しい感じです。

Elis進展 #5

Elisは昨日、QuickTimeベースからQTKitベースに書き換えたんですけど、パフォーマンスと安定性が残念なことになってしまったので、またQuickTimeベースに戻しました。しかしQuickTimeの安定感は異常。30秒間mp4を再生するとmmapに失敗して落ちるQTKitとは大…

Snow LeopardのQTKitは64bitで動かない

Snow Leopard + Quick Time Xで、動画編集にも64bitのパワーを。そんなのは幻想です。現実を見ましょう。 要点 動画を本格的に扱うソフトウェアを作る場合、「指定した時間のフレーム画像を得るメソッド」が必要になります。 でも、「指定した時間のフレーム…

Elis進展 #4 UIがつきました!

がりがりデバッグして、リファクタリングして、Quick Time Xを使うように書き換えて、UIつけました。 もうちょっとで公開できそうな感じ。 リファクタリングしてわかったこと QTKitのframeImageAtTimeメソッドは64bitで動かない。開発者ML見たら「32bitで動…

Elis進展 #3

モデルもできたしデバッグするか! ということでデバッグをした。 そしたら落ちまくった。さすが突貫実装。 デバッグ中に気づいた/分かったこと。 QTMovieのsetCurrentTimeメソッドを呼んでシークするとたまに落ちる。 NSArrayにnilは入れられない。 NSDicto…

Elis進展 #1

ひな形だけのプロジェクトは作ってあった(XCode 3.1)ので、それをElisにリネーム。 Modelをざっくり作った。動画は全部Core Imageへ画像化してから扱うことにした。 画像の取得にQTKitのframeImageAtTimeを使ったら10fpsくらいでしか表示できなかった。最適…

編集ソフトの名前はElisになりました

ピンと来たのでプロジェクトネームはElis(エリス)にしました。クールでかわいい良い名前です。これから頑張って大きくしていきます。よろしくお願いします。

Elis進展 #2

ずいぶん前にモデルの一部だけ作っておいたのを思い出してコピペしてきた。ちょちょっと書き加えてモデル完成。結果を表示するビューも作った。 今日まででできるようになったこと 複数の動画を重ねて、リアルタイムで結果を見られる。 動画にCore Imageエフ…

動画編集ソフト進展

いろいろ決めた。夕飯食べたら実装し始める。 目的 VideoStudio/PremiereElementsみたいな普通のインターフェースな動画編集ソフトを作る。 方針 レガシーな物は使わない。 新しいテクノロジをたくさん使う。 処理速度よりも実装のし易さを重視する。 for On…

Mac用の動画編集ソフトを作ります

Cocoaがなんとなくわかってきたので、少し前に話した動画編集ソフトを作ることにしました。CocoaとMac OS Xのパワフルなテクノロジを使えば3日くらいで作れるはず! たぶん!

GCDが超べんり

Snow Leopard買いました! 入れました! rubygemsが死にました! ところでGCDが超べんりです! GCDを使うと非同期処理が簡単に書ける! CocoaのQTKitとかを使ってこんなことをすると音ズレするんですが、 QTMovie* array[3]; int i; array[0] = [[QTMovie al…

Imager::AnimeFaceをRubyから使えるようにしました

Perlでアニメ顔を検出&解析するImager::AnimeFace http://d.hatena.ne.jp/ultraist/20090412/1239497216このライブラリをRubyから呼べるようにしました。Mac OS X Leopard で動作確認してます。 使い方 動作にはnvxsとRMagickが必要です。下のアドレスから…

Imager::AnimeFaceを使ってみたかった

Perlでアニメ顔を検出&解析するImager::AnimeFace - デー http://d.hatena.ne.jp/ultraist/20090412/1239497216これが結構前から気になってて、アニメ顔認識! なんか面白いことができそう! とか思ってたんですが、Perlはさっぱりなので後回しにしてました…

Objective-C = C + 変態マクロ

事前知識無しでObjective-Cのプログラムを読もうとしたら無理だったのでメモ代わりにまとめておく。 Objective-CはCにオブジェクトシステムがくっついたもの C + オブジェクトシステム = Objective-C 同じオブジェクト指向でもC++とは全くの別物らしい。 メ…