【中級】iPhone Core Audio入門セミナー:波形編集アプリを作ろう

Posted in Core Audio on 1月 31st, 2011 by Norihisa Nagano – 1 Comment

セミナーのお知らせです。

【中級】iPhone Core Audio入門セミナー:波形編集アプリを作ろう

前回の「iPhone Core Audio入門セミナー:Core Audioの概要から”ボイスメモ”アプリケーションの作成まで」が好評いただけたようで
続編をやらせていただくことになりました。

テーマは「波形編集」ということで、これをテーマにリニアPCMの操作を基礎からやっていきます。
Extended Audio File Servicesが中心になります。
Core Audio本では波形編集に必要な機能(Extended Audio File Servicesで読み書き)は解説しましたが、ずばり波形編集は扱っていないので、全般的に新しい内容になります。

Core Audio本で例えるなら
第3章 サウンドファイルの基礎
第11章 Extended Audio File Services
+
第15章 実践編の新節

程度の内容になります。
iOS 4.0以降のオーディオ周りの最新機能についても合わせて解説します。

前回の続編ですが、前回の内容で今回の内容に関係する部分は復習で再度やりますので
・簡単なiPhoneアプリケーションを作成したことがある方
・C言語およびObjective-Cの知識がある方
・AVFoundation(AVAudioPlayer)を使ったことがある方
なら、このセミナーからでも大丈夫です(大丈夫なように解説します)。

有料で朝早いですが、ぜひお越しください。

日 時:2011年2月22日(火)9:45~13:15(休憩含む)

会 場:大橋会館

地下鉄田園都市線「池尻大橋」駅下車(渋谷駅より1つ目)。東口から駅前商店街を直進。徒歩約5分。

主 催:特定非営利活動法人MOSA

http://www.mosa.gr.jp/?p=3807

iPhone Core Audio プログラミング(書籍)プレゼント

Posted in Core Audio on 1月 12th, 2011 by Norihisa Nagano – Be the first to comment

この企画の募集期間は終了しました。
たくさんのRTありがとうございました。

2011年になりました。
あけましておめでとうございます。

さて、Core Audio本が出て1年になりましたが、まだそれなりに売れているみたいです。
そこで、1周年を記念してCore Audio本を一冊プレゼントします。
(2010年いっぱいで前職を退職したのですが、そのときに発掘!もちろん新品です)
1年経ちましたが、まだまだ使える内容だと自負しております。

書籍の内容はこちら

Twitterで下記TweetをReTweetしてください。
集計のため、公式RTでお願いします。
抽選で1名様にプレゼントします。

http://twitter.com/#!/7gano/status/25110213296136192

募集期間
2011/1/15 23:59:59まで

ご応募、お待ちしております。
当選者の方にはMentionかDMで当選と御住所の連絡先をお知らせします。
(勝手ながら海外発送はいたしません)

iPhoneCoreAudio

Mac App Store対策シリーズ その1. スクリーンサイズの変更に対応する

Posted in Cocoa/Carbon, iPhone on 12月 16th, 2010 by Norihisa Nagano – Be the first to comment

Mac App Storeに最近やってるチームで作ったアプリをサブミットしました。
そんなわけでひさびさにCocoaをやっていました。

これからMacアプリを作る、もしくはMacな頭への切り替えが必要な方のために
自分のリハビリも含め、ぼちぼちMacのことを書いていきます。

さて、iOSアプリではなくて、Macのアプリの場合、特有の考えなくてはいけないことが結構あります。

ぱっと思いつく単純なところでは次の2つです。
・Menu
・Window (Screen)

#逆に言うと、この辺が無いiOSが非常にシンプルなわけです。
#画面に1アプリだし、メニューなんかありません。

この中から今回はWindowについて。
Document-Basedなアプリケーションの場合、たぶん自動でやってくれたりする気がしますが
Windowの位置なんかを自分でなんとかしないといけない場合があります。

なんとかしないといけない場合は
・スクリーンサイズが変更になった(解像度を変更した)
・新しいスクリーンが追加された、外された(つまりモニターをつないだ、外した)
の二つです。

まず、NSApplicationDidChangeScreenParametersNotificationというキーがあって
これでスクリーンの何かが変わったら通知を受けとることができます。
通知がきたら、スクリーンサイズの変更だったら、変更に合わせてWindowの位置を移動させるなどすればよいでしょう。
以前の位置を比率で覚えておいて、新しいスクリーンサイズで計算し直すと、同じ位置に表示されますね。

しかし、新しいスクリーンが追加された(されている)場合、そうも単純にはいきません
モニターが二つある場合、メインじゃない方のスクリーンは以下のように
かなりいろいろな場所に移動できてしまうからです。

(これは「いびつな形のスクリーンサイズへ変更された」状態ととらえるといいと思います。)

これだけの自由度に対応するのはどう考えてもめんどくさそうです。
また、対応を完璧に実装したとして、何人の人がDualモニター環境で使うか分かりません。
おそらくかなり少ないはずです。
が、しかし、無視するわけにもいかないのです。
これらの変更があることを無視すると、モニターを外したら以前あったスクリーン領域がなくなったりしますので
Windowが表示されない…ということもあり得ます。
これは困ります。Windowが見えないとアプリが使えないからです。

そんなときは、次のコードでひとまずなんとかなります。

    //windowはNSWindowのインスタンス
    //1
    NSScreen* screen = [window screen];
    if(screen == nil){
        //2
        [window center];
    }

やっていることは単純で
1. NSWindowのscreenメソッドは、Windowが属するNSScreenのインスタンスを返すが
所属している(表示されている)Screenがなければnilを返すので

2. その場合はcenterメソッドでメインスクリーンのセンターに表示する

です。

これでWindowが見えないところに行ってしまって操作できない、という最悪の状態は防げます。
センターに表示するのは、screenがnil、つまり、以前は表示できていたんだけど、見えなくなってしまった
という場合だけなので、あまり問題ないでしょう。

この処理を最後に行うようにして、その前にスクリーンの状態の変更前に応じた移動の処理を入れてやればいいと思います。

iOS 4, Mac App Store, iOS 関連本 * 3

Posted in iPhone on 11月 10th, 2010 by Norihisa Nagano – Be the first to comment

だいぶ間が空きましたが前々回のポストで書いたレクチャーは、おかげさまで無事終了しました。

正直、iPhoneのCore Audioだけで三時間半もやったら暇過ぎて苦情が出るのでは…と思っていたのですが、そんなこともなかったようでご好評いただきました。

iOS 4

さて、そんなCore AudioですがiOSがとんでもないスピードで進化するので、正直付いていけてません。
が、4.0〜の大きな変更点を書くと
・Background Audio
・iPod Library “Direct” Accessとでも言うべき、AVAssetを使ったiPod Libraryのファイル自体へのアクセス
ということになると思います。

Background Audioでは、アプリケーションを終了しても音を鳴らし続けることができるようになりました。
基本設定ファイルに書くだけですが、他のオーディオとの兼ね合いを考えると、Audio Sessionの設定が重要になります。
今後も、こういった変更にはAudio Sessionが関係してくるのは間違いないので、Audio Sessionが分からない人は早めに勉強しておいたほうがいいと思います。

iPod Library “Direct” Accessでは、長らくDJ系アプリケーションの人の悩みの種だった、曲ファイルの転送が不要になります。すごいことになりそうですが、今のところはすごいことになっていないみたいです(すごいアプリが出ていない。少なくとも僕は知らない)。

Core Audio本の改訂があれば、両方1章ずつぐらい割いて詳細に書こうと思います。

と、このポスト、ここまで書いて眠らせていたのですが、iOS 4.2がそろそろ出るみたいで、噂によるとOS XにしかなかったFrameworkが載るそうで、オーディオ周りがまた盛り上がりそうです。

Mac App Store

もう一つ、Mac App Store。前々から予想していたのですが、ついに来ました。
これで贅沢にコンピューターリソース(CPU, GPU)を使うアプリケーション、たとえば
Quartz Composerをがんがん使ったもの
OpenGL Shading Language, Core Imageを使ったグラフィック的に相当凝ったもの
なんかが出てくるようになると、かなり面白くなると思います。
Audio周りもきっと盛り上がるでしょう。
こういう「Store」ができて、収益が得られるから投資、参入が増えて、品質があがる
品質がいいものがあるから人が集まる、プラットフォームが盛り上がる
というループができてしまうと、ソフトウェアの進化が加速されると思います。
これはソフトウェアの歴史でも重要なことだと思います。

書籍の出版状況を見ても、今何でもいいので言語を勉強するなら断然iOS、という状況。

iOS 関連本 * 3

さて、本といえば、iOS関連の本がじゃんじゃん出ています。
最近出たものだと、オライリーさんから出た3冊はどれもよかったです。
(献本いただきました。オライリーの宮川さん、いつもありがとうございます!)

iOS SDK Hacks
O’ReillyからでHackと付いているだけあって、かなり”ガチ”な内容。
iOS開発を最低でも1年ぐらいはやらないと理解できない部分が多いと思いますが
逆にiOS開発1年以上の人はマストバイです。

iPhoneアプリケーション開発ガイド ―HTML+CSS+JavaScript による開発手法
サブタイトルまで入れないとObjective-Cの開発本じゃないと分からないこの本。
iOS用Web Siteを作るときにもかなり参考になると思います。

iPhone/iPadゲーム開発ガイド ―Objective-Cで作る2D/3Dゲーム
こちらは、Objective-Cでゲームを作る本。
以前寄稿させてもらった「iPhone SDK アプリケーション開発ガイド」と同じく武舎さん翻訳!
2D/3Dのゲームを作って、iPadに対応させるところまでやるので、iOS SDKにそれなりになじみがあって
ゲームを作ることになった開発者にお勧め。
横江さんのOpenGL本とどちらがオススメか聞かれると迷いますが、どっちも買うといいです。

NSImageJPEGRepresentation

Posted in Quartz/OS X Graphics on 11月 10th, 2010 by Norihisa Nagano – Be the first to comment

iOSプログラマならUIImageをJPEGで保存するときには
UIImageJPEGRepresentationを使うのでMacでも
NSImageJPEGRepresentationがあるんだろう、と思うかもしれませんが
残念ながらありません。

自分で実装するとしたら、次のコードが一番簡単だと思います。

NSData* NSImageJPEGRepresentation(NSImage* image, CGFloat compressionQuality)
{
    if(image == nil)return nil;
    NSDictionary *dict;
    dict = [NSDictionary dictionaryWithObjectsAndKeys :
            [NSNumber numberWithFloat:compressionQuality],
            NSImageCompressionFactor,
            nil];

    NSBitmapImageRep* imageRep;
    imageRep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
    return [imageRep representationUsingType:NSJPEGFileType properties:dict];
}

CGImageDestinationRefを使うマニアな方法もあります。
そういえば、昔書いたような(PNGですが)。

参考:
Cocoaはやっぱり! JPEG/PNGで保存

誰かNSImagePNGRepresentationも書いて下さい。

Multi Language

Posted in 未分類 on 9月 21st, 2010 by Norihisa Nagano – Be the first to comment

test

【中級】iPhone Core Audio入門セミナー:Core Audioの概要から”ボイスメモ”アプリケーションの作成まで

Posted in iPhone on 5月 22nd, 2010 by Norihisa Nagano – Be the first to comment

MOSAでセミナーをやらせていただくことになりました。
おそらく国内初のCore Audioの入門セミナーです。

日 時:2010年6月24日(木)9:45~13:15(休憩含む)
会 場:大橋会館
地下鉄田園都市線「池尻大橋」駅下車(渋谷駅より1つ目)。東口から駅前商店街を直進。徒歩約5分。

内容は

難しい、ややこしい、と敷居の高いイメージがあるらしいCore Audioですが、サウンドファイルの再生、マイクからの録音程度であればそんなに難しくありません。ただし、単純な再生と録音であっても、それに付随して必要な設定操作など知っておくべきポイントがいくつかあります。

本セミナーでは、アプリケーションにサウンド再生、録音機能を組み込むケースを想定しCore Audioを基礎から解説します。具体的には、Core Audioの概要からはじまり、iPhoneの”ボイスメモ”アプリケーションと同等なものが作れるようになるところまで解説します。

となっています。

Core Audio本でいうと、7章ぐらいまでをぎゅっと凝縮してお話する予定です。
逆に言えば、Core Audio本を既に読まれて理解されている方には必要ない内容になると思います。
あ、けど、HMDTで実案件でいろいろ経験値が増えているので、こういう時に〜みたいな話は盛り込む予定です。
人気があれば続編もできるかもしれないので、よろしくお願いします。

同日の午後は、社長の木下が
【中級】iPad開発セミナー~電子書籍アプリケーションを作る~
というセミナーをやります。
合わせて受講いただくとお得になっていますので、ぜひ24日はMOSAでiPhone開発どっぷりな一日にしていただければと!

そういえば、同僚に教えてもらったのですが、Core Audio本がTV(NHKのITホワイトボックス)に出てました。カヤックの方ありがとうございます。

SuperColliderでセル・オートマトン (Cellular automaton)

Posted in complex system on 1月 31st, 2010 by Norihisa Nagano – 1 Comment

前回に引き続き、SuperColliderでやってみました。
asBinaryStringが使えるので、結果表示付きにできました。

(
r=90;g=1<<16;n=32;
r.do{
    m = 0;
    for(0,n,
        {|i|
            b = 0;
            b = g >> (i - 1) & 1 | b;
            b = g >> (i + 1) & 1 << 2 | b;
            b = g >> i & 1 << 1 | b;
            m = r >> b & 1 << i | m;
        }
    );
    (g=m).asBinaryString(n).postln
}
)

00000000000000101000000000000000
00000000000001000100000000000000
00000000000010101010000000000000
00000000000100000001000000000000
00000000001010000010100000000000
00000000010001000100010000000000
00000000101010101010101000000000
00000001000000000000000100000000
00000010100000000000001010000000
00000100010000000000010001000000
00001010101000000000101010100000
00010000000100000001000000010000
00101000001010000010100000101000
01000100010001000100010001000100
10101010101010101010101010101010
00000000000000000000000000000001
10000000000000000000000000000010
01000000000000000000000000000101
00100000000000000000000000001000
01010000000000000000000000010100
10001000000000000000000000100010
01010100000000000000000001010101
00000010000000000000000010000000
00000101000000000000000101000000
00001000100000000000001000100000
00010101010000000000010101010000
00100000001000000000100000001000
01010000010100000001010000010100
10001000100010000010001000100010
01010101010101000101010101010101
00000000000000101000000000000000
00000000000001000100000000000000
00000000000010101010000000000000
00000000000100000001000000000000
00000000001010000010100000000000
00000000010001000100010000000000
00000000101010101010101000000000
00000001000000000000000100000000
00000010100000000000001010000000
00000100010000000000010001000000
00001010101000000000101010100000
00010000000100000001000000010000
00101000001010000010100000101000
01000100010001000100010001000100
10101010101010101010101010101010

133文字版

r=90;g=1<<16;n=32;45.do{m=0;
for(0,n,{|i|b=0;m=r>>(g>>i&1<<1|(g>>(i+1)&1<<2)
|(g>>(i-1)&1|b))&1<<i|m;});(g=m).asBinaryString(n).postln}

ちなみに、SuperColliderのコード140文字でpieceを作る、というのが流行っていたようです。
sc140

言語仕様から解説しているサイトを見かけないし
勘違いされているのじゃないかと心配になりますが
SuperColliderは、ちゃんとしたプログラミング言語です。
(たぶん)マルチバイトが処理できなかったりしますが
Ruby、Pythonなんかに近い、オブジェクト指向でインタプリタ方式の言語です。
なので、↑みたいなことは当然できます。

.arとか.krとかSynthDefからやるのもいいけど、ちゃんと学ぶなら
言語としての理解から始めないといかんのではないかな、と思います。

以前書いた、音がまったく鳴らないSuperColliderの言語仕様解説
022. Objective-CプログラマーのためのSC言語入門(1) ざっくり言語仕様
023. Objective-CプログラマーのためのSC言語入門(2) またりさまClassを実装

C言語でセル・オートマトン (Cellular automaton)

Posted in complex system on 1月 26th, 2010 by Norihisa Nagano – 1 Comment

よく「セルオートマトン C言語」
で検索してくる人が居るので気になっていて
Twitterに投稿しようと思って140文字以内を目指したら書けたので貼っておきます。
たぶん合ってると思うのですが、ざざっと書いたので間違ってるかもしれません。

#include <stdio.h>
int main (int argc, const char * argv[]) {
    unsigned char rule = 90,
    gen = 109, nextgen = 0, bit = 0;
    for(int i = 0; i < 8; i++){
        bit = 0;
        bit |= ((gen >> i + 1) & 1) << 2;
        bit |= ((gen >> i + 0) & 1) << 1;
        bit |= ((gen >> i - 1) & 1);
        nextgen |= (rule >> bit & 1) << i;
    }
    printf("%d", nextgen);
    return 0;
}

検算

rule 90
0   1   0   1   1   0   1   0
111 110 101 100 011 010 001 000

109 => 0110 1101
7: 001  1  1
6: 011  3  1
5: 110  6  1
4: 101  5  0
3: 011  3  1
2: 110  6  1
1: 101  5  0
0: 010  2  0

1110 1100 => 236

130文字版

unsigned char r=90,n=109,m=0,b;
for(int i=0; i<8;i++)
{b=0;b|=(n>>i+1&1)<<2;b|=(n>>i&1)<<1;b|=(n>>i-1&1);m|=(r>>b&1)<<i;}
printf("%d",m);

2009 -> 2010

Posted in Codex on 12月 29th, 2009 by Norihisa Nagano – Be the first to comment

2009年総括

今年は本の年でした。
おかげさまでというか、なんというか、一年で3冊の本に関わらせてもらいました。
2007年にIAMASに入るまで、(人に読んでもらう)文章らしい文章を書いたことが無かったので、予想だにしなかった展開でした。
プログラマーなのに、プログラミングコードじゃなくてテキストを打っている時間の方が長かった。

2月「iPhone x Music」(共著)
9月「iPhone SDK アプリケーション開発ガイド」(寄稿)
11月「iPhone Core Audioプログラミング」(単著)

並べてみると、全部prefixが全部「iPhone」です。
つまりは、今年は(少なくとも僕にとって)iPhoneバブルでした。
iPhone出版バブル、と言うべきかもしれません。

「iPhone x Music」

IAMASの修士論文と平行して書いたので、実は一番大変だったのですが、共著だったのでなんとかなりました。こういう本を書く機会はおそらくもう無いと思いますが(いやあるか)、最初の本ということで大変貴重な経験をさせていただきました。編集者の小西さん、ありがとうございました。

「iPhone SDK アプリケーション開発ガイド」

おそらくAudio Unitを扱った世界初の記事となりました。念願のO’Reillyデビューということで、少ないページながら、このとき執筆(予定で下調べ)してたCore Audio本からエッセンスを抽出してコンパクトにまとめてみました。
編集者の宮川さん、ありがとうございました。色々お話いただいたのに寄稿1個だけですみません。

「iPhone Core Audioプログラミング」

そして、2004年にCore Audioを始めて以来の念願だったCore Audio本がついに出せました。
どちらかといえば難解なiPhoneのCore Audioを体系的にまとめ、かつ、順番に読み進められるように、という、「僕にそんなことできるんかいな?」な課題設定な上、調べてコード書いても動かない、などなど暗中模索で、なかなかしんどい時期が続きました。しかし、結果、(少なくとも僕にとって)Core Audioの世界がすっと開けた瞬間はこれまでに無い感動がありました。こういうのは本を書かないと体験できないんでしょうね。
辛抱強くおつきあいいただいた、平山編集長、ありがとうございました。

そんなわけで、常に原稿をかかえてる状態で、しかも(結果、辞めましたが、共同で)起業もしたので、自分のソフトウェアを書く時間がこれまでのプログラマ歴の中で最も少なく、オトカメラぐらいしか作れませんでした。
選択肢としては、本を書かないというのもあったのですが、おそらく2009年を逃したら、本を書く機会は無いだろうな、という判断でした。それにしても3冊はやりすぎたな、とも思うのですが、結果3冊を目の前にすると、やってよかったなと思っています。もうこういう年は来ないだろーなー。

私生活の方では、2009年1月に結婚しました。(もう1年か、早いな)
あと、2004年以来、フリーランスをやっていましたが
今年最後の方でMac/iPhone系の開発会社であるHMDT(株)に就職しました。
毎日仕事が楽しいので、満足してしまって、自分の活動が少なめになりがちな今日この頃ですが
今までの調子でいろいろアウトプットしていくつもりです。
あと、本の依頼がいくつか来ているので、1冊ぐらいは何か出すと思います。

2010

これまでは、いわゆるメディア・アート系に分類されるような活動が多かったのですが
2010年からは別のミッションに進みます。
といってもこれまで音楽を対象に考えてきたことの応用ですが。
こういうジャンル横断はプログラマーの特権ですね。
ある人の言葉

「プログラマーは何にでもなれる」

ソフトウェアが解決すべき問題はこれからもどんどん増えるでしょう。

Mac OS XとRuby on Rails(もしくはPHP)から
iPhoneとGoogle App Engineへ!

2010年も、本Blogをよろしくお願いします。