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

スポンサーサイト

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

歌詞でコンボを狙う!Lyric Legend


iPhoneアプリ Lyric Legend の紹介です。

このアプリでは奏でられる歌詞に合わせて
画面をタップするという新感覚の音ゲーです。

起動画面がこちら。
一人プレイの他に、ブルートゥースを利用したマルチプレイも可能です。

lyriclegend1.jpg

次にゲームで使う曲を選択します。
デフォルトで付いてくるのは3曲です。
新しい曲を買うことでレパートリーに追加できます。

lyriclegend2.jpg

最後に、難易度を選びます。

lyriclegend3.jpg


さて、いよいよスタートですよ!
歌われている歌詞に合わせて画面の単語をタップ!?
いや、これ、めっちゃ難しい(笑)

lyriclegend5.jpg

頭の中に1Mbyteくらいのバッファが必要です(笑)
きっと、同時通訳の人はこう言うの得意ぽい。
僕、無理w

いやー、おら、おら、って押すんですが
単語探している間に曲進んでるしー!
きっと、一日中やってたらTOEICの点数10点くらい上がりそう~
全然、押せないのが悔しくて、なんやかんやではまってます☆


曲の合間にはThe音ゲーみたいなゲームも出来ます。
こっちは、どんとこいですよ!

lyriclegend4.jpg

でも間奏が終わると・・・

lyriclegend6.jpg

orz.... みたいな(笑)


ぜひ、みなさんも体験してみてください。
ご購入はこちら。
banner.png


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

花化粧


flowers2.jpg

ディジタルな作品をひとつ作ってみたいなぁー、
と試行錯誤してみた。


参考書はこのへんを使用。

Collage Design Works Photoshop & Illustrator (CD-ROM付)
scrap-graphic
翔泳社
売り上げランキング: 42616


Photoshop+僕の実力ではこのへんが限界~。
スキャナで読み込んだ手書き素材使えばもう少しアナログ感が出るかも。
もすこしがんがる!たのしい!


こういう作品作るのって
目標もなければ、結論も、理論もゴールも答えもなーんもないわけですよ。
やってみてうまく行ったら、それでよし。
よくなる限り永遠に続けられるし、いつでもやめられる。
研究には無い楽しさがすべて詰め込まれている感じ。


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

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



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



これまでは、一度にひとつのページしかダウンロードしませんでしたが、
ブラウザで同時に複数のタブを開くときなどには、
一度に複数のファイルをダウンロードする必要があります。

このように、一度に複数のHTTPリクエストを処理したい時には
NSOperationクラスを使用して、処理の流れを操作します。

NSOperationクラスはメソッド呼び出しなどを
独立した操作としてカプセル化するクラスであり、
通常はこのクラスのサブクラスを作成して使用します。

イメージ、こんな感じ。
nsoperation.jpg

下に、NSOperationを継承したサブクラスを示します。

RequestOperation.h
@interface RequestOperation : NSOperation {
NSURLRequest* _request;
NSMutableData* _data;
}
- (id)initWithRequest:(NSURLRequest *)request;
@end



RequestOperation.m
@implementation RequestOperation
- (id)initWithRequest:(NSURLRequest *)request {
if (self = [self init]) {
_request = [request retain];
_data = [[NSMutableData data] retain];
}
return self;
}

- (BOOL)isConcurrent {
return YES;
}

- (void)start {
if (![self isCancelled]) {
[NSURLConnection
connectionWithRequest:_request delegate:self];
}
}

- (void)connection:(NSURLConnection*)connection
didReceiveData:(NSData*)data {
[_data appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection*)connection {
NSLog(@"%@", [[NSString alloc] initWithData:_data
encoding:NSASCIIStringEncoding]);
}


- (void)dealloc {
[_request release];
[_data release];
[super dealloc];
}
@end


プログラムの内容は殆どの部分が、これまで書いてきたものを
NSOperationの中に詰め込んだだけになっています。
startとisConcurrentメソッドは、それぞれNSOperationクラスのもつ
メソッドをオーバライドしたものです。

startメソッドは処理の開始時に呼ばれるメソッドであり、
この中で、NSURLConnectionクラスの設定を行っています。
また、isConcurrentメソッドは非同期通信を行うかどうかの
フラグを返すメソッドであり、このプログラムではYESを返しています。

ここまでで、NSOperationのサブクラスは完成したので、
このクラスを呼び出して、複数HTTPリクエスト処理してみます。
ドライバプログラムはいつもどおりViewControllerのviewDidLoadメソッドの中に記述します。

SampleViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
_queue = [NSOperationQueue mainQueue];

NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]];
RequestOperation* operation = [[RequestOperation alloc] initWithRequest:request];
[operation autorelease];

NSURLRequest* request2 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.yahoo.co.jp"]];
RequestOperation* operation2 = [[RequestOperation alloc] initWithRequest:request2];
[operation2 autorelease];

[_queue addOperation:operation];
}


はじめに、処理を追加する待ち行列NSOperationQueueを作成しています。
次に、2つのHTTPリクエストを作成し、先程作成したQueueに追加します。
これで、実行すれば自動的にリクエストが順番に処理されていきます。

次回はXMLのパースについてのおはなし
iPhoneネットワークプログラミング その5

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

巨大アヒル再来!?


iPhoneアプリ AhiruCam の紹介です。

このアプリでは、好きな場所に
アヒルを置くことが出来ます。

このアプリを見たときに思い出したのがこれ。

 ahirucamera0.jpg

1年くらい前に大阪は中之島に浮かんでいた巨大アヒル。
これ、合成写真じゃなくて本当に浮かんでたんですよ!

日本とオランダの通商400年を記念して、
オランダ人のデザイナーが製作したようです。
日本で展示するなー、スケールが・・(笑)

AhiruCamは、これと似たような写真が作れちゃうアプリです。
起動すると画面上に右向き左向きのアヒルが表示されます。

ahirucamera1.jpg

このアヒルをタップすると画面上に
アヒルが出現!

ahirucamera2.jpg

ピンチインやローテイトなど、
指のジェスチャでアヒルの姿勢を変えることが出来ます。

うにうに広げてみたり~
ahirucamera3.jpg

いい感じになったら、右下のSaveボタンで
カメラロールに保存できます。
完成した写真がこちら。

ahirucamera3_5.jpg

大阪巨大アヒルの再来!とまではいきませんが
無料で楽しめちゃうアプリでした。
あまりにアヒルが浮いていたので(いや、海にじゃないよ)
ちょっとだけ、Photoshopで手を加えてみた。

ahirucamera5.jpg

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




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

ガラスのCD


そろそろ、プリメインアンプを買い換えようかなぁ、
と思って価格.comを片手に悩む日々。

そうそう、そういえば昔、中島みゆきがガラスのCDを出していましたね。
「ガラスのCDは劇的に音質が向上します!」というふれこみだったのですが・・・
ホントに?プラシーボ効果の予感w

殆のデータががディジタル化されている今日び、
当然CDも1と0でデータは構成されているわけです。
材質がプラだろうが紙だろうがガラスだろうが
読み出したらやっぱり、1か0ですよ。

ガラスの方が、読み取り誤差が少ないということか?
とも考えたけど、エラー率なんて0.01%以下でしょう。
エラービットなんてゴミのようなものですよ?
こんなので「劇的」に変わるのなら
「劇的」ビフォーアフターにでも出ればいいじゃん(意味不明)

つらつらとデメリットばっかり書いてきましたが、
メリットもあります!
あります・・
ありますか?

うん、落としたら割れてしまうことかな!
いいじゃないですか、このはかなさ。
クッパの火の玉にあたっても生きてたり、
協会に行ったら死んだキャラが生き返ったりするよりは
よっぽど自然じゃぁないですか。
はてなブックマークに追加

アバターが作れるMakeMe


iPhoneアプリ Makeme の紹介です。

このアプリでは、自分そっくりのアバターを
簡単につくることができます。

予想以上に自分に似たアバターが出来たのには
ちょっとびっくりしました(^^;;)
Twitterのアイコンで使ったろか!とも思いましたがペンディング中(笑)
ちなみに、今から作るアバターは管理人Hokusonとは
似ても似つかないアバターなのであしからず(笑)

起動画面では、男女どちらのアバターを作るかを選択できます。

makeme1.jpg

選択するとすっぽんぽんぽんぽんの
人型が表示されます。ここにいまからパーツを置いていきます。

画面上にあるのがカテゴリパーツで
下側のメニューがディテールのパーツです。
インタフェースが分かりやすいのも
このアプリの良いところですね☆

makeme2.jpg


さて、ぽんではなんですので(笑)
味付けしていきます。まずは髪の毛から。
髪の毛の形・ボリュームだけでなく、
右側のカラーバーから、色合いも選択することが出来ます。

makeme3.jpg


ここからは目・鼻・口・服とどんどん
パーツを追加していきます。それぞれパーツの候補が
充実しているので嫌でも自分に似たパーツが見つかります(おそらく:D

makeme4.jpg makeme5.jpg

さてさて、だいぶ完成に近づいてきましたね。
まだズボンを履かせていないので、ちょっと破廉恥(^^;;)
ということで、先日のmosaicfaceを使って
モザイクをかけてみました(笑)うん、楽しい!

makemea.jpg


冗談はさておき、ズボンと靴も履かせて完成です。
その他にメガネとかリボン(?)とかカチューシャ(??)とかも
選択できますので、趣味に合えばどうぞ(笑)


makeme6.jpg


ご購入はこちら
banner.png


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

iPhoneアプリ:画像ビュアを作る




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



さて、これまで3回のiPhoneネットワークプログラミング
iPhone ネットワークプログラミング その1
iPhone ネットワークプログラミング その2
iPhone ネットワークプログラミング その3
を書いてきました。
ここいらで、総まとめとして一つアプリを作ってみたいと思います。


今回作成するアプリは画像ビュアです。
Downloadボタンをタップすると、
プログラム中にハードコーディングされたURLから画像をダウロードしてきて
iPhoneの画面上に表示するという、実用性0のアプリを作ってみたいと思います(笑)

完成図がこちら。
生意気にもプログレスバーなどもつけてみました。
(そのせいでややこしくなったけど・・・)

iphonenetworkprogramming2.jpg

さて、ではXcodeで開発を進めていきます。
毎度おなじみの手順ですが,

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

エディタが起動したら、まずはIBでGUIを設計します。
左カラムから「グループとファイル」->「Resources」-> PhotoViewerViewController.xib
をダブルクリックするとIBが立ち上がりますので、
次の部品をライブラリからドラックしてきて並べてください。

iphonenetworkprogramming1.jpg


ここまでで、IB側での作業は終了です。
次はXcodeに戻ってプログラムをかいていきます。

PhotoViewerViewController.h
@interface PhotoViewerViewController : UIViewController {
NSFileHandle *file;
NSString *filePath;

IBOutlet UIImageView *imageView;
IBOutlet UIProgressView *progressBar;
double expectedContentLength;
}
-(IBAction) downloadButtonPressed:(id)sender;

@end



PhotoViewerViewController.m
- (void)connection:(NSURLConnection *)connection 
didReceiveResponse:(NSURLResponse *)response {
expectedContentLength = [response expectedContentLength];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
UIImage *img = [[UIImage alloc] initWithContentsOfFile:filePath];
imageView.image = img;
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (file == nil) {
NSFileManager *fm = [NSFileManager defaultManager];
[fm createFileAtPath:filePath contents:[NSData data] attributes:nil];
file = [[NSFileHandle fileHandleForWritingAtPath:filePath] retain];
}
progressBar.progress = progressBar.progress +
((long double)[data length] / (long double)expectedContentLength);
[file writeData:data];
}

-(IBAction) downloadButtonPressed:(id)sender
{
NSString *url = [NSString stringWithString:
@"http://blog-imgs-45.fc2.com/i/i/p/iiphoneapp/sky.jpg"];
NSString *directoryPath = [[NSHomeDirectory()
stringByAppendingPathComponent:@"tmp"] retain];
NSString *fileName = [url lastPathComponent];
filePath = [[[directoryPath stringByAppendingPathComponent:fileName]
stringByStandardizingPath] retain];
NSLog(@"%@", filePath);

NSURLRequest *request = [ NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[NSURLConnection connectionWithRequest: request delegate: self ];
}


大半が前3回で説明済みのコードなので理解しやすいと思います。
まず、ヘッダファイルではUIImageViewとUIProgressViewのアウトレットを宣言しています。
このアウトレットとIB側の部品を、次のように接続しておいてください。

iphonenetworkprogramming3.jpg

前回まではviewDidLoadにコアの処理を書いていましたが、
今回はDownloadボタンが押されたときに、ダウンロードを開始したいので
大半の処理はdownloadButtonPressedメソッドの中に移動しています。


プログレスバーの更新はconnection:didReceiveDataメソッドの中で行っています。
現在の進行具合 = 受信量 /ダウンロードサイズ
で求めています。これはプログレスバーの常套手段ですね。

全体のダウンロードサイズ(変数:expectedContentLength)は
connection:didReceiveResponseメソッドの中で求めています。
このメソッドは、iPhone側から送ったリクエストに対してのレスポンスとして呼び出されます。
そのレスポンスを利用して、これからダウンロードするファイルのサイズを取得します。


ダウンロードが終了すると
connectionDidFinishLoadingメソッドがトリガされるので
このメソッドの中で画面の更新を行っています。
Documentフォルダ以下に保存された画像の読み出しには
initWithContentsOfFileメソッドを使用します。


コンパイル&実行して、うまく動作するかを確かめてみてください。
はてなブックマークに追加

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




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



第3回:ファイルのダウンロード

前回にひきつづき、ネットワークプログラミングその3では、
Web上からファイルをダウンロードしてきて
iPhoneに保存するプログラムを紹介します。

CoCoaフレームワークにはNSURLDownload
というクラスがあり、非常に簡単にファイルをダウンロードできるのですが、
iPhoneではこのクラスが実装されていないため、
NSURLConnectionクラスを使って自作する必要があります。


といっても、前回のプログラムと大きくは違わないので
簡単に理解できるかと思います。

sampleViewController.h
@interface networkViewController : UIViewController {
NSFileHandle *file;
NSString *filePath;
}
@end

sampleViewController.m
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"completed!");
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (file == nil) {
NSFileManager *fm = [NSFileManager defaultManager];
[fm createFileAtPath:filePath contents:[NSData data] attributes:nil];
file = [[NSFileHandle fileHandleForWritingAtPath:filePath] retain];
}
[file writeData:data];
}

- (void)viewDidLoad {
[super viewDidLoad];

NSString *url = [NSString stringWithString:
@"http://www.ritsumei.ac.jp/acd/mr/lib/images/calender/kin.pdf"];
NSString *directoryPath = [[NSHomeDirectory()
stringByAppendingPathComponent:@"tmp"] retain];
NSString *fileName = [url lastPathComponent];
filePath = [[[directoryPath stringByAppendingPathComponent:fileName]
stringByStandardizingPath] retain];
NSLog(@"%@", filePath);

NSURLRequest *request = [ NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[ NSURLConnection connectionWithRequest: request delegate: self ];
}


これまでと同じく、ViewControllerのクラスに直接
プログラムを書いていきます。
理解しやすいよう、例外処理などは書いてないので
iPhoneに実装する際には追加が必要です。


viewDidLoadメソッドの中身から見ていきましょう。
NSURLConnectionを使って非同期でリクエストを送っているので
大半は前回と同様のプログラムになっています。
違いは、NSURLRequestを作る前に、
ダウンロードするURL、ダウンロードファイル名、ダウンロード先フォルダ
などのパスを設定している部分だけです。

2行目で、対象ファイルのあるURLの指定、
3行目で、保存するディレクトリパス(今回はtmpフォルダ)
4行目で、対象ファイルのファイル名を指定して
5行目で、保存するファイルパスを指定しています。

4行目で使用している、lastPathComponentというメソッドは
パスからファイル名だけを取り出せる便利なメソッドです。
例えばパスが
http://www.ritsumei.ac.jp/acd/mr/lib/images/calender/kin.pdf
であれば、lastPathComponentの戻り値はkin.pdfとなります。


あとは、デリゲートの説明です。
connectionDidFinishLoading:
connection:didReceiveData:
上の二つのメソッドがデリゲートとなっており、
前者はダウンロードが完了したときにトリガされます。
また、後者はサーバからデータが送られてくるごとに呼び出されます。
こちらのメソッドは数回に分けて呼び出されるため、
メソッド内のプログラムも、それに対応したものになっています。

connection:didReceiveData:
のメソッドでは最初に呼び出されたときにファイルを作成し、
次の呼び出しからはそのファイルに追記していく処理を行っています。
(データが数回に分けて送られてくるため、このような処理になります)


さて、実行してみてください。
うまくいけば、コンソールにファイルのパスとcompleted!と表示されます。
Finderから表示されたファイルパスを辿ってみてください。
実際にファイルが保存されていれば成功です。




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

mosaicfaceの真実


自動で顔にモザイクをかけるアプリ
mosaicfaceの紹介です。

なかなか、チャレンジャブルなアプリです!
このアプリ、画像はサーバに送信して処理するという・・・
詳しくは下の方で・・


起動するとまず各種オプション画面になります。
モザイクの粗さ、自動顔検出などのオプションが設定可能です。

mosaicface1.jpg

モザイクをかける写真は
カメラまたはライブラリから選ぶことが出来ます。

自動顔検出をONにして
実行してみた結果がこちら。

mosaicface2.jpg

勿論、手動でモザイクをかける範囲を選択することも出来るので
顔以外のものでも、ピンポイントでモザイクをかけることが出来ます。

画面下の定規のような画像をタップして、
画面上でドラッグすると、モザイクをかける範囲を指定することが出来ます。
複数箇所選択できるので、何箇所かにモザイクをかけたい時にも便利です

mosaicface3.jpg



と。ここまではいいのですが。



ちょっと気になったのが、顔検出の遅さ!
一枚の検出にたっぷり20秒は待たされます。
ん~、こういう場合は画像サイズを1/4に落としてから
検索かけるのが常套手段なんだけどなぁ~ぶつぶつ

なーんて言ってたのですが、

どうやらこのソフト、画像をサーバ側に送って処理してるようです。
図示するとこんなかんじ。

mosaicface4.jpg

一昔前の携帯等なまだしも、顔検出ごときでサーバに送んなー(笑)
顔検出だけならiPhone4Gローカルで0.8秒で出来たぞ@研究室
というよりも、無料ソフトで顔検出サーバ立てるって、どんだけリッチなんよ!!


てか、問題はそこじゃなくって!
上の図からも分かるように、処理する画像は一度サーバに送信されてますよね?
なんで、あまりに変態的な画像はこのアプリで処理しない方が吉かも!?(笑)
サーバ側で何してるかわかんないしね~(^^;;)
はてなブックマークに追加

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




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



第2回:非同期通信によるデータの取得

さて、前回は同期通信でデータを取得しました。
今回は、非同期通信を使ってデータを取得してみましょう。

- ( void ) connection:( NSURLConnection *) connection didReceiveData:( NSData *) data
{
NSLog(@"%@", [[[NSString alloc] initWithData:data
encoding:NSASCIIStringEncoding] autorelease]);
}

- (void)viewDidLoad {
[super viewDidLoad];
NSString *url = [NSString stringWithString:@"http://google.co.jp"];
NSURLRequest *request = [ NSURLRequest requestWithURL:
[NSURL URLWithString:url] cachePolicy:
NSURLRequestReloadIgnoringLocalCacheData timeoutInterval: 60.0 ];
[ NSURLConnection connectionWithRequest: request delegate: self ];
}


前回と同様、実行するためにはview-based applicationでプロジェクトを作成し、
viewController.mの中身に上記プログラムを追加してください。


URLとタイムアウトを設定したNSURLRequestオブジェクトを作成し、
NSURLConnectionクラスのconnectionWithRequest:delegateメソッドを使って
コネクションを張ります。

今回のプログラムではデリゲートは自分自身(viewController)を登録しておきます。
デリゲートってなんぞや?という方はこちら
Objective-Cのデリゲート


データがサーバから送り返されてくると
connection:didReceiveData:メソッドがトリガされます。
データが大きい時には数回このメソッドが呼び出されることになります。


実際にコンパイル&実行してみて
HTMLの内容がコンソールに表示されることを確認してみましょう。

次回はファイルダウンロードについて紹介します
iPhoneネットワークプログラミング その3
開発アプリ

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

プロフィール

hokuson

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

カレンダー
08 | 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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。