2014-01-23 53 views
8

我有一個應用程序播放錄製的音頻以及重複的聲音。聲音通過板載iPad揚聲器正確播放,如果從耳機插孔連接到立體聲音頻輸入線,則播放效果也會很好。當我將iPad與我的藍牙立體聲輸入端配對時,我的其他應用程序(爲iPhone編寫,在iPad上運行)中的所有聲音都可以正常工作,而我設備上的所有其他聲音也能正常工作。AVAudioPlayer和AVAudioSession不會播放到iPad上的藍牙立體聲(2或其他)

的問題是我的應用程序爲iPad寫不打通過藍牙路徑,而是從播放內置揚聲器。

在didFinishLaunchingWithOptions我的應用程序委託(...)方法,我把以下內容:

NSError *error = nil; 
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:&error]; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; 
[[AVAudioSession sharedInstance] setActive:YES error:&error]; 

這段代碼被稱爲並且沒有被返回的錯誤。

在我的控制器代碼,我已經記錄了我玩用AVAudioPlayer樣本如下:

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordURL error:&error]; 
audioPlayer.numberOfLoops = 0; 
[audioPlayer setDelegate:self]; 
[audioPlayer play]; 

在其他方面,我有正在發揮螺紋控制的循環反覆短時0.01秒聲音無人機和我這樣做使用OpenAL:

alSourcePlay(sourceID); 

這是我在我的其他應用程序編寫的iPhone,按需工作相同的代碼。

我意識到有關於藍牙輸入的其他線程,但我有我的iPad應用程序的藍牙音頻聲音輸出的具體問題。

+1

除了你的問題AVAudioSessionCategoryPlayAndRecord會降低輸出音量。如果你沒有做VOIP(或任何其他記錄並在同一時間播放),請避免將你的類別設置爲此。 –

+0

發現更多信息。在配置我的OpenAL之前,我正在設置AVAudioSession。之後通過設置AVAudioSession信息(全部在viewDidLoad中,現在僅在最後),音頻現在播放到藍牙揚聲器。現在,我無法記錄。我發現輸出到藍牙和內置麥克風輸入可能存在衝突。有什麼建議麼? – Cal30

回答

1

不可能。

從非常有趣的蘋果文檔AVAudioSession - 選擇麥克風QA1799:

如果應用程序使用setPreferredInput:錯誤:方法來選擇藍牙HFP輸入,輸出將自動改爲藍牙HFP輸出。此外,使用MPVolumeView的路由選擇器選擇藍牙HFP輸出將自動將輸入更改爲藍牙HFP輸入。因此即使只有輸入或輸出單獨設置,輸入和輸出也始終會在藍牙HFP設備上結束。

+0

謝謝安德魯。這就是我所害怕的。我希望在未來的某個時間點(不久的將來),Apple可以對此進行更改,以允許輸出到BlueTooth,同時保留板載麥克風以進行輸入。將選擇這個作爲答案...甚至認爲這不是我期待的答案(笑)。 – Cal30

2

因爲你的類是播放和錄音,你將不得不啓用藍牙作爲以輸入爲它支持作爲輸出(默認情況下,同一接收器,用於輸入/輸出的播放和錄音模式) 。爲了做到這一點,你必須設置你的AVAudioSession額外的屬性:

UInt32 allowBluetoothInput = 1; 
AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
         sizeof (allowBluetoothInput), 
         &allowBluetoothInput 
         ); 

你也將要來檢查,你沒有輸出力到內置的揚聲器在你的代碼的任何地方,通過在會話中設置kAudioSessionProperty_OverrideCategoryDefaultToSpeaker屬性。

+0

試過但沒有變化。我在setActive(...)調用之前添加了override-enable bluetooth。我檢查了所有的代碼,並且沒有設置DefaultToSpeaker。 – Cal30

+1

我不知道你是否需要記錄,但爲了這個測試的目的,你可以將會話設置爲'AVAudioSessionCategoryPlayback',看看是否有任何改變? –

+0

沒有什麼區別,是的,我需要能夠在錄製的同時播放輸出。這是一款音樂應用程序,播放節拍滴答並錄製用戶。想要同時聽到滴答聲和現場音樂家的聲音。工作很好,沒有藍牙......但藍牙輸出是最初的問題。現在的確是藍牙音頻輸出和內置麥克風輸入之間似乎存在衝突。全部在iPad上...不是iPhone(如果這有助於討論)。 – Cal30

2

這是目前的解決方案,但已過時,誰知道新的解決方案,但在您的應用程序現在加上這部分代碼和所有工作得很好!

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

希望這對你有所幫助!

1

您是否使用setCategory檢查了選項?它從iOS 6開始

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:&error]; 
+0

是的,我做了,仍然沒有工作。似乎是輸入來自內置麥克風,輸出是藍牙的混淆。 – Cal30

相關問題