これを行うには、AV カテゴリを AVAudioSessionCategoryPlayAndRecord に設定し、プロパティ kAudioSessionOverrideAudioRoute_Speaker を設定する方法が受け入れられているようです。AVAudioSessionCategoryPlayback カテゴリを使用しています。ヘッドフォンを接続していない状態で適切な音量が得られるためです。カテゴリを AVAudioSessionCategoryPlayAndRecord に設定すると、ヘッドフォンを接続していない状態でのスピーカーからのオーディオ再生が非常に小さくなります。EITHER AV カテゴリに接続されたヘッドフォンを使用して、スピーカーから望ましい再生動作を得ることができませんでした。
カテゴリを AVAudioSessionCategoryPlayback に設定したコードは次のとおりです。
AVAudioSession* session = [AVAudioSession sharedInstance];
NSError* error = nil;
BOOL success = [session setActive: YES error: &error];
if (success)
success = [session setCategory: AVAudioSessionCategoryPlayback error: &error];
// To allow ipod music to play
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof (doSetProperty), &doSetProperty);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, hardwareRoutePropertyListener, nil);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
sizeof (audioRouteOverride),
&audioRouteOverride
);