.-- --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 comment(-) trackback(-)
.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 とか
触ってみたいとは思うんですがねー。

関連記事
スポンサーサイト

Comment

KatokichiSoft
当初、私もAVAudioPlayerを使っていてOpenALに憧れる、というスタンスだったのですが、OpenALはラッパー関数でうまく詳細を隠してあげれば、同じかそれ以上に簡単に扱えるようになりました。

「ユメみるiPhone」という本でそのラッパーライブラリが紹介されていますので、ここから攻めてみてはいかがでしょうか?
2009.09.03 16:52
Tasaki
最近更新していないブログにコメントをありがとうございます。

> 当初、私もAVAudioPlayerを使っていてOpenALに憧れる、というスタンスだったのですが、OpenALはラッパー関数でうまく詳細を隠してあげれば、同じかそれ以上に簡単に扱えるようになりました。
> 「ユメみるiPhone」という本でそのラッパーライブラリが紹介されていますので、ここから攻めてみてはいかがでしょうか?

店頭でちらっと拝見したんですが、サウンド関係は本格的に取り組む機会がなかったもので…
これから勉強していきたいと思っています。

最近Audio Queue Servicesのサンプルコードをいじる機会があったのですが、
Objective-C++だというのもありまして、あまり細部まで見れてないんですよね。
2009.09.07 22:20

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/16-30116437

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


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


  • Ehara:
    ...


  • Hayate:
    ...


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


  • Ueda:
    ...



リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。