2012-06-18 112 views
6

我正試圖讓音頻應用在後臺播放。到目前爲止,我補充說:「應用程序播放音頻」中的info.plist的「所需的背景模式」,也有下面的代碼剛開始我的聲音發生器前:屏幕鎖定時iOS背景音頻會停止

AudioSessionInitialize(NULL, kCFRunLoopDefaultMode, &interruptionListener, sgD); 
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, &routeChangeListener, sgD); 

// select "Playback" audio session category 
NSError *setCategoryError = nil; 
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError]; 

OSStatus propertySetError = 0; 
UInt32 category = kAudioSessionCategory_MediaPlayback; 
propertySetError = AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (category), &category); 

AudioSessionSetActive(true); 

然而,這個時候我切換到另一個應用程序僅適用或iPod的主屏幕。當我關閉屏幕時,它也會關閉我的音頻輸出,這絕對不是我想要的。但是,對於stackoverflow上的問題,所有教程/文檔/答案似乎都表明,在屏幕關閉時保持音頻運行時會自動獲得背景音頻。有人給我提示嗎?提前感謝! 弗裏茨

+0

什麼我忘了說:我使用AudioQueues來生成音頻輸出流。當屏幕關閉時,音頻隊列回調被調用,但耳機聽不到聲音。這可能表示一些音頻路由問題。但是,我的路由更改回調從未被調用。 –

+4

好的,問題解決了......原來,音頻緩衝區大小必須足夠大,如果它應該在屏幕關閉時運行。我不知道這是否適用於所有應用程序,但我的應用程序需要至少2048個樣本的緩衝區大小。有1024個樣本,它只是停止工作。 –

+3

如果你能夠得到它的工作,你可以添加你的解決方案作爲答案?謝謝。 –

回答

5

這篇文章解釋了這個問題:

Technical Q&A QA1606 Audio Unit Processing Graph - Ensuring audio playback continues when screen is locked

基本上,你只需要確保你將所有AudioUnits支持4096片:

// set the mixer unit to handle 4096 samples per slice since we want to keep rendering during screen lock 
UInt32 maxFPS = 4096; 
AudioUnitSetProperty(
    mMixer, 
    kAudioUnitProperty_MaximumFramesPerSlice, 
    kAudioUnitScope_Global, 
    0, 
    &maxFPS, 
    sizeof(maxFPS)); 
+0

任何想法如何將此應用於AVAudioEngine? – DrMickeyLauer

相關問題