0

私の iOS アプリには、AUGraph の Mixer ユニットに接続された 4 つの filePlayer ユニットがあります。ユーザーが 4 つの filePlayer ユニットの「ミックス」を 1 つの .caf ファイルとして電子メールで送信できるようにしたいと考えています。

コールバックを remoteIO にアタッチし、コールバックで ExtAudioFileWriteAsync を介してミキサーの出力をファイルに書き込むことで、ミキサーの出力をキャプチャしています。

AUGraphStartユーザーが [ミックスをエクスポートして電子メールで送信] ボタンをクリックすると、そのプロセスが開始されます。つまり、電話をかけます。別のスレッドで発生するため、グラフの実行中AUGraphStartにアプリが次にコードを呼び出します。MFMailComposeViewControllerこのコードは、電子メール フォームを表示し、混合 .caf ファイルを電子メールに添付します。ここで明らかな問題は、グラフがまだ実行されているため、作成されたファイルが完全に書き込まれていないことです。

これを回避するには、AUGraph の開始を開始した直後に次のようにします。

    while ([myMixerObject graphIsRunning]) {
//        NSLog(@"...waiting for graph to stop...");
    }

graphIsRunningブール値を呼び出しAUGraphIsRunningて返すだけです。

滑稽に見えたにもかかわらず、これはうまくいきましたが、私は続けました。

UIActivityIndicatorViewAUGraph がミキサーの出力をキャプチャしているときに を表示しようとすると、さらに問題が発生しました。要するに、私がこれを行うとき...

    [activityIndicator startAnimating];
    while ([myMixerObject graphIsRunning]) {
//        NSLog(@"...waiting for graph to stop...");
    }
    [activityIndicator stopAnimating];

...インジケーターは表示されません。

キックのために[activityIndicator startAnimating]whileループの中に入れましたが、まだ表示されません。

activityIndi​​cator オブジェクトが正しくインスタンス化されていることを確認しました (たとえば、グラフが実行されていないときに表示されるようにすることができます) AUGraph

私はまだ iOS と Core Audio に慣れていませんが、一部の Core Audio 呼び出しがリアルタイム スレッドで発生することを知っているので、最初に疑うのは、同時実行の問題が発生していることです。しかし、どこから始めればよいかわかりません。while()問題が始まるのは私のループですか?私はそれを別の方法でアプローチする必要がありますか?

4

1 に答える 1