2011-04-28 39 views
1

我正在運行iOS 4.3.2。iPad處理不當路線改變揚聲器 - >耳機

  1. 我在我的iPad上啓動我的應用程序(沒有插入任何東西)。
  2. 音頻作品。
  3. 我插入耳機。
  4. 沒有音頻,既不來自iPad,也不來自耳機。
  5. 我拔掉耳機,去(2)

或者:

  1. 我開始我的應用程序在我的iPad在插入耳機
  2. 音頻出來的耳機。
  3. 我拔下耳機。
  4. 現在音頻來自iPad。
  5. 我插入耳機。
  6. 沒有音頻,既不來自iPad,也不來自耳機。
  7. 我再次打開耳機,轉到(4)。

這裏是我的音頻會議代碼:

@implementation AudioSession 

+ (void) CreateAudioSessionWithInterruptionListener: (AudioSessionInterruptionListener) interruptionListener 
           returningSampleRate: (Float64 *) pHWSampleRate 
{ 
    OSStatus result = AudioSessionInitialize(NULL, NULL, interruptionListener, self); 
    if (result != kAudioSessionNoError) 
    { 
     NSLog(@"AudioSessionInitialize(...) failed!"); 
     return; 
    } 

    SET_PROPERTY(kAudioSessionProperty_AudioCategory,      UInt32, kAudioSessionCategory_PlayAndRecord); 
    SET_PROPERTY(kAudioSessionProperty_OverrideCategoryMixWithOthers,  UInt32, (UInt32) YES      ); 
    SET_PROPERTY(kAudioSessionProperty_PreferredHardwareIOBufferDuration, Float32, .005        ); 

    // GET not set h/w sampleRate 
    // Float64 hwSampleRate; 
    // UInt32 size = sizeof(Float64); 
    AssertOK(AudioSessionGetProperty(
            kAudioSessionProperty_CurrentHardwareSampleRate, 
            & (UInt32) { sizeof(Float64) }, 
            pHWSampleRate), 
      @"couldn't get hw sample rate"); 
    //NSAssert(size == sizeof(Float64); 
    NSLog(@"H/W SampleRate: %d", (int) (* pHWSampleRate)); 

    AssertOK(AudioSessionSetActive(true), 
      @"couldn't set audio session active\n"); 
} 
+0

什麼版本的操作系統? – 2011-04-28 13:04:42

+0

對不起,我將更新問題 – 2011-04-28 14:09:43

+0

如何配置應用程序的音頻會話?你是否正在處理任何AudioSession路由更改通知? – hotpaw2 2011-04-28 22:55:11

回答

1

這可能是其實在iOS錯誤。切換到HDMI輸出時(也是iOS 4.3),我遇到同樣的問題。在所有情況的50%中,路線改變成功,音頻從電視而不是iPad出來,如預期的那樣。在另外50%的情況下,在插入HDMI適配器後,我根本沒有音頻,也沒有電視,也沒有iPad。只要再次打開適配器,我就會收回音頻。

所以我不能真正爲您提供一個很好的解決方案,只有一個工作輪。註冊音頻路由更改(通過爲屬性kAudioSessionProperty_AudioRouteChange設置屬性偵聽器)。當這個回調觸發時,處理它,例如通過重新初始化所有核心音頻的東西。這不是一個很好的解決方案,但有效。

更新:
在你的特殊情況下,系統的表現非常的蘋果怎麼說,它應表現。讓我從蘋果的界面指南引用的iOS:

的情況下播放類似,但有不同的結果,如在圖的右側所示 。如果用戶在 回放期間拔掉耳機,您的回撥應暫停音頻。如果用戶在播放過程中插入耳機 ,則回撥應簡單地允許播放至 繼續播放。

所以蘋果說:從內部揚聲器切換到耳機 - >繼續播放。從耳機切換到內置揚聲器 - >播放暫停。根據這句話,這是一種你應該自己實施的行爲,而不是系統爲你執行的行爲,但它與你實際看到的行爲非常接近,不是嗎?

相關問題