2010-07-25 2 views
1

Я разрабатываю приложение, которое должно обладать следующими свойствами в отношении аудио:iPhone AudioSession свойства

  1. может записывать и воспроизводить звук в то же время
  2. может смешать аудиовыход с другим приложением, например, IPOD
  3. аудиовыход на динамик, когда наушники не подключен
  4. аудио выход на наушники, когда он подключен

Я использовал следующий код.

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
NSError *audioSessionError; 
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&audioSessionError]; 

UInt32 mix = 1; 
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(mix), &mix); 

UInt32 route = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(route), &route); 

[audioSession setActive:YES error:&audioSessionError]; 

Однако, я могу достигнуть 1-3, но не на 4. Когда наушники подключены, звук все равно идет через динамик. Затем я попытался установить kAudioSessionProperty_OverrideCategoryDefaultToSpeaker вместо kAudioSessionProperty_OverrideAudioRoute, но это привело к приостановке iPod вместо смешивания обоих аудио. Может ли кто-нибудь помочь, указав, что не так с вышеуказанным кодом?

Спасибо за любую помощь.

+0

Вы пробовали слушать уведомления об изменениях маршрута аудио и установка kAudioSessionOverrideAudioRoute_Speaker только если наушники не подключен, и снятия с охраны, когда он подключен ? – lucius

+0

Какой импорт требуется для выполнения этой работы? – 2011-01-15 12:11:11

ответ

0

Я думаю, что это:

UInt32 route = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(route), &route); 

В частности означает, что использовать динамик. Действие по умолчанию (использовать наушники при подключении) должно быть:

UInt32 route = kAudioSessionOverrideAudioRoute_None;