Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2009-05-05

[iPhone][Develop] OpenALで指定するカテゴリの効能がよく分かっていない件 18:09  [iPhone][Develop] OpenALで指定するカテゴリの効能がよく分かっていない件 - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][Develop] OpenALで指定するカテゴリの効能がよく分かっていない件 - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][Develop] OpenALで指定するカテゴリの効能がよく分かっていない件 - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

iPhone OSでCore Audio(OpenAL)を使う場合、まずは


OSStatus result = AudioSessionInitialize(NULL, NULL, NULL, NULL);

みたいに初期化してから、次のようにカテゴリを指定します。


UInt32 category = kAudioSessionCategory_AmbientSound;
result = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);

このカテゴリについて調べてみることにしました。・・・が、まだ途中ですのでメモ程度になっています。すみません。

まず、カテゴリは次のようにenumで定義されています。


/*!
    @enum           AudioSession audio categories states
    @abstract       These are used with as values for the kAudioSessionProperty_AudioCategory property
                    to indicate the audio category of the AudioSession.
    @constant       kAudioSessionCategory_UserInterfaceSoundEffects
                        Use this category for sound effects such as touch feedback, explosions, etc.
    @constant       kAudioSessionCategory_AmbientSound 
                        Use this category for backgound sounds such as rain, car engine noise, etc.  Mixes with other music.
    @constant       kAudioSessionCategory_SoloAmbientSound 
                        Use this category for backgound sounds.  Other music will stop playing.
    @constant       kAudioSessionCategory_MediaPlayback 
                        Use this category for music tracks.
    @constant       kAudioSessionCategory_LiveAudio 
                        Use this category for interactive music such as playing an instrument on the screen.
    @constant       kAudioSessionCategory_RecordAudio 
                        Use this category when recording audio.
    @constant       kAudioSessionCategory_PlayAndRecord 
                        Use this category when recording and playing back audio.
*/
enum {
    kAudioSessionCategory_UserInterfaceSoundEffects  = 'uifx',
    kAudioSessionCategory_AmbientSound               = 'ambi',
    kAudioSessionCategory_SoloAmbientSound           = 'solo',
    kAudioSessionCategory_MediaPlayback              = 'medi',
    kAudioSessionCategory_LiveAudio                  = 'live',
    kAudioSessionCategory_RecordAudio                = 'reca',
    kAudioSessionCategory_PlayAndRecord              = 'plar'
};

この値が、再生中の音楽とどのように関連しているかはBigStopWatchの作者のブログ:「AudioSession その2 AudioCategory」で確認できます(有益な情報をまとめてくださった同ブログの著者には多謝です)。


で、色々なソースを見ていると、どうも再生中の曲そのままで効果音を鳴らせるkAudioSessionCategory_AmbientSoundをほとんどのケースで使っています。有名なゲームやソフトでもそうなので、多分それで良いんだと思うのですが、効果音としては本当に適当なのかが微妙。


たとえば

「リアルタイム性を意識した時にはkAudioSessionCategory_LiveAudioを使った方がいいのか」

「そもそもレスポンス性能との違いは何?」

みたいな疑問が湧いてきます。色々と変化させてみたけれど、聴覚上の変化はほとんどなし。


うーん、何が違うんだろう・・・と悩んでいたら、「AppleのAudio Session Services Reference(PDF注意)」にもう少し詳しい説明が載っていました。以下はその抜粋:


kAudioSessionCategory_UserInterfaceSoundEffectsFor sound effects such as touch feedback, explosions, and so on.
kAudioSessionCategory_AmbientSoundFor long-duration sounds such as rain, car engine noise, and so on. It is also for “play a long” style applications, such a virtual piano that a user plays over iPod audio. When you use this category, audio from built-in applications, such as the iPod, mixes with your audio.
kAudioSessionCategory_SoloAmbientSoundThe default category, used unless you set a category with the AudioSessionSetProperty (page 10) function. The solo ambient sound category is for long-duration sounds such as rain, car engine noise, and so on. When you use this category, audio from built-in applications, such as the iPod, is silenced.
kAudioSessionCategory_MediaPlaybackFor playing recorded music or other sounds that are central to the successful use of your application. When you use this category, audio continues with the Ring/Silent switch set to silent. Audio played using this category continues when the screen locks.
kAudioSessionCategory_LiveAudioFor live performance of music, such as for an application that simulates a piano.
kAudioSessionCategory_RecordAudioFor recording audio; it silences playback audio.
kAudioSessionCategory_PlayAndRecordFor simultaneous recording and playback of audio, such as for a VOIP(voice over IP) application.

だそうです。iPhone OSの機能は制限されているから、Mac向けの資料にまで視野を広げた方が良さそうな雰囲気がすることは分かりました。

ゲスト



トラックバック - http://iphone-dev.g.hatena.ne.jp/paella/20090505