3

ビュー コントローラーで AVCaptureSession を実行しようとしていますが、その中で、AVAudioSession を使用するライブラリから関数も呼び出しています。この特定のライブラリの関数を呼び出すと正確にクラッシュすることを除いて、デバッガーから多くの情報を取得できないようです。ライブラリは libpd です。

https://github.com/libpd

AVAudioSession を sharedInstance として呼び出します。libpd を次のように呼び出します。

[self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mixingEnabled:YES]

ミキシングが有効になっていますが、念のため、再コンパイルして、初期化時に次のようにします。

    UInt32 doSetProperty = 1;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,  sizeof(doSetProperty), &doSetProperty);

しかし、運が悪い。ビューコントローラー内でlibpdへの呼び出しをviewWillAppearに移動しても機能しませんでした。ただし、viewcontroller から libpd を呼び出すコードを取り出し、didFinishLaunchingWithOptions 内のアプリ デリゲートに配置すると、正常に起動し、2 つのセッションがクラッシュすることなく共存しているように見えます。

AVCaptureSession とミキシングについて何か不足していますか? 両方のセッションを共存させるにはどうすればよいですか? AVCapture を使用してオーディオをキャプチャするのではなく、カメラ入力のみを使用しているので、どうにかして両方を実行できるようにすべきではありませんか?

4

2 に答える 2

4

カメラ セッションを開始したら、オーディオ セッション (ミキシングをサポートするように設定できます) を開始します。試してみましたが、オーディオ セッションを開始する前に、カメラがセットアップされるまで待つ必要があります (たとえば、数秒待ちます)。

于 2012-05-11T22:32:20.200 に答える
0

ライブラリは、アクティブなオーディオ セッションが他にないと想定して呼び出しを行っている可能性はありますAudioSessionInitializeか?

ドキュメントによると、「必要に応じてオーディオ セッションをアクティブ化および非アクティブ化できます (AudioSessionSetActive を参照)。ただし、初期化は 1 回だけにしてください。」

このライブラリの作成者は進行中のオーディオ セッションの機能を含んでいないと思いますが、アプリが常にその関数呼び出しを実行する限り、そこに飛び込んで初期化行をコメント アウトするのは簡単です。実行中のオーディオ セッションで (そうでない場合は、ifステートメントを使用して、オーディオ セッションがあるかどうかを確認し、ない場合は初期化するなどしてください)。

于 2012-05-11T18:42:04.217 に答える