2012-06-18 16 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

は基本的に、あなたはちょうどあなたが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)); 
+0

これをAVAudioEngineにどのように適用するか考えていますか? – DrMickeyLauer

関連する問題