8

我正在尝试让我的音频应用程序在后台播放。到目前为止,我在 info.plist 中将“应用程序播放音频”添加到了“所需的背景模式”中,并且在启动我的声音生成器之前添加了以下代码:

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 上的所有教程/文档/问题的答案似乎都表明,当您让背景音频工作时,在屏幕关闭时保持音频运行会自动发生。有人对我有提示吗?提前非常感谢!弗里茨

4

1 回答 1

5

这篇文章解释了这个问题:

技术问答 QA1606 音频单元处理图 - 确保屏幕锁定时继续播放音频

基本上,您只需要确保将所有 AudioUnit 设置为支持 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));
于 2014-06-21T19:41:49.320 回答