4

AVAudioPlayer を使用してオーディオを再生するアプリを作成しました。

オーディオをスピーカーに切り替える関数を実装しました。

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

しかし、これを使用してヘッドフォンに戻そうとすると:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

スピーカーを介してルーティングされたままになります。

オーディオを方向付ける他の方法が見つかりません。誰かが私が間違っていることを提案できますか?

4

2 に答える 2

4

Apple のドキュメントによると、オーディオ セッション ルートのオーバーライドは、kAudioSessionCategory_PlayAndRecordカテゴリを使用する場合にのみ使用できます。

カテゴリを に変更しkAudioSessionCategory_PlayAndRecord、プロパティ キーを使用してkAudioSessionProperty_OverrideCategoryDefaultToSpeakerオーディオをスピーカーにルーティングすることができます。

于 2010-06-11T18:47:17.097 に答える
0

Laurent が言ったように、次のように PlayAndRecord を使用してみてください。

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);

使用することは非常に重要です。使用しAVAudioSessionCategoryPlayAndRecordないと、ルートがスピーカーに到達しなくなります。オーディオ セッションのオーバーライド ルートを設定したら、AVAudioPlayerインスタンスを使用してスピーカーに出力を送信できます。

私と同じように、他の人にもうまくいくことを願っています。これに関するドキュメントは散らばっていますが、Skype アプリはそれが可能であることを証明しています。がんばれ、友よ!:)

Apple のドキュメント: http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html

のページで検索を行いますkAudioSessionProperty_OverrideAudioRoute

于 2013-05-28T02:47:34.150 に答える