はてなブックマークに追加

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
はてなブックマークに追加

携帯ゲーム機の限界


DSにしろPSPにしろ携帯型ゲーム機って
どんどん進化しているみたいだけど、
音に関してはほとんど進化してないんじゃないかな?

いい音で聞きたければ、外部スピーカつければいいぢゃん
という話なんだけど、それは携帯型という範疇を逸脱してる。

携帯型ゲーム機の音が悪い理由は3つ。
1.スピーカの種類が音楽用ではない。
2.そもそも、収録音がわるい
3.人間の頭が補間できない

1と2は大雑把には消費電力とデータ容量に起因しているで
技術的にはどちらも解決可能。

面白いのは3。

映像の場合。
映像とは3次元空間のものを1次元分押し潰して、2次元にして表示したもので、
人間は映像を見る場合、潰された1次元分を脳内補完して3次元として捉えることが出来る。
だからこそ、3Dテレビのインパクトが薄いんですが・・・

逆に音楽の場合。
音楽はそもそも1次元のデータなので、失われた部分は0次元に落ちる。
そうなると、人間の脳で保管するのは難しいわけです。

要するに人間の脳っていうのは
2D->3D補間は比較的容易なのに対して
0D->1D変換は難しい、ということですかね。
勿論、数学的にはどちらも復元不可能です。


では、解決案。

音楽を2次元で収録する!
(自分で書いてても意味がわかりませんがw)
(とりあえず、びっくりマークをつけてみたしたがw)

そもそも、これってサンプリングレート上げることと同義だよね!?
じゃぁ、それでいいぢゃん。
結局、3は2の部分集合ってわけか。


眠いし、また今度考える。

スポンサーサイト
はてなブックマークに追加

iPhoneアプリ・電卓をつくる その1




サイトを移行しました。
iPhoneアプリと、そのプログラム



これから数回にわたって電卓のiPhoneアプリを作っていきたいと思います。
単純に作業手順だけでなく、どうやって設計するのか?
まで伝えられたら良いかなと思ってます。

もとおもとはゼミの資料にする予定だったのですが、
せっかくなので公開しちゃおうということで(笑)

今回は難しいことは考えずに最小限の機能だけ実装していきましょう。
とりあえずの目標はiPhoneにデフォルトでついているこれ。

calc1.jpg

といっても、いきなりこれだけのものを作るのは大変だから、
もっと手前の段階からスタートして、徐々に電卓へと仕上げていきましょう。

ということで、電卓の前身であるカウンタから作っていきましょう。
雰囲気はこんな感じ。野鳥の会がもってるやつのディジタル版ですね(笑)
インタフェースはこんな感じ。

calc2.jpg

プラスボタンをタップしたら、数字がカウントアップされるという、
なんとも簡単なアプリです。
簡単ですが、iPhoneプログラミングに必要な要素はたくさん詰まっているので、
丁寧に見ていきたいと思います。


まずはプロジェクトを作成します。
Xcodeの「新規作成」-> 「ファイル」->「新規プロジェクト」を選択。
プロジェクトの種類「Application」でテンプレート「View-based Application」を選択。
プロジェクト名は「Calc1」にします。

まずはInterface Builderを使って、インタフェースを設計します。
左側にある「グループとファイル」カラムから「Resources」フォルダの中にある
「Calc1ViewController.xib」ファイルをダブルクリックしてください。
IBが起動し、4つのウインドウが開くと思います。

次に、Viewと書かれたウインドウにライブラリウインドウから
パーツをドラック&ドロップします。
今回は、次のように部品を配置してください。

calc3.jpg


配置できたら、UIButtonをダブルクリックして、ボタンの中に「+」を、
同様にUILabelをダブルクリックして「0」を記入してください。
また、UILabelのフォントを大きくしておきたいので、
Viewウインドウで一度Labelをクリックし、フォーカスを当てた状態で
インスペクタを次のように調整してください。

calc4.jpg


ここまでで、インタフェースの設計は一旦終了です。
次回はXcodeに戻ってプログラムを書いていきましょう。


iPhoneアプリ・電卓をつくる その2









はてなブックマークに追加

松岡圭祐x4冊


松岡圭祐の千里眼シリーズ。

千里眼 The Start (角川文庫)
松岡 圭祐
角川書店
売り上げランキング: 75397


千里眼 ファントム・クォーター (角川文庫)
松岡 圭祐
角川書店
売り上げランキング: 172655


千里眼の水晶体 (角川文庫)
松岡 圭祐
角川書店
売り上げランキング: 171285


久々の松岡圭祐。
小学館で発売されているシリーズとは、
登場人物は同じにして、話は全く別のシリーズ。

いやぁ、小学館の焼き直しかと思って避けてたんですが
違ったんですね。早く読めばよかった。

相変わらず松岡ワールド全開。
一気に読ます力があります☆
そのせいで,夜更かし必死ですが(笑)

岬美由紀が今回も頑張っております。
僕としては一ノ瀬 恵梨香と鬼芭 阿諛子が好きなんですが・・・


霊柩車No.4 (角川文庫)
霊柩車No.4 (角川文庫)
posted with amazlet at 10.09.28
松岡 圭祐
角川書店
売り上げランキング: 323247


こちらは、霊柩車ドライバのはなし。
どうして、松岡はこうもキャラ作りがうまいのでしょうねぇ。
現実にいそうでいない、いや、いなさそうでいるギリギリの人物像。

森博嗣のキャラと比べると、断然リアルよりですね~。
まぁ、紅子くらいはいそうですが(笑)



はてなブックマークに追加

ToonPaint どうやってエッジ抽出しているんだ?


さて、今回紹介するiPhoneアプリは「ToonPaint」です。

toonpaint1.jpg

このアプリでは、読み込んだ写真を漫画風にアレンジして出力してくれます。
漫画は英語でToonなんで、そのまんまっちゃぁ、そのまんまですね(笑)
技術的にはトゥーンレンダリングなんて呼ばれ方もしてます。

このアプリでは画像を読み込むと、
まず、画像を線画化して画面に表示してくれます。

toonpaint2.jpg

このクオリティがすごい!!!
もうね、すごいの一言。

一般的に、画像の線画化にはエッジ抽出(edge detection)という技術が使われています。

このエッジ抽出には、有名どころで
・Sobel Filter (1次微分)
・Laplacian Filter (2次微分)
・High-Pass Filter (周波数ドメイン)
などのフィルタを使うんですが、
これらを単純に使ってもこんな綺麗なエッジが出るわけではない。

僕の「ぱすてる」ではエッジを抽出してから、
その連結性を考慮して、最終的にエッジとみなすかどうかのテストをしています。
いわゆるCanny edge detectionにもう少し手を加えたものです。

「ぱすてる」はこちらから(宣伝w)
pastel.jpg


おそらくこのアプリでは、アメコミ風するために特化した
エッジ抽出アルゴリズムが使われているみたい。
どうやってるんでしょう?教えて>エライ人

toonpaint3.jpg

オプションで、エッジの質やグレー領域・黒領域の変更もできます。
このへんからは技術的にも理解できる(笑)

toonpaint5.jpg toonpaint8.jpg

あとは塗り絵の要領で、元の絵から色をピックアップして、色を塗っていくだけです。
ワンタッチで変換しちゃうのではなくて、色が自由に塗れるのがいいですね☆


こういう、画像変換系はやはり(?)Adobeが強い。
After Effectでは動画からでもリアルタイムで変換できるようです。

こんな感じ。
toonpaint7.jpg

さすがAdobe。大御所ならではの質と機能を兼ね備えています。
でも、たった230円で、しかもiPhoneで動くToonPaintも負けてはいないと思いますよ!
ぜひぜひ試してみてくださいね!

ご購入はこちらから
banner.png


はてなブックマークに追加

贅沢論


17Fの部屋から夜景を眺めつつ

zeitakuron1.jpg

コーヒーとクッキーを食べながら

zeitakuron2.jpg

のんびり本を読んでいます。

案外幸せ(笑)

これまで、こういう贅沢に対しては無頓着な方だったんですが、
これはこれで、価値があるんだ。
要するに時間と空間をプロデュースしてもらって、
その対価にお金を払うというビシネスモデル。
ディズニーランドと発想は同じわけです。


昔は、こういう贅沢が全く理解できなかった。
いつの間に、理解できるようになったのでしょう?


それは、きっと、何かに没頭することが出来なくなったとき。
没頭することを諦めたら、残るのは外部環境でしかない。
そうしたとき、人は、贅沢ということを知るのでしょう。
それと引き換えに捨てたものこそが、贅沢だとは気づかずに。
はてなブックマークに追加

素敵BOXという名のフォルダ


僕のデスクトップの左上にはいつも
素敵BOXという名のフォルダがある。

sutekibox1.jpg

その名の通り、このフォルダの中には素敵なものがいっぱい詰まっている。
画像だったり、動画だったり、本のタイトルだったり。

sutekibox2.jpg

子供のおもちゃ箱みたいなものだ。
中身が整理されていないところも、また然り。


整理するということは、ものに属性をつけ、カテゴリで縛ること。
そうやって、整理していけば、
どんどん自由度が失われて、どんどん不自由に、
そしてどんどん明快になっていく。


人は分かりやすいことが大好きだから
整理することが大好きだ。
頭のいい人は、本質を抽出する能力に長けている。
ふたことめには、「その本質は・・」だ。
そういうのは、あまり好きじゃない。


すべてを曖昧なまま、
そして、自由なままにしておきたい。
そうすれば、いろんな物がいろんな次元で繋がり始める。
それは、とても綺麗なこと。
このインスピレーションは本質からは決して得られない。


素敵BOXの中はあらゆるものが部分であり、
部分があらゆるものを構成している。
部分は創発をくりかえし、
そしてインスピレーションへと収束する。


綺麗であるということと
余分ということは同義なのかもしれない。





はてなブックマークに追加

iPhoneアプリ開発のための参考書Top3


iPhoneアプリを作りたいんですけど、どの参考書で勉強したらいんですか?
という単純明快な問に対して、参考書マニアの僕が答えましょう(笑)

実は、大学の図書館に今発売されているiPhoneの参考書がほぼ揃っているんですね。
そして、僕はそれをすべて読んだわけですよw(さすが参考書マニア。別名暇人)
その上で、コレは読んどけ!を3冊ピックアップしてみましょう。


1冊目

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
赤松 正行
秀和システム
売り上げランキング: 3045


これ以上の入門書は、もう出てこないんじゃあないかと思わせるぐらい
素晴らしい本です。僕のゼミでもテキストとして使用しています。
ゼミと言っても、この本を最初から最後まで5回読ませるというスパルタゼミですが(笑)

1周目は理解しながらプログラムを打つ、
2周目は考えながら、本を見ながら打つ、
3周目以降は打つべし!打つべし!打つべし!です(笑)

ゼミをやる方は、この本を使えばとっても楽ですよ☆
ゼミをやられる方は、この本を使えば天国と地獄が見えますよ☆


2冊目

Beginning iPhone 4 Development: Exploring the iOS SDK
David Mark Jack Nutting Jeff LaMarche
Apress
売り上げランキング: 63492


こちらも洋書ですが、文句なしの良書です。
日本語に訳された本が出ていますが、ゴミですので注意してください。

この本の特徴は洋書ならではの丁寧な説明。
日本の参考書みたく「ページの関係上割愛します」ってのがない。
洋書は分厚くなっても良いから丁寧に説明するという風潮があるようです。
ちなみに「ページの関係上割愛します」と書いてある参考書は大概、ゴミ予備軍です。
(僕の経験上w)

こちらはアプリにまで仕上げるというよりも
各部品の使い方や説明などが丁寧にされています。
上で紹介した「iPhone SDKの教科書」とあわせて読めば
鬼に金棒でしょう(表現がFULLすぎる)


あらら。
2冊紹介したところで、無敵になっちゃいましたね。
実際、この2冊+Appleのリファレンスがあればなんとかなります。
ということで、ページの関係上3冊目は割愛しますか(笑)



3冊目


iPhone SDK Programming Manual
iPhone SDK Programming Manual
posted with amazlet at 10.09.24
株式会社テクノロジックアート
ソーテック社
売り上げランキング: 282587



この本は上の2冊とはちょっと毛色が異なっていて
どちらかというとiPhoneアプリのバックグラウンドというか
InterfaceBuilderが裏で何をやっているかといった内容に重点をおいて書かれています。

こういう、他の参考書ではあまり紹介されていないところが
しっかり説明してあったので、おっ!と思ったわけです。
今、パラパラ見返してみたんですけどXMLパースのサンプルとか載ってますね(笑)

全くこの本を見ずに
iPhoneネットワークプログラミング その5
書いてましたがw


ということで、これが僕のオススメ参考書Top3でした。
3冊目はエキストラな感は否めませんが、読んでも絶対損はしない一冊になっています。
くれぐれも2冊目は洋書で読んでくださいね(くどい)



はてなブックマークに追加

iPhoneアプリ:RSSリーダを作る




サイトを移行しました。
iPhoneアプリと、そのプログラム



iPhoneネットワークプログラミングの第4回と第5回
iPhoneネットワークプログラミング その4
iPhoneネットワークプログラミング その5
のまとめとして、今度はRSSリーダを作ってみましょう。

今回作るRSSリーダは、
プログラム内にハードコーディングされたRSSフィードから情報を読み取り、
iPhone上に記事のタイトルを表示し、各記事のタイトルをタップすると
Safariでその記事が読める、という非常に高機能な仕上がり(笑)
役に立たない度合いは、前回作成した画像ビュアといい勝負w
iPhoneアプリ:画像ビュアを作る

完成図はこちらです。
今回はプログレスバーすらついておりませんが・・

rssreader1.jpg rssreader2.jpg


さて、ではXcodeで開発を進めていきます。
毎度おなじみの手順ですが、今回はプロジェクトの種類をNavigation-Basedで作成しています。

Xcodeの「新規作成」-> 「ファイル」->「新規プロジェクト」を選択。
プロジェクトの種類「Application」でテンプレート「Navigation-based Application」を選択。
プロジェクト名は「RssReader」にします。

今回はIB側での操作はありません。
早速、Xcodeにプログラムを書いていきましょう。
といっても、ほとんどが概出のものですので、理解はしやすいと思います。

RootViewController.h
@interface RootViewController : UITableViewController 
{
NSXMLParser * xmlParser;
NSMutableArray *titles, *links;

NSString *currentElement;
NSMutableString *currentTitle, *currentLink;
}
@end


今回のプログラムでは記事のタイトルの他に、記事へのURLが必要なので
第4回の内容に加えて、currentLinkという変数を追加しています。
また、記事のタイトル、URLをそれぞれtitles, linksという名前のNSMutableArray に格納します。
図示すればこんな感じです。

rssreader3.jpg

はい、まともなプログラマならNSDictionaryを使いますね(笑)
今回は、サンプルプログラムということで分かりやすさ優先で。

次にRootViewController.mにxml用のデリゲートメソッドを追加していきます。
内容は第4回とほぼ同じですね。
didEndElementのなかで、記事タイトルとURLをそれぞれの配列に格納しています。

- (void)viewDidLoad {
[super viewDidLoad];

NSURL *xmlURL = [NSURL URLWithString:@"http://iiphoneapp.blog51.fc2.com/?xml"];
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];

// 領域確保
titles = [[NSMutableArray alloc] init];
links = [[NSMutableArray alloc] init];

// 各種設定
[xmlParser setDelegate:self];
[xmlParser parse];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];

if ([elementName isEqualToString:@"item"]) {
currentTitle = [[NSMutableString alloc] init];
currentLink = [[NSMutableString alloc] init];
}
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"title"]) {
[currentTitle appendString:string];
} else if( [currentElement isEqualToString:@"link"]) {
[currentLink appendString:string];
}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
[titles addObject:currentTitle];
[links addObject:currentLink];

[currentTitle release];
[currentLink release];
}
}


ここまでで、RSSのパースは完成です。次にTableViewの設定を行ないます。
下記の各プログラムをRootViewController.mに追加or編集してください。

まずは tableView:numberOfRowsInSectionメソッドを次のように変更してください。
ここでは、テーブルに格納する行数をタイトルの記事の数と指定しています。

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section {
return [titles count];
}


次に、tableView:(cellForRowAtIndexPathメソッドの最後(return cell; の前)に
下記の2行を追加してください。このように記述することで、テーブルカラムに記事のタイトルを設定できます。

int index = [indexPath indexAtPosition: [indexPath length] - 1]; 
cell.textLabel.text = [titles objectAtIndex:index];



さて、最後にセルがタップされた時のアクションを設定します。
1行目でタップされたセルの行数をindexに格納します。
2行目でlinks配列から当該URLをとりだし
3行目で改行文字の削除
4行目でSafariを開いています。

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
int index = [indexPath indexAtPosition: [indexPath length] - 1];
NSString * link = [links objectAtIndex:index];

[link stringByPaddingToLength:([link length]-3) withString:@"" startingAtIndex:0];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:link]];
}


ここまで記述できたら、実行して動作するか確認してみてください。
なお、この記事作成にあたっては、ここを参考にさせていただきました。
あわせて御覧ください。

はてなブックマークに追加

パステル!ぱすてる!バス出る!


iPhoneアプリ「ぱすてる」を本日リリースいたしました。
読み込んだ画像をパステル調に変換するiPhoneアプリです。

pastel1.jpg


例えば、こんなコスモスの写真を読み込むと・・

pastel2.jpg

こういうふうに変換されて出力されます

pastel3.jpg


もう一例。神戸はモザイクの写真です。

pastel4.jpg

こちらも、こんな感じに変換されます。

pastel5.jpg


画像の色合い、リアリティ、明度は自分好みに変更できます!
ぜひ、このアプリを使って、カメラロールの写真をパステル調にしてみて下さい☆

ご購入はこちらから。
banner.png
はてなブックマークに追加

iPhoneネットワークプログラミング その5




サイトを移行しました。
iPhoneアプリと、そのプログラム



第5回はiPhoneでXMLの解析をしてみたいと思います。

XMLの解析をするためには、XMLパーサが必要なのですが、
大きく分けて2種類のパーサが存在します。

それがDOM(Document Object Model)とSAX(Simple API for XML)です。
DOMでは、全てのXML情報を一度メモリに読み込み木構造に展開します。
それに対してSAXでは、シーケンシャルに情報を読み込んでいきます。
雰囲気的にはC言語でいうfgetsとgetcの違いみたいな感じです。

iPhoneではメモリの制約が厳しいため、DOMではメモリ不足が起こる可能性があります。
そこで、Cocoa標準のSAXパーサであるNSXMLParserクラスを使用します。

次に、RSSファイルのXMLの構造を見てみましょう。
itemタグで囲まれた部分が一つの記事に相当します。
ひとつの記事は、タイトル、概要、アドレス、更新日時などの情報から構成されています。

nsxmlparser1.jpg


ではNSXMLparserクラスを使って上のXMLを解析していきます。
View-Based ApplicationのViewControllerクラスにプログラムを追加していきます。

sampleViewController.h

@interface sampleViewController : UIViewController
{
NSXMLParser * xmlParser;
NSString * currentElement;
NSMutableString *currentTitle;
}
@end


sampleViewController.m

- (void)viewDidLoad {
[super viewDidLoad];

NSURL *xmlURL = [NSURL URLWithString:@"http://feeds.feedburner.com/TheAppleBlog"];
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[xmlParser setDelegate:self];
[xmlParser parse];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
currentTitle = [[NSMutableString alloc] init];
}
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"title"]) {
[currentTitle appendString:string];
}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
NSLog(@"adding story: %@", currentTitle);
[currentTitle release];
}
}


viewDidLoadメソッドの中でNSXMLParserのインスタンスを作成し、
その初期化処理を行っています。具体的にはRSSのURL登録とデリゲートの設定です。
viewDidLoad以下の3つのメソッドがそのデリゲートメソッドになります。

まず一つめのデリゲートメソッドでitemタグの入りを見つけます。
itemタグが見つかればタイトルを格納するための文字列領域を確保します。

nsxmlparser2.jpg

2つ目のデリゲートメソッドで、実際のXMLファイルの解析をします。
今回のプログラムではタイトルの文字列を取得し、currentTitleに繋げていきます。
タイトルなどの文字列はサーバから一度に送られてくるわけではなく、分割されて送信されてくるので、
このように、iPhone側でappendStringを用いて再構成する必要があります。

nsxmlparser3.jpg

最後のデリゲートメソッドは解析終了時にコールされます。
今回のプログラムではここでタイトルを表示しています。

nsxmlparser4.jpg


実行してみて、実際にブラウザで見ることが出来るものと
タイトルが一致しているかどうか、確認してみてください。

開発アプリ

iDOF 色影 ラテアート ぱすてる

プロフィール

Author:hokuson
京都在住。iPhoneアプリ「色影」や「iDOF」の開発者。アプリのレビューとかもしてみる。博士後期課程@R大学。ついに就職活動なるものをしなければいけないらしい。誰か雇ってください。笑。

カレンダー
09 | 2010/09 | 10
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
カテゴリ
最新コメント
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。