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 のメイン画面に切り替えた場合にのみ機能します。画面をオフにすると、オーディオ出力もオフになりますが、これは私が望んでいるものではありません。ただし、スタックオーバーフローに関するすべてのチュートリアル/ドキュメント/質問への回答は、バックグラウンドオーディオを機能させると、画面がオフのときにオーディオを実行し続けることが自動的に行われることを示しているようです。誰か私にヒントがありますか?よろしくお願いします!フリッツ

4

1 に答える 1

5

この記事では、問題について説明します。

テクニカル Q&A QA1606 オーディオ ユニット処理グラフ - 画面がロックされているときにオーディオ再生が続行されるようにする

基本的に、4096 スライスをサポートするようにすべての AudioUnits を設定する必要があります。

// 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 に答える