投稿

7月, 2012の投稿を表示しています

用語

Targeted Device Family
iPadアプリか、iPhone/iPod touchアプリか、両方か

Project名
.projectファイルの名前

Product name
一体何か?

Bundle name
実行ファイルのトップのフォルダに付けられる名前

Executable name
実行ファイル名?

Target名
ターゲットの名前

Schime名
スキームの名前

iPhone Core Audioプログラミング

iPhone Core Audioプログラミングという本の感想。

iOSで音を出すやりかたは4パターンほどあります。それぞれ、作りやすさ、機能、理解しやすさなどが違います。全部を網羅しようとすると結構大変なのですが日本語で書かれたiPhone Core Audioプログラミングという良書がありますので助かります。
最初本屋でぱらぱらと見た感じではかなり難しそうな印象があります。特にC言語による部分はObjective-Cに慣れた目には完全に別言語に見えます。
しかし、何度も読んでいくうちにだんだんとCore Audioのパターンが見えてきます。その山を超えるとわりと楽に読めるようになります。

chapter 1 System Sound Service
効果音用のAPIの説明。初めのchapterにしては結構いろんなことが詰め込んである。読むペースをつかむ前に次から次へと話題が変わるので注意。コールバックというのが理解できない場合はchapter 2 AVFoundationを検討するのもいいと思います。

chapter 2 AVFoundation
音を出すAPIの中でこのAPIが一番わかりやすい。ARCならreleaseも必要なし。

chapter 3
項目が多いがひとつひとつは単純な知識。
オーディオフォーマットの情報とパケットの情報を混乱しないようにする。
iOSアプリからプログラムを始めた人は、取得したいデータのアドレスを関数の引数として渡すやり方がイメージしにくいかもしれない。このやり方はCoreAudioではすごくよく使う。

chapter 4 AudioSessionの基礎
ここはどんなアプリを作る場合でも目を通しておいたほうがよいでしょう。
ユーザーの使用状況に応じて音の出力の挙動を変化させること方法が書いてあります。
内容は主に2つ、カテゴリ(アプリは音の扱いをどうするか、マナーモード?に従うとか)の設定と割り込み(電話受信など)への対応。
この割り込みへの対応に2つのやり方が紹介されている。一つは直接AudioSessionを扱うやり方、もうひとつはAVAudioPlayerの機能を使うやり方。
AVAudioPlayerはサウンドの扱いを簡単にするために割と後から出来たもの。ソースから想像するにAVAudioPlayerの中にAudioSe…

clearsContextBeforeDrawing

これはdrawRect実行前に領域を塗り潰すかどうかのパラメータですが、調べれば調べるほど他にもいろいろな設定項目が出てくる、代表的な芋づるパラメータです。
他に出てくるパラーメタはopaque(不透明)とbackgroundColorの2つで、 clearsContextBeforeDrawingが2通り opaqueが2通り backgroundColorがnil、transparent(alphaが1未満)、opaque(alphaが1)の3通りありますので 合計12パターンの設定があります。
ややこしいですが、各パラメータの説明のまえに王道をいうと 何かの色で塗りつぶすなら、backgroundColorにベース色を指定します。 透明にしたいならview.backgroundColor = [UIColor clearColor]に指定します。 ただしパフォーマンスを上げたい場合や、仕組みが気になる場合は、各パラメータの意味を理解して対応することになります。 drawRectメソッドの内で領域をすべて塗る場合には効果があります。[UIColor clearColor]は色値とアルファ値が全部0.0のUIColorインスタンス。いわゆる透明な黒というやつである。

詳しく見ていくと
backgroundColorが指定され、alphaが1.0の時
その色で塗る
opaqueとclearsContextBeforeDrawingの設定による違いはない その色で塗られているので下の画像が塗られているかと前もって領域が透明な黒でクリアされているかは見た目ではわからないがリファレンスによるとクリアされているようだ。

backgroundColorが指定され、alphaが0.0<=alpha<1.0の時
その色を塗りながら下の画像を表示
opaqueとclearsContextBeforeDrawingの設定による違いはない 下の画像が塗られているのでopaqueの設定が無視されるようだ 前もって領域が透明な黒でクリアされているかは見た目からはわからないがこれもリファレンスによるとクリアされているようだ。
上で出した[UIColor clearColor]の場合、全部0.0であろうと指定されているということで、その色(というかデータ)で塗るようで…