.07 2012

サウンド再生のチカラワザ

8月は花火大会、夏祭り、私のバースデーと目白押しな一ヶ月
そんな熱中症予備軍・大量光合成中のUTOです。

今回はAVAudioPlayerを使ったサウンド再生において
ちょいと特殊な手法をまとめてみました。

スポンサーサイト



.13 2009

AVAudioPlayer とオーディオセッション

やっと iPhone SDK での開発になれてきた折に
次期メジャーバージョン 3.0 が間もなく公式発表される
ということで、個人的には少し複雑な心境の Tasaki です。

せめて1本目を先にリリースしたい…

今回は、iPhone でサウンドを使用する場合に
知っておきたいオーディオセッションの初期化に関する話を
しようと思います。

iPhone OS 2.2 から、AVFoundation という
新たなフレームワークが追加されたわけですが、
これを使うことで、Audio Queue Services や OpenAL などの
低水準フレームワークを使わずに音声ファイルの再生を
行えるようになりました。

それまでは、機能が著しく限定された System Sound Services だけが
他のアプローチに比べて断然簡単に実装することができたわけですが、
AVFoundation の追加によって Objective-C ベースでの
サウンドファイルの制御が可能になったのはうれしいかぎりです。
(そもそも Audio Queue Services は、いまだによく分かっていません)

ただ、AVAudioFoundation フレームワークの
AVAudioPlayer クラスを利用する場合は
オーディオセッションの初期化などが不要なので
敷居が低い代わりに、このオーディオセッションへの
理解が必ずしも伴わなくなるという側面があります。
(僕がそのうちの1人だったわけですが)

そもそもオーディオセッションとは、
アプリケーションにおけるサウンド再生のふるまいを定義するものです。
これを正しく設定することで
iPod で再生中の楽曲とアプリケーション独自のサウンドを
ミックスしたり、スリープ後もサウンドの再生を続行するなどの
効果が現れます。

上記の効果を得るための手順は簡単です。
①オーディオセッションを初期化する。
②オーディオセッションカテゴリを設定する。
③AVAudioPlayer オブジェクトを初期化する。

まず、オーディオセッションの初期化についてですが、
その前に AudioToolBox フレームワークをインポートしておきます。
その後初期化関数を呼び出します。
Audio Queue Services などを使用する場合に比べて
初期化のための引数は超単純です。
以下にコード例を示します。

#import <AudioToolbox.h>

...
AudioSessionInitialize( NULL, NULL, NULL, NULL );

…まさか、これで動くとは思いませんでした。


次にオーディオセッションカテゴリを設定します。
オーディオセッションカテゴリは、幾つかあり
それらは定数で定義されています。
例えば、iPod で再生中の楽曲とアプリケーションの効果音を
ミックスしたいという場合には、
UserInterfaceSoundEffects カテゴリが適しています。
以下のコードでオーディオセッションカテゴリを変更することができます。
UInt32 category = kAudioSessionCategory_UserInterfaceSoundEffects;
AudioSessionSetProperty( kAudioSessionProperty_AudioCategory, sizeof( category ), &category );

あとは、AVAudioPlayer オブジェクトを
いつものように初期化すればいいだけです。

特にアプリケーションで BGM を使用しない場合には、
このカテゴリに設定しておくと
ユーザーにより自由なプレイスタイルを提供できます。
音楽は要らないと思えば、自分で iPod の再生を止めればいい
だけですからね。


AVAudioPlayer は簡単なのがいいですね。
…本当は、Audio Queue Services とか OpenAL とか
触ってみたいとは思うんですがねー。

 HOME 

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク